Appendix A: XForms���f���̃X�L�[�}


Contents

A.1 XForms���f���X�L�[�}

<?xml version="1.0"?>
<xsd:schema targetNamespace="http://www.w3.org/2001/02/xforms"
xmlns:xform="http://www.w3.org/2001/02/xforms"
xmlns="http://www.w3.org/2001/02/xforms"
xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" elementFormDefault="qualified">
  <!--
  <xsd:schema> �G�������g���g�����߂ɂ́AXMLSchema�̂��߂̃X�L�[�}���C���|�[�g���邱�ƁB
  -->
  <xsd:import namespace="http://www.w3.org/2000/10/XMLSchema"/>
  <!--

  XForms��<model>�G�������g�A����т��̒��Ɋ܂܂��
  �S�Ă̂��߂̃X�L�[�}���`����B����ɂ�XForms�Œ�`���ꂽ
  �f�[�^�^�ƁA���I�Ȓl�������A���s���ɕω�������XForms�d�l�v���p�e�B
  ���܂܂��B�����ɂ͂���1�‚�XML�V���^�b�N�X�Ƃ��āA
  XForms���f���̃G�������g�̒�`�ɗp���邱�Ƃ��ł���
  XForms��simple�V���^�b�N�X�̒�`���܂܂��B

  -->
<!--

      XForms�\���G�������g��`

  -->
<!--

  xform�R���e�i�G�������g�̒�`

  -->
  <xsd:element name="xform">
    <xsd:complexType>
      <xsd:choice maxOccurs="unbounded">
        <xsd:element ref="model"/>
        <xsd:element ref="instance"/>
        <xsd:element ref="submit"/>
        <xsd:element ref="bind"/>
      </xsd:choice>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
    </xsd:complexType>
  </xsd:element>
<!--

  �g�b�v���x����model�G�������g�̒�`

  -->
  <xsd:element name="model">
    <xsd:complexType>
       <xsd:choice>
        <xsd:element ref="xsd:schema"/>
        <xsd:element ref="simple"/>
        <xsd:sequence>
          <xsd:element ref="xsd:schema"/>
          <xsd:element ref="simple"/>
        </xsd:sequence>
      </xsd:choice>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="name" type="xsd:NCName" use="optional"/>
      <xsd:attribute name="href" type="xsd:uriReference" use="optional"/>
    </xsd:complexType>
  </xsd:element>
<!--

  �g�b�v���x����instance�G�������g�̒�`

  -->
  <xsd:element name="instance">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:any namespace="##other" processContents="skip"           maxOccurs="unbounded"/>
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="model" type="xsd:IDREF" use="optional"/>
      <xsd:attribute name="href" type="xsd:uriReference" use="optional"/>
    </xsd:complexType>
  </xsd:element>
<!--

  submitExtension �G�������g�̒�`�B
  SubmitExtension �Ɋ܂܂��G�������g�̓l�[���X�y�[�X��qualify����Ă��Ȃ���΂Ȃ�Ȃ��B
  �͎��l�[���X�y�[�X���������ꂸ�A����mustUnderstand ������true�ɃZ�b�g����Ă���΁A����Submit �̓��e�͎g�p�����ׂ��ł͂Ȃ��B
  -->
  <!--  -->
  <xsd:element name="submitExtension">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:any namespace="##other" processContents="skip"/>
      </xsd:sequence>
      <xsd:attribute name="mustUnderstand" type="xsd:boolean" use="optional" value="true"/>
    </xsd:complexType>
  </xsd:element>
  <!--

  �g�b�v���x����submit�G�������g�̒�`

  -->
  <xsd:element name="submit">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element ref="submitExtension" minOccurs="0" maxOccurs="unbounded"/>
        <!-- allow zero or more submitExtension elements -->
      </xsd:sequence>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="target" type="xsd:uriReference" use="required"/>
      <xsd:attribute name="method" type="xsd:string" use="optional"/>
    </xsd:complexType>
  </xsd:element>
<!--

  �g�b�v���x����bind�G�������g�̒�`

  -->
  <xsd:element name="bind">
    <xsd:complexType>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="ref" type="xsd:string" use="optional"/>
    </xsd:complexType>
  </xsd:element>
<!--

  XForms���^�̒�`�B
  ���l: ����XML Schema��p���Ď���������@���������ꍇ��
  �i�����炭������������ƃp�^�[���̑g�ݍ��킹�ʼn”\�ł���j�A
  ��X��������(expression language)�Ƀt�B�b�g������̂��`����ۂɂ́A
  ����͖{����XForm���^�ɒu��������K�v������B

  -->
  <xsd:simpleType name="xfmExpr">
    <xsd:restriction base="xsd:string"/>
  </xsd:simpleType>
<!--

  �����O���[�v��`�ŗp������XForms�^�B
  ���l: �����͑S��xfmExpr����̒P���Ȕh���^�ł���B
  ����XML Schema��p���Ă���������������@���������ꍇ�ɂ́A
  ��X�͖]�܂ꂽ�^�̌��ʂɋ�������悤�ɕύX���Ȃ���΂Ȃ�Ȃ��B

  -->
<!--
  
  String�l��Ԃ��Ȃ���΂Ȃ�Ȃ����ŗp������AstringExpr�^�̒�`

  -->
  <xsd:simpleType name="stringExpr">
    <xsd:union memberTypes="xsd:string xfmExpr" />
  </xsd:simpleType>
<!--

  Boolean�l��Ԃ��Ȃ���΂Ȃ�Ȃ����ŗp������AboolExpr�^�̒�`

  -->
  <xsd:simpleType name="boolExpr">
    <xsd:union memberTypes="xsd:boolean xfmExpr" />
  </xsd:simpleType>
<!--

  Number�l��Ԃ��Ȃ���΂Ȃ�Ȃ����ŗp������AnumberExpr�^�̒�`

  -->
  <xsd:simpleType name="numberExpr">
    <xsd:union memberTypes="xsd:decimal xfmExpr" />
  </xsd:simpleType>
<!--

  ���̐����l��Ԃ��Ȃ���΂Ȃ�Ȃ����ŗp������ApositiveIntExpr�^�̒�`
  
  -->
  <xsd:simpleType name="positiveIntExpr">
    <xsd:union memberTypes="xsd:positiveInteger xfmExpr" />
  </xsd:simpleType>
<!--

  Date�l��Ԃ��Ȃ���΂Ȃ�Ȃ����ŗp������AdateExpr�^�̒�`

-->
  <xsd:simpleType name="dateExpr">
    <xsd:union memberTypes="xsd:date xfmExpr" />
  </xsd:simpleType>
<!--

  Time�l��Ԃ��Ȃ���΂Ȃ�Ȃ����ŗp������AtimeExpr�^�̒�`

-->
  <xsd:simpleType name="timeExpr">
    <xsd:union memberTypes="xsd:time xfmExpr" />
  </xsd:simpleType>
<!--

  Duration�l��Ԃ��Ȃ���΂Ȃ�Ȃ����ŗp������AdurationExpr�^�̒�`

-->
  <xsd:simpleType name="durationExpr">
    <xsd:union memberTypes="xsd:timeDuration xfmExpr" />
  </xsd:simpleType>
<!--

  �C�ӂ̐���scheme�l�����ƒ��X�g��Ԃ��Ȃ���΂Ȃ�Ȃ����ŗp������A
  schemeExpr�^�̒�`�B
  �X�L�[����URI�̒l��Ԃ�����URI�X�L�[���Ɍ��肷�邽�߂ɗp����B

-->
  <xsd:simpleType name="schemeType">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="[a-z]+"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="schemeExpr">
    <xsd:union memberTypes="schemeType xfmExpr" />
  </xsd:simpleType>
<!--

  URI�l��Ԃ��Ȃ���΂Ȃ�Ȃ����ŗp������AuriExpr�^�̒�`

-->
  <xsd:simpleType name="uriExpr">
    <xsd:union memberTypes="xsd:uriReference xfmExpr" />
  </xsd:simpleType>
<!--

  �C�ӂ̐���mediaType�l�����ƒ��X�g��Ԃ��Ȃ���΂Ȃ�Ȃ�����
  �p������AmediaTypeExpr�^�̒�`�B
  ���f�B�A�^�C�v�̓o�C�i���G�������g�̒l��Ԃ�1�ˆȏ��MIME
  ���f�B�A�^�C�v�Ɍ��肷�邽�߂ɗp����B
  
-->
  <xsd:simpleType name="mediaTypeType">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="[a-z]+/[a-z]+"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="mediaTypeExpr">
    <xsd:union memberTypes="mediaTypeType xfmExpr" />
  </xsd:simpleType>
<!--

  Binary�l��Ԃ��Ȃ���΂Ȃ�Ȃ����ŗp������AbinaryExpr�^�̒�`

-->
  <xsd:simpleType name="binaryExpr">
    <xsd:union memberTypes="xsd:binary xfmExpr" />
  </xsd:simpleType>
<!--

  3��������Ȃ�P��̒ʉ݃R�[�h��Ԃ��Ȃ���΂Ȃ�Ȃ����ŗp������A
  currencyType�^�̒�`

-->
  <xsd:simpleType name="currencyType">
      <xsd:restriction base="xsd:string">
        <xsd:pattern value="[A-Z]{3}"/>
      </xsd:restriction>
  </xsd:simpleType>
<!--

  �C�ӂ̐���3��������Ȃ�ʉ݃R�[�h�����ƒ��X�g��Ԃ��Ȃ����
  �Ȃ�Ȃ����ŗp������AcurrencyExpr�^�̒�`

-->
  <xsd:simpleType name="currencyExpr">
    <xsd:union memberTypes="currencyType xfmExpr" />
  </xsd:simpleType>
<!--
    XForms�d�l�v���p�e�B�����O���[�v
  -->
  <xsd:attributeGroup name="XFSPcommonMinusEnum">
    <xsd:attribute name="id" type="xsd:ID" use="optional"/>
    <xsd:attribute name="required" type="boolExpr" 
      use="default" value="false"/>
    <xsd:attribute name="readOnly" type="boolExpr" 
      use="default" value="false"/>
    <xsd:attribute name="relevant" type="boolExpr" 
      use="default" value="true"/>
    <xsd:attribute name="validate" type="boolExpr" 
      use="default" value="true"/>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="XFSPcommon">
    <xsd:attributeGroup ref="XFSPcommonMinusEnum"/>
    <xsd:attribute name="enum" use="optional">
      <xsd:simpleType>
        <xsd:restriction base="xsd:NMTOKEN">
          <xsd:enumeration value="open"/>
          <xsd:enumeration value="closed"/>
        </xsd:restriction>
      </xsd:simpleType>
    </xsd:attribute>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="XFSPname">
    <xsd:attribute name="name" type="xsd:NCName" use="required"/>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="XFSPcommonMinusEnumSimple">
    <xsd:attributeGroup ref="XFSPname"/>
    <xsd:attributeGroup ref="XFSPcommonMinusEnum"/>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="XFSPcommonSimple">
    <xsd:attributeGroup ref="XFSPname"/>
    <xsd:attributeGroup ref="XFSPcommon"/>
  </xsd:attributeGroup>
<!--

  @calculate��@choices���`���鑮���O���[�v�B
  choices�͗񋓂��ꂽ�A���s���̓K�؂Ɍ^�t�����ꂽ�l�̃��X�g��Ԃ����B
  calculate�͎��s���̐������^�̒l��1�•Ԃ��B

-->
  <xsd:attributeGroup name="XFSPcalcAndChoices">
    <xsd:attribute name="calculate" type="xfmExpr" use="optional"/>
    <xsd:attribute name="choices" type="xfmExpr" use="optional"/>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="XFSPcalcAndChoicesString">
    <xsd:attribute name="calculate" type="stringExpr" use="optional"/>
    <xsd:attribute name="choices" type="stringExpr" use="optional"/>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="XFSPcalcAndChoicesBoolean">
    <xsd:attribute name="calculate" type="boolExpr" use="optional"/>
    <xsd:attribute name="choices" type="boolExpr" use="optional"/>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="XFSPcalcAndChoicesNumber">
    <xsd:attribute name="calculate" type="numberExpr" use="optional"/>
    <xsd:attribute name="choices" type="numberExpr" use="optional"/>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="XFSPcalcAndChoicesDate">
    <xsd:attribute name="calculate" type="dateExpr" use="optional"/>
    <xsd:attribute name="choices" type="dateExpr" use="optional"/>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="XFSPcalcAndChoicesTime">
    <xsd:attribute name="calculate" type="timeExpr" use="optional"/>
    <xsd:attribute name="choices" type="timeExpr" use="optional"/>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="XFSPcalcAndChoicesDuration">
    <xsd:attribute name="calculate" type="durationExpr" use="optional"/>
    <xsd:attribute name="choices" type="durationExpr" use="optional"/>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="XFSPcalcAndChoicesURI">
    <xsd:attribute name="calculate" type="uriExpr" use="optional"/>
    <xsd:attribute name="choices" type="uriExpr" use="optional"/>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="XFSPcalcAndChoicesBinary">
    <xsd:attribute name="calculate" type="binaryExpr" use="optional"/>
    <xsd:attribute name="choices" type="binaryExpr" use="optional"/>
  </xsd:attributeGroup>
  <xsd:attributeGroup name="XFSPcalcAndChoicesCurrency">
    <xsd:attribute name="calculate" type="currencyExpr" use="optional"/>
    <xsd:attribute name="choices" type="currencyExpr" use="optional"/>
  </xsd:attributeGroup>
  <!-- Number�����Money�ɓK�p -->
  <xsd:attributeGroup name="XFSPmmNumber">
    <xsd:attribute name="minInclusive" type="numberExpr" use="optional"/>
    <xsd:attribute name="minExclusive" type="numberExpr" use="optional"/>
    <xsd:attribute name="maxInclusive" type="numberExpr" use="optional"/>
    <xsd:attribute name="maxExclusive" type="numberExpr" use="optional"/>
  </xsd:attributeGroup>
  <!--
  -->
  <xsd:attributeGroup name="XFSPmmNumberSimple">
    <xsd:attribute name="min" type="numberExpr" use="optional"/>
    <xsd:attribute name="max" type="numberExpr" use="optional"/>
  </xsd:attributeGroup>
  <!--
  -->
  <!-- Date�ɓK�p -->
  <xsd:attributeGroup name="XFSPmmDate">
    <xsd:attribute name="minInclusive" type="dateExpr" use="optional"/>
    <xsd:attribute name="minExclusive" type="dateExpr" use="optional"/>
    <xsd:attribute name="maxInclusive" type="dateExpr" use="optional"/>
    <xsd:attribute name="maxExclusive" type="dateExpr" use="optional"/>
  </xsd:attributeGroup>
<!--
 -->
  <xsd:attributeGroup name="XFSPmmDateSimple">
    <xsd:attribute name="min" type="dateExpr" use="optional"/>
    <xsd:attribute name="max" type="dateExpr" use="optional"/>
  </xsd:attributeGroup>
<!--
  -->
<!-- Duration�ɓK�p -->
  <xsd:attributeGroup name="XFSPmmDuration">
    <xsd:attribute name="minInclusive" type="durationExpr" use="optional"/>
    <xsd:attribute name="minExclusive" type="durationExpr" use="optional"/>
    <xsd:attribute name="maxInclusive" type="durationExpr" use="optional"/>
    <xsd:attribute name="maxExclusive" type="durationExpr" use="optional"/>
  </xsd:attributeGroup>
<!--
  -->
  <xsd:attributeGroup name="XFSPmmDurationSimple">
    <xsd:attribute name="min" type="durationExpr" use="optional"/>
    <xsd:attribute name="max" type="durationExpr" use="optional"/>
  </xsd:attributeGroup>
<!--
  -->
<!-- Time�ɓK�p -->
  <xsd:attributeGroup name="XFSPmmTime">
    <xsd:attribute name="minInclusive" type="timeExpr" use="optional"/>
    <xsd:attribute name="minExclusive" type="timeExpr" use="optional"/>
    <xsd:attribute name="maxInclusive" type="timeExpr" use="optional"/>
    <xsd:attribute name="maxExclusive" type="timeExpr" use="optional"/>
  </xsd:attributeGroup>
<!--
  -->
  <xsd:attributeGroup name="XFSPmmTimeSimple">
    <xsd:attribute name="min" type="timeExpr" use="optional"/>
    <xsd:attribute name="max" type="timeExpr" use="optional"/>
  </xsd:attributeGroup>
<!--
  -->
<!-- String, Binary, URI�ɓK�p -->
  <xsd:attributeGroup name="XFSPlengthNumber">
    <xsd:attribute name="length" type="positiveIntExpr" use="optional"/>
    <xsd:attribute name="minLength" type="positiveIntExpr" use="optional"/>
    <xsd:attribute name="maxLength" type="positiveIntExpr" use="optional"/>
  </xsd:attributeGroup>
<!--
  -->
  <!-- Number�����Money�ɓK�p -->
  <xsd:attributeGroup name="XFSPspNumber">
    <xsd:attribute name="scale" type="positiveIntExpr" use="optional"/>
    <xsd:attribute name="precision" type="positiveIntExpr" use="optional"/>
  </xsd:attributeGroup>
<!--

  �X�L�[�}�V���^�b�N�X�ɂ��A���f���̂��߂�XForms��{�f�[�^�^

-->
<!--

  string�^�̒�`

-->
  <xsd:complexType name="string">
    <xsd:simpleContent>
      <xsd:extension base="xsd:string">
        <xsd:attributeGroup ref="XFSPcommon"/>
        <xsd:attributeGroup ref="XFSPlengthNumber"/>
        <xsd:attributeGroup ref="XFSPcalcAndChoicesString"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
<!--

  boolean�^�̒�`

-->
  <xsd:complexType name="boolean">
    <xsd:simpleContent>
      <xsd:extension base="xsd:boolean">
        <xsd:attributeGroup ref="XFSPcommonMinusEnum"/>
        <xsd:attribute name="calculate" type="boolExpr" use="optional"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
<!--

  number�^�̒�`

  -->
  <xsd:complexType name="number">
    <xsd:simpleContent>
      <xsd:extension base="xsd:decimal">
        <xsd:attributeGroup ref="XFSPcommon"/>
        <xsd:attributeGroup ref="XFSPmmNumber"/>
        <xsd:attributeGroup ref="XFSPspNumber"/>
        <xsd:attributeGroup ref="XFSPcalcAndChoicesNumber"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
<!--

  currency�^�̒�`

-->
  <xsd:complexType name="currency">
    <xsd:simpleContent>
      <xsd:extension base="currencyType">
        <xsd:attributeGroup ref="XFSPcommon"/>
        <xsd:attributeGroup ref="XFSPcalcAndChoicesCurrency"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
<!--

  money�^�̒�`
  �I���� B: �����f�[�^�^

-->
  <xsd:complexType name="money">
    <xsd:sequence>
      <xsd:element name="value">
        <xsd:complexType>
          <xsd:simpleContent>
            <xsd:extension base="xsd:decimal">
              <xsd:attribute name="calculate" type="numberExpr"/>
            </xsd:extension>
          </xsd:simpleContent>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="currency">
        <xsd:complexType>
          <xsd:simpleContent>
            <xsd:extension base="currencyType">
              <xsd:attribute name="calculate" type="currencyExpr"/>
            </xsd:extension>
          </xsd:simpleContent>
        </xsd:complexType>
      </xsd:element>
      <xsd:element name="allowCurrency" type="currencyExpr" minOccurs="0" maxOccurs="unbounded"/>
<!--
      money�̒l��Ԃ𐧌�����C�ӂ̐���allowCurrency�G�������g
  -->
    </xsd:sequence>
    <xsd:attributeGroup ref="XFSPcommon"/>
    <xsd:attributeGroup ref="XFSPmmNumber"/>
    <xsd:attributeGroup ref="XFSPspNumber"/>
  </xsd:complexType>
<!--

  date�^�̒�`

  -->
  <xsd:complexType name="date">
    <xsd:simpleContent>
      <xsd:extension base="xsd:date">
        <xsd:attributeGroup ref="XFSPcommon"/>
        <xsd:attributeGroup ref="XFSPmmDate"/>
        <xsd:attributeGroup ref="XFSPcalcAndChoicesDate"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
<!--

  time�^�̒�`

  -->
  <xsd:complexType name="time">
    <xsd:simpleContent>
      <xsd:extension base="xsd:time">
        <xsd:attributeGroup ref="XFSPcommon"/>
        <xsd:attributeGroup ref="XFSPmmTime"/>
        <xsd:attributeGroup ref="XFSPcalcAndChoicesTime"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
<!--

  duration�^�̒�`

  -->
  <xsd:complexType name="duration">
    <xsd:simpleContent>
      <xsd:extension base="xsd:timeDuration">
        <xsd:attributeGroup ref="XFSPcommon"/>
        <xsd:attributeGroup ref="XFSPmmDuration"/>
        <xsd:attributeGroup ref="XFSPcalcAndChoicesDuration"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
<!--
  -->
<!--

  uri�^�̒�`

  -->
  <xsd:complexType name="uri">
    <xsd:simpleContent>
      <xsd:extension base="xsd:uriReference">
        <xsd:attributeGroup ref="XFSPcommon"/>
        <xsd:attributeGroup ref="XFSPlengthNumber"/>
        <xsd:attributeGroup ref="XFSPcalcAndChoicesURI"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
<!--

  binary�^�̒�`

-->
  <xsd:complexType name="binary">
    <xsd:simpleContent>
      <xsd:extension base="xsd:binary">
        <xsd:attributeGroup ref="XFSPcommon"/>
        <xsd:attributeGroup ref="XFSPlengthNumber"/>
        <xsd:attributeGroup ref="XFSPcalcAndChoicesBinary"/>
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>
<!--

  XForms simple�V���^�b�N�X�̃G�������g��`
  �\���G�������g�A�f�[�^�^�G�������g�Ƒ���

-->

<!--

  simple�V���^�b�N�X�G�������g�̒�`���܂�simple�G�������g�̒�`

  -->
  <xsd:element name="simple">
    <xsd:complexType>
      <xsd:choice maxOccurs="unbounded">
        <xsd:element ref="string"/>
        <xsd:element ref="boolean"/>
        <xsd:element ref="number"/>
        <xsd:element ref="currency"/>
        <xsd:element ref="money"/>
        <xsd:element ref="date"/>
        <xsd:element ref="time"/>
        <xsd:element ref="duration"/>
        <xsd:element ref="uri"/>
        <xsd:element ref="binary"/>
        <xsd:element ref="element"/>
        <xsd:element ref="array"/>
        <xsd:element ref="group"/>
        <xsd:element ref="switch"/>
        <xsd:element ref="union"/>
      </xsd:choice>
      <xsd:attribute name="id" type="xsd:ID" use="optional"/>
      <xsd:attribute name="name" type="xsd:NCName" use="optional"/>
    </xsd:complexType>
  </xsd:element>
<!--

  simple�V���^�b�N�X�ɂ�����group�G�������g�̒�`

  -->
  <xsd:element name="group">
    <xsd:complexType>
      <xsd:choice maxOccurs="unbounded">
        <xsd:element ref="string"/>
        <xsd:element ref="boolean"/>
        <xsd:element ref="number"/>
        <xsd:element ref="currency"/>
        <xsd:element ref="money"/>
        <xsd:element ref="date"/>
        <xsd:element ref="time"/>
        <xsd:element ref="duration"/>
        <xsd:element ref="uri"/>
        <xsd:element ref="binary"/>
        <xsd:element ref="element"/>
        <xsd:element ref="switch"/>
        <xsd:element ref="union"/>
      </xsd:choice>
      <xsd:attributeGroup ref="XFSPname"/>
    </xsd:complexType>
  </xsd:element>
  <!--
  array�ŗp������occurs�����O���[�v
  -->
  <xsd:attributeGroup name="occurs">
    <xsd:attribute name="minOccurs" use="default" value="1">
      <xsd:simpleType>
        <xsd:union memberTypes="xfmExpr xsd:nonNegativeInteger"/>
      </xsd:simpleType>
    </xsd:attribute>
    <xsd:attribute name="maxOccurs" use="default" value="1">
      <xsd:simpleType>
        <xsd:union memberTypes="xfmExpr xsd:nonNegativeInteger">
          <xsd:simpleType>
            <xsd:restriction base="xsd:NMTOKEN">
              <xsd:enumeration value="unbounded"/>
            </xsd:restriction>
          </xsd:simpleType>
        </xsd:union>
      </xsd:simpleType>
    </xsd:attribute>
  </xsd:attributeGroup>
<!--

  simple�V���^�b�N�X�ɂ�����array�G�������g�̒�`
  ���_: switch��union�������ׂ���?

-->
  <xsd:element name="array">
    <xsd:complexType>
      <xsd:choice>
        <xsd:element ref="string"/>
        <xsd:element ref="boolean"/>
        <xsd:element ref="number"/>
        <xsd:element ref="currency"/>
        <xsd:element ref="money"/>
        <xsd:element ref="date"/>
        <xsd:element ref="time"/>
        <xsd:element ref="duration"/>
        <xsd:element ref="uri"/>
        <xsd:element ref="binary"/>
        <xsd:element ref="element"/>
      </xsd:choice>
      <xsd:attribute name="name" type="xsd:NCName" use="optional"/>
      <xsd:attributeGroup ref="occurs"/>
    </xsd:complexType>
  </xsd:element>
<!--

  simple�V���^�b�N�X�ɂ�����union�G�������g�̒�`

  ���l: <union> �̂��߂̃X�L�[�}�́A���̎q�f�[�^�^��name������v������B
  ���̃X�L�[�}���A�P�ɂ�����`���邽�߂ɍė��p���邽�߂ł���B
  ���̎w��ł�name�͎q�f�[�^�^�ɂ͕K�{�łȂ��Ƃ��Ă���B
  ����͏����̃o�[�W�����ŏC�������\��́A�F������Ă���s��ł���B
 
-->
  <xsd:element name="union">
    <xsd:complexType>
      <xsd:choice maxOccurs="unbounded">
        <xsd:element ref="string"/>
        <xsd:element ref="boolean"/>
        <xsd:element ref="number"/>
        <xsd:element ref="currency"/>
        <xsd:element ref="money"/>
        <xsd:element ref="date"/>
        <xsd:element ref="time"/>
        <xsd:element ref="duration"/>
        <xsd:element ref="uri"/>
        <xsd:element ref="binary"/>
      </xsd:choice>
      <xsd:attributeGroup ref="XFSPname"/>
    </xsd:complexType>
  </xsd:element>
<!--

  simple�V���^�b�N�X�ɂ�����switch�G�������g�̒�`

  -->
  <xsd:element name="switch">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="case" maxOccurs="unbounded">
          <xsd:complexType>
            <xsd:choice maxOccurs="unbounded">
              <xsd:element ref="string"/>
              <xsd:element ref="boolean"/>
              <xsd:element ref="number"/>
              <xsd:element ref="currency"/>
              <xsd:element ref="money"/>
              <xsd:element ref="date"/>
              <xsd:element ref="time"/>
              <xsd:element ref="duration"/>
              <xsd:element ref="uri"/>
              <xsd:element ref="binary"/>
              <xsd:element ref="element"/>
              <xsd:element ref="group"/>
              <xsd:element ref="array"/>
            </xsd:choice>
            <xsd:attributeGroup ref="XFSPname"/>
            <xsd:attribute name="condition" type="xfmExpr" use="optional"/>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
      <xsd:attributeGroup ref="XFSPname"/>
    </xsd:complexType>
  </xsd:element>
<!--

  simple�V���^�b�N�X�ɂ�����element�G�������g�̒�`

  -->
  <xsd:element name="element" id="element">
    <xsd:complexType>
      <xsd:attribute name="type" type="xsd:QName" use="required"/>
      <xsd:attributeGroup ref="XFSPcommonMinusEnumSimple"/>
    </xsd:complexType>
  </xsd:element>
<!--
  simple�V���^�b�N�X�ł̂�string�����currency�ɗp������
  mask�t�@�Z�b�g�̒�`�B
  WAP/WML��format���������f���ɂ��Ă���B
  -->
  <xsd:simpleType name="maskType">
    <xsd:restriction base="xsd:string">
      <xsd:pattern 
  value="((A|a|X|x|N|n|M|m)|(\\.))*([0-9\*](A|a|X|x|N|n|M|m))?"/>
    </xsd:restriction>
  </xsd:simpleType>
  <xsd:simpleType name="maskExpr">
    <xsd:union memberTypes="maskType xfmExpr"/>
  </xsd:simpleType>
<!--

  simple�V���^�b�N�X�ɂ�����string�G�������g�̒�`

  -->
  <xsd:element name="string" id="string">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:string">
          <xsd:attributeGroup ref="XFSPcommonSimple"/>
          <xsd:attributeGroup ref="XFSPlengthNumber"/>
          <xsd:attributeGroup ref="XFSPcalcAndChoicesString"/>
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
<!--

  simple�V���^�b�N�X�ɂ�����boolean�G�������g�̒�`

  -->
  <xsd:element name="boolean">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:boolean">
          <xsd:attributeGroup ref="XFSPcommonMinusEnumSimple"/>
          <xsd:attribute name="calculate" type="boolExpr" use="optional"/>
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
<!--

  simple�V���^�b�N�X�ɂ�����number�G�������g�̒�`

  -->
  <xsd:element name="number">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:decimal">
          <xsd:attributeGroup ref="XFSPcommonSimple"/>
          <xsd:attributeGroup ref="XFSPmmNumberSimple"/>
          <xsd:attributeGroup ref="XFSPspNumber"/>
          <xsd:attributeGroup ref="XFSPcalcAndChoicesNumber"/>
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
<!--
       TBD: mask��currency�G�������g�őO��Ƃ��ċ�����Ă��邪�Acurrency�G�������g��money�̈ꕔ�ł���ꍇ�ɂ���������ׂ����낤��?
    -->
  <!--

  simple�V���^�b�N�X�ɂ�����currency�G�������g�̒�`

  -->
  <xsd:element name="currency">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="currencyType">
          <xsd:attributeGroup ref="XFSPcommonSimple"/>
          <xsd:attributeGroup ref="XFSPcalcAndChoices"/>
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
<!--

  simple�V���^�b�N�X�ɂ�����money�G�������g�̒�`
  �I���� B: �����f�[�^�^

  -->
  <xsd:element name="money">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="value">
          <xsd:complexType>
            <xsd:simpleContent>
              <xsd:extension base="xsd:decimal">
                <xsd:attribute name="calculate" type="numberExpr"/>
              </xsd:extension>
            </xsd:simpleContent>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="currency">
          <xsd:complexType>
            <xsd:simpleContent>
              <xsd:extension base="currencyType">
                <xsd:attribute name="calculate" type="currencyExpr"/>
              </xsd:extension>
            </xsd:simpleContent>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="allowCurrency" type="currencyExpr" minOccurs="0" maxOccurs="unbounded"/>
				<!--
        allow zero or more allowCurrency elements to restrict 
        the value space of money.
  -->
      </xsd:sequence>
      <xsd:attributeGroup ref="XFSPcommonSimple"/>
      <xsd:attributeGroup ref="XFSPmmNumberSimple"/>
      <xsd:attributeGroup ref="XFSPspNumber"/>
    </xsd:complexType>
  </xsd:element>
<!--

  simple�V���^�b�N�X�ɂ�����date�G�������g�̒�`

  -->
  <xsd:element name="date">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:date">
          <xsd:attributeGroup ref="XFSPcommonSimple"/>
          <xsd:attributeGroup ref="XFSPmmDateSimple"/>
          <xsd:attribute name="precision" use="optional">
            <xsd:simpleType>
              <xsd:restriction base="xsd:NMTOKEN">
                <xsd:enumeration value="years"/>
                <xsd:enumeration value="months"/>
                <xsd:enumeration value="days"/>
              </xsd:restriction>
            </xsd:simpleType>
          </xsd:attribute>
          <xsd:attributeGroup ref="XFSPcalcAndChoicesDate"/>
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
<!--

  simple�V���^�b�N�X�ɂ�����time�G�������g�̒�`

  -->
  <xsd:element name="time">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:time">
          <xsd:attributeGroup ref="XFSPcommonSimple"/>
          <xsd:attributeGroup ref="XFSPmmTimeSimple"/>
          <xsd:attribute name="precision" use="optional">
            <xsd:simpleType>
              <xsd:restriction base="xsd:NMTOKEN">
                <xsd:enumeration value="hours"/>
                <xsd:enumeration value="minutes"/>
                <xsd:enumeration value="seconds"/>
              </xsd:restriction>
            </xsd:simpleType>
          </xsd:attribute>
          <xsd:attributeGroup ref="XFSPcalcAndChoicesTime"/>
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
<!--

  simple�V���^�b�N�X�ɂ�����duration�G�������g�̒�`

  -->
  <xsd:element name="duration">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:timeDuration">
          <xsd:attributeGroup ref="XFSPcommonSimple"/>
          <xsd:attributeGroup ref="XFSPmmDurationSimple"/>
          <xsd:attribute name="precision" use="optional">
            <xsd:simpleType>
              <xsd:restriction base="xsd:NMTOKEN">
                <xsd:enumeration value="years"/>
                <xsd:enumeration value="months"/>
                <xsd:enumeration value="days"/>
                <xsd:enumeration value="hours"/>
                <xsd:enumeration value="minutes"/>
                <xsd:enumeration value="seconds"/>
              </xsd:restriction>
            </xsd:simpleType>
          </xsd:attribute>
          <xsd:attributeGroup ref="XFSPcalcAndChoicesDuration"/>
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
<!--

  simple�V���^�b�N�X�ɂ�����uri�G�������g�̒�`

  -->
  <xsd:element name="uri">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:uriReference">
          <xsd:attributeGroup ref="XFSPcommonSimple"/>
          <xsd:attributeGroup ref="XFSPlengthNumber"/>
          <xsd:attributeGroup ref="XFSPcalcAndChoicesURI"/>
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
<!--

  simple�V���^�b�N�X�ɂ�����binary�G�������g�̒�`

  -->
  <xsd:element name="binary">
    <xsd:complexType>
      <xsd:simpleContent>
        <xsd:extension base="xsd:binary">
          <xsd:attributeGroup ref="XFSPcommonSimple"/>
          <xsd:attributeGroup ref="XFSPlengthNumber"/>
          <xsd:attributeGroup ref="XFSPcalcAndChoicesBinary"/>
        </xsd:extension>
      </xsd:simpleContent>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>