<?xml version="1.0" encoding="UTF-8" ?>
<!--
Note: The .xsd files are a Technology Preview. They are subject to change or removal in future CLDR versions.
Note: DTD @-annotations are not currently converted to .xsd. For full CLDR file validation, use the DTD and CLDR tools.
-->

<!--
  Copyright © 1991-2024 Unicode, Inc.
  For terms of use, see http://www.unicode.org/copyright.html
  SPDX-License-Identifier: Unicode-3.0
  CLDR data files are interpreted according to the LDML specification (http://unicode.org/reports/tr35/)
--><!--
  Note: This DTD is not compatible with prior versions of the keyboard data.
  See ldmlKeyboard.dtd  and CLDR v43 and prior.
--><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="keyboard3">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="import"/>
        <xs:element minOccurs="0" ref="locales"/>
        <xs:element minOccurs="0" ref="version"/>
        <xs:element ref="info"/>
        <xs:element minOccurs="0" ref="settings"/>
        <xs:element minOccurs="0" ref="displays"/>
        <xs:element minOccurs="0" ref="keys"/>
        <xs:element minOccurs="0" ref="flicks"/>
        <xs:element minOccurs="0" ref="forms"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="layers"/>
        <xs:element minOccurs="0" ref="variables"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="transforms"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="special"/>
      </xs:sequence>
      <xs:attribute name="locale" use="required"/>
      <xs:attribute name="conformsTo" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="45"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  
  
  
  
  
  <xs:element name="import">
    <xs:complexType>
      <xs:attribute name="path" use="required"/>
      <xs:attribute name="base">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="cldr"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="locales">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="locale"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="locale">
    <xs:complexType>
      <xs:attribute name="id" use="required"/>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="version">
    <xs:complexType>
      <xs:attribute name="number"/>
      <xs:attribute default="45" name="cldrVersion">
        <xs:simpleType>
          <xs:restriction base="xs:string">
            <xs:enumeration value="45"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  
  
  
  
  <xs:element name="info">
    <xs:complexType>
      <xs:attribute name="name" use="required"/>
      <xs:attribute name="author"/>
      <xs:attribute name="layout"/>
      <xs:attribute name="indicator"/>
    </xs:complexType>
  </xs:element>
  
  
  
  
  
  
  
  
  <xs:element name="settings">
    <xs:complexType>
      <xs:attribute name="normalization">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="disabled"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  
  
  <xs:element name="displays">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="import"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="display"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="displayOptions"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="special"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="display">
    <xs:complexType>
      <xs:attribute name="keyId" type="xs:NMTOKEN"/>
      <xs:attribute name="output"/>
      <xs:attribute name="display" use="required"/>
    </xs:complexType>
  </xs:element>
  
  
  
  
  
  
  <xs:element name="displayOptions">
    <xs:complexType>
      <xs:attribute name="baseCharacter"/>
    </xs:complexType>
  </xs:element>
  
  
  
  <xs:element name="special" type="any"/>
  <xs:element name="keys">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="import"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="key"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="special"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="key">
    <xs:complexType>
      <xs:attribute name="id" type="xs:NMTOKEN" use="required"/>
      <xs:attribute name="flickId" type="xs:NMTOKEN"/>
      <xs:attribute name="gap">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="true"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="output"/>
      <xs:attribute name="longPressKeyIds" type="xs:NMTOKENS"/>
      <xs:attribute name="longPressDefaultKeyId" type="xs:NMTOKEN"/>
      <xs:attribute name="multiTapKeyIds" type="xs:NMTOKENS"/>
      <xs:attribute name="stretch">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="true"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="layerId" type="xs:NMTOKEN"/>
      <xs:attribute name="width"/>
    </xs:complexType>
  </xs:element>
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  <xs:element name="flicks">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="import"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="flick"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="special"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="flick">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="flickSegment"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="special"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:NMTOKEN" use="required"/>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="flickSegment">
    <xs:complexType>
      <xs:attribute name="directions" type="xs:NMTOKENS" use="required"/>
      <xs:attribute name="keyId" type="xs:NMTOKEN" use="required"/>
    </xs:complexType>
  </xs:element>
  
  
  
  <xs:element name="forms">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="import"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="form"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="special"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="form">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="scanCodes"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="special"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:NMTOKEN"/>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="scanCodes">
    <xs:complexType>
      <xs:attribute name="codes" type="xs:NMTOKENS" use="required"/>
    </xs:complexType>
  </xs:element>
  
  
  <xs:element name="layers">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="import"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="layer"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="special"/>
      </xs:sequence>
      <xs:attribute name="formId" type="xs:NMTOKEN" use="required"/>
      <xs:attribute name="minDeviceWidth"/>
    </xs:complexType>
  </xs:element>
  
  
  <xs:element name="layer">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" ref="row"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="special"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:NMTOKEN"/>
      <xs:attribute name="modifiers" type="xs:NMTOKENS"/>
    </xs:complexType>
  </xs:element>
  
  
  <xs:element name="row">
    <xs:complexType>
      <xs:attribute name="keys" type="xs:NMTOKENS" use="required"/>
    </xs:complexType>
  </xs:element>
  
  
  
  <xs:element name="variables">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="import"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="string"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="set"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="uset"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="special"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="string">
    <xs:complexType>
      <xs:attribute name="id" type="xs:NMTOKEN" use="required"/>
      <xs:attribute name="value" use="required"/>
    </xs:complexType>
  </xs:element>
  
  
  
  
  <xs:element name="set">
    <xs:complexType>
      <xs:attribute name="id" type="xs:NMTOKEN" use="required"/>
      <xs:attribute name="value" use="required"/>
    </xs:complexType>
  </xs:element>
  
  
  
  
  <xs:element name="uset">
    <xs:complexType>
      <xs:attribute name="id" type="xs:NMTOKEN" use="required"/>
      <xs:attribute name="value" use="required"/>
    </xs:complexType>
  </xs:element>
  
  
  
  <xs:element name="transforms">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="import"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="transformGroup"/>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="special"/>
      </xs:sequence>
      <xs:attribute name="type" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="simple"/>
            <xs:enumeration value="backspace"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>
  
  <xs:element name="transformGroup">
    <xs:complexType>
      <xs:sequence>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="import"/>
        <xs:choice>
          <xs:element maxOccurs="unbounded" minOccurs="0" ref="transform"/>
          <xs:element maxOccurs="unbounded" minOccurs="0" ref="reorder"/>
        </xs:choice>
        <xs:element maxOccurs="unbounded" minOccurs="0" ref="special"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="transform">
    <xs:complexType>
      <xs:attribute name="from" use="required"/>
      <xs:attribute name="to"/>
    </xs:complexType>
  </xs:element>
  
  
  
  
  
  
  
  <xs:element name="reorder">
    <xs:complexType>
      <xs:attribute name="before"/>
      <xs:attribute name="from" use="required"/>
      <xs:attribute name="order"/>
      <xs:attribute name="tertiary"/>
      <xs:attribute name="tertiaryBase"/>
      <xs:attribute name="preBase"/>
    </xs:complexType>
  </xs:element>
  <xs:complexType mixed="true" name="any">
    <xs:sequence>
      <xs:any maxOccurs="unbounded" minOccurs="0" processContents="strict"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>