<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

  <!-- Root element -->
  <xs:element name="templateTable">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element name="control" type="templateType"/>
        <xs:element name="templateSnippet" type="templateType"/>
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <!-- Definition of a control element and templateSnippet element-->
  <xs:complexType name="templateType">
    <xs:all>
      <xs:element name="shortTemplate" type="templateStringType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="fullTemplate" type="templateStringType" minOccurs="0" maxOccurs="1"/>
      <xs:element name="brailleTemplate" type="templateStringType" minOccurs="0" maxOccurs="1"/>
    </xs:all>
    <xs:attribute name="elementType" type="elementTypeEnum" use="required"/>
  </xs:complexType>

  <!-- Template string validation with allowed tokens -->
  <xs:simpleType name="templateStringType">
    <xs:restriction base="xs:string">
      <!-- Either empty OR valid tokens separated by spaces -->
      <xs:pattern value="((Name|Pause|LocalizedControlType|ToggleState|Value|ValueIsReadOnly|IsEnabled|AccessKey|AcceleratorKey|IpAddress_Text|Formula|Document|ExpandCollapseState|SelectionType|DockPosition_Text|DockPosition|GridItem_ColRow|SelectionItem_IsSelected|ItemStatus|ItemType|Value_Text|Window_Text|CurrentValue_Text|Scrollinfo_WithText|ScrollPercent|RangeValue|TransformCanMove|TransformCanResize|TransformCanRotate|WindowIsModal|WindowIsTopmost|WindowSizing|MinimumValue_Text|MaximumValue_Text|RangeValueMin|RangeValueMax|ItemCount|Editable_Text|Editing_Text|RowHeader_Text|ColumnHeader_Text|IsInvalid|HasPopup|SizeOfSet|TableReadingPrefix|StructuralNavString|AriaCurrent|AriaCurrentPage|AriaCurrentStep|AriaCurrentLocation|AriaCurrentDate|AriaCurrentTime|ElementText|PrimaryAction|SecondaryAction|EditableText_Text|Passwordfield_Text|Percent|ScrollPercent_AndScrollType|ScrolledTo|ReadOnly_Text|Text_Text|TableReadingSuffix|ExplorableText_Text|HelpText|TableExit_Text|Table_Text|TableType|Enabled_Text|Disabled_Text|DoubleTapToEdit_Text|Dismiss_Text|TripleTapTo_Text|DoubleTapTo_Text|Draggable|IsRequired|CheckState|OctetPosition|Column_TableItemColumn_Row_TableItemRow|Column_TableItemColumn_Row_TableItemRow_Lower|Contains_GridColCount_GridRowCount|TableColumnNames_Contains_GridRowCount|Contains_GridColCount_Columns_TableRowNames|Columns_TableColumnNames_TableRowNames|TableColumnNames|TableRowNames|Contains_GridColCount_Columns_And_GridRowCount|Columns_TableColumnNames_Contains_GridRowCount|Contains_GridColCount_Columns_Pause_RowstableRowNames|TableColNames_TableRowNames|SelectionItemSelected_Text|SelectionType_Contains_ItemCount|Contains_ItemCount|SelectionType_List_ItemCount|List_ItemCount|List_NestedLevel|ItemCountsuggestions_Text|OctetPosition_Value|ListItemSubItemNames|TileNotification|CheckState|LocationBar_Address|ItemIndex_Of_ItemCount|LocalizedControlType_AtPercent|LocalizedControlType_AtSelectionItem|Name_AtPercent|Name_AtSelectionItem|Minimum_And_Maximum_RangeValue|RangeValueIsReadOnly|LocalizedControlType_ContainsItemCount|LocalizedControlType_WithGridRowCount|Name_WithGridRowCount|GridColCountColumns_Text|WindowText|FullDescription|DescribedBy|FormulaValue|CanBePressed_Text|PositionInSet_SizeOfSet|Level|Item_PositioninSet_OfLevel|Landmark|ItemPositionInSet_Text|AtLevel|Tab_Text|Spans_GridItemRowSpan|Spans_GridItemColSpan|TableRowHeader|TableColumnHeader|GridItemRow_OfCount|GridItemCol_OfCount|TableItem_RowHeader_LevelDepth|TableItem_ColHeader_LevelDepth|RowHeaderDiffSub|ColHeaderDiffSub|RowLocationDiffSub|ColLocationDiffSub|RowSpanSub|ColSpanSub|Has_GridRowCount_And_GridColCount|Editable_Braille|ReadOnly_Braille|Hk_Braille|Landmark_Braille|LandmarkType|Contains_GridColCount_Columns_TableRowNames_NoPause|TableItemCellType|HeadingLevel|RemoveSpace|PrimaryDescription|TableMergedCellText|TableGridItemSpan|HotKeyFieldKey|HotKeyFieldValue|ContentSelected_Text|CellsCountSelected_Text|TotalCellsCountSelected_Text|ContentUnselected_Text|TotalCellsUnselected_Text|CellStart_Text|CellEnd_Text|From_Text|To_Text|CellUnselected_Text)( (Name|Pause|LocalizedControlType|ToggleState|Value|ValueIsReadOnly|IsEnabled|AccessKey|AcceleratorKey|IpAddress_Text|Formula|Document|ExpandCollapseState|SelectionType|DockPosition_Text|DockPosition|GridItem_ColRow|SelectionItem_IsSelected|ItemStatus|ItemType|Value_Text|Window_Text|CurrentValue_Text|Scrollinfo_WithText|ScrollPercent|RangeValue|TransformCanMove|TransformCanResize|TransformCanRotate|WindowIsModal|WindowIsTopmost|WindowSizing|MinimumValue_Text|MaximumValue_Text|RangeValueMin|RangeValueMax|ItemCount|Editable_Text|Editing_Text|RowHeader_Text|ColumnHeader_Text|IsInvalid|HasPopup|SizeOfSet|TableReadingPrefix|StructuralNavString|AriaCurrent|AriaCurrentPage|AriaCurrentStep|AriaCurrentLocation|AriaCurrentDate|AriaCurrentTime|ElementText|PrimaryAction|SecondaryAction|EditableText_Text|Passwordfield_Text|Percent|ScrollPercent_AndScrollType|ScrolledTo|ReadOnly_Text|Text_Text|TableReadingSuffix|ExplorableText_Text|HelpText|TableExit_Text|Table_Text|TableType|Enabled_Text|Disabled_Text|DoubleTapToEdit_Text|Dismiss_Text|TripleTapTo_Text|DoubleTapTo_Text|Draggable|IsRequired|CheckState|OctetPosition|Column_TableItemColumn_Row_TableItemRow|Column_TableItemColumn_Row_TableItemRow_Lower|Contains_GridColCount_GridRowCount|TableColumnNames_Contains_GridRowCount|Contains_GridColCount_Columns_TableRowNames|Columns_TableColumnNames_TableRowNames|TableColumnNames|TableRowNames|Contains_GridColCount_Columns_And_GridRowCount|Columns_TableColumnNames_Contains_GridRowCount|Contains_GridColCount_Columns_Pause_RowstableRowNames|TableColNames_TableRowNames|SelectionItemSelected_Text|SelectionType_Contains_ItemCount|Contains_ItemCount|SelectionType_List_ItemCount|List_ItemCount|List_NestedLevel|ItemCountsuggestions_Text|OctetPosition_Value|ListItemSubItemNames|TileNotification|CheckState|LocationBar_Address|ItemIndex_Of_ItemCount|LocalizedControlType_AtPercent|LocalizedControlType_AtSelectionItem|Name_AtPercent|Name_AtSelectionItem|Minimum_And_Maximum_RangeValue|RangeValueIsReadOnly|LocalizedControlType_ContainsItemCount|LocalizedControlType_WithGridRowCount|Name_WithGridRowCount|GridColCountColumns_Text|WindowText|FullDescription|DescribedBy|FormulaValue|CanBePressed_Text|PositionInSet_SizeOfSet|Level|Item_PositioninSet_OfLevel|Landmark|ItemPositionInSet_Text|AtLevel|Tab_Text|Spans_GridItemRowSpan|Spans_GridItemColSpan|TableRowHeader|TableColumnHeader|GridItemRow_OfCount|GridItemCol_OfCount|TableItem_RowHeader_LevelDepth|TableItem_ColHeader_LevelDepth|RowHeaderDiffSub|ColHeaderDiffSub|RowLocationDiffSub|ColLocationDiffSub|RowSpanSub|ColSpanSub|Has_GridRowCount_And_GridColCount|Editable_Braille|ReadOnly_Braille|Hk_Braille|Landmark_Braille|LandmarkType|Contains_GridColCount_Columns_TableRowNames_NoPause|TableItemCellType|HeadingLevel|RemoveSpace|PrimaryDescription|TableMergedCellText|TableGridItemSpan|HotKeyFieldKey|HotKeyFieldValue|ContentSelected_Text|CellsCountSelected_Text|TotalCellsCountSelected_Text|ContentUnselected_Text|TotalCellsUnselected_Text|CellStart_Text|CellEnd_Text|From_Text|To_Text|CellUnselected_Text))*)?"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- Element Type Validation-->
  <xs:simpleType name="elementTypeEnum">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Element"/>
      <xs:enumeration value="ElementBase"/>
      <xs:enumeration value="ElementSuffix"/>
      <xs:enumeration value="ElementShortcutSuffix"/>
      <xs:enumeration value="TextPatternElement"/>
      <xs:enumeration value="TextPatternElement_RangeOnly"/>
      <xs:enumeration value="TextPatternElement_Document"/>
      <xs:enumeration value="TextPatternElement_ReadOnly"/>
      <xs:enumeration value="TextPatternElement_EditableNotFocused"/>
      <xs:enumeration value="Button"/>
      <xs:enumeration value="Calendar"/>
      <xs:enumeration value="ExpandCollapsePattern"/>
      <xs:enumeration value="GridPattern"/>
      <xs:enumeration value="Checkbox"/>
      <xs:enumeration value="Checkbox_StateChanged"/>
      <xs:enumeration value="SelectionPattern"/>
      <xs:enumeration value="DockPattern"/>
      <xs:enumeration value="GridItemPattern"/>
      <xs:enumeration value="RangeValuePattern"/>
      <xs:enumeration value="ScrollPattern"/>
      <xs:enumeration value="ScrollPattern_UniDirection"/>
      <xs:enumeration value="ScrollPattern_ScrollCommand"/>
      <xs:enumeration value="TableItemPattern"/>
      <xs:enumeration value="TransformationPattern"/>
      <xs:enumeration value="ValuePattern"/>
      <xs:enumeration value="WindowPattern"/>
      <xs:enumeration value="Combobox"/>
      <xs:enumeration value="ComboboxEdit"/>
      <xs:enumeration value="DataGrid"/>
      <xs:enumeration value="DataGridColumns"/>
      <xs:enumeration value="DataGridRows"/>
      <xs:enumeration value="DataGridColumnsAndRows"/>
      <xs:enumeration value="TablePattern"/>
      <xs:enumeration value="TablePatternColumns"/>
      <xs:enumeration value="TablePatternRows"/>
      <xs:enumeration value="TablePatternColumnsAndRows"/>
      <xs:enumeration value="TableColumns"/>
      <xs:enumeration value="TableRows"/>
      <xs:enumeration value="TableColumnsAndRows"/>
      <xs:enumeration value="DataItem"/>
      <xs:enumeration value="DataItem_Grid"/>
      <xs:enumeration value="DataItem_SpreadsheetItem"/>
      <xs:enumeration value="Edit"/>
      <xs:enumeration value="Edit_ReadOnly"/>
      <xs:enumeration value="Group"/>
      <xs:enumeration value="Header"/>
      <xs:enumeration value="HeaderItem"/>
      <xs:enumeration value="Hyperlink"/>
      <xs:enumeration value="Image"/>
      <xs:enumeration value="IPAddress"/>
      <xs:enumeration value="IPOctet"/>
      <xs:enumeration value="List"/>
      <xs:enumeration value="List_NoSelection"/>
      <xs:enumeration value="List_ScanHotKey"/>
      <xs:enumeration value="List_NoSelection_ScanHotKey"/>
      <xs:enumeration value="List_SuggestionState"/>
      <xs:enumeration value="ListItem"/>
      <xs:enumeration value="ListItem_WithSubItems"/>
      <xs:enumeration value="ListItem_MogoTile"/>
      <xs:enumeration value="Menu"/>
      <xs:enumeration value="Menu_NoExpandCollapse"/>
      <xs:enumeration value="MenuBar"/>
      <xs:enumeration value="MenuItem"/>
      <xs:enumeration value="Pane"/>
      <xs:enumeration value="Password"/>
      <xs:enumeration value="ProgressBar_Breadcrumb"/>
      <xs:enumeration value="ProgressBar"/>
      <xs:enumeration value="RadioButton"/>
      <xs:enumeration value="RadioButton_InBigList"/>
      <xs:enumeration value="ScrollBar"/>
      <xs:enumeration value="Separator"/>
      <xs:enumeration value="SemanicZoom"/>
      <xs:enumeration value="SimpleEdit"/>
      <xs:enumeration value="SimpleEdit_ReadOnly_NoValue"/>
      <xs:enumeration value="SimpleEdit_Edit_ReadOnly"/>
      <xs:enumeration value="Slider_Selection"/>
      <xs:enumeration value="Slider"/>
      <xs:enumeration value="Spinner"/>
      <xs:enumeration value="Spinner_RangeValue"/>
      <xs:enumeration value="Splitbutton"/>
      <xs:enumeration value="StatusBar"/>
      <xs:enumeration value="SuperGrid"/>
      <xs:enumeration value="Tab"/>
      <xs:enumeration value="TabItem"/>
      <xs:enumeration value="Table"/>
      <xs:enumeration value="Thumb"/>
      <xs:enumeration value="TitleBar"/>
      <xs:enumeration value="ToolBar"/>
      <xs:enumeration value="ToolTip"/>
      <xs:enumeration value="TopLevelPane"/>
      <xs:enumeration value="TreeView"/>
      <xs:enumeration value="TreeViewItem"/>
      <xs:enumeration value="Window"/>
      <xs:enumeration value="ElementText"/>
      <xs:enumeration value="WindowChange"/>
      <xs:enumeration value="AdvancedInformation"/>
      <xs:enumeration value="Invoke"/>
      <xs:enumeration value="TaskSwitcher"/>
      <xs:enumeration value="DragPattern"/>
      <xs:enumeration value="CustomControl"/>
      <xs:enumeration value="PrimaryHint"/>
      <xs:enumeration value="SecondaryHint"/>
      <xs:enumeration value="TooltipHint_Dismiss"/>
      <xs:enumeration value="EditDocument_NotFocused_Hint"/>
      <xs:enumeration value="ImeCandidate"/>
      <xs:enumeration value="SoftKeyboardKey"/>
      <xs:enumeration value="ListItem_MogoTile_Selected"/>
      <xs:enumeration value="StructuralNav_Full"/>
      <xs:enumeration value="StructuralNav_PosSize"/>
      <xs:enumeration value="StructuralNav_PosLevel"/>
      <xs:enumeration value="StructuralNav_Level"/>
      <xs:enumeration value="StructuralNav_Pos"/>
      <xs:enumeration value="Landmark_Suffix"/>
      <xs:enumeration value="HeadingSuffix"/>
      <xs:enumeration value="StructuralNavSuffix"/>
      <xs:enumeration value="HasPopupSuffix"/>
      <xs:enumeration value="ListItemFocusMonitored"/>
      <xs:enumeration value="FormProperties"/>
      <xs:enumeration value="TableEntry"/>
      <xs:enumeration value="TableExit"/>
      <xs:enumeration value="TableRowHeaderDiff"/>
      <xs:enumeration value="TableRowColDiff"/>
      <xs:enumeration value="TableRowLocationDiff"/>
      <xs:enumeration value="TableColLocationDiff"/>
      <xs:enumeration value="TableRowHeaderLevel"/>
      <xs:enumeration value="TableColHeaderLevel"/>
      <xs:enumeration value="TableHeaderText"/>
      <xs:enumeration value="TableCellCoordinate"/>
      <xs:enumeration value="TableHeaders"/>
      <xs:enumeration value="TableCellType"/>
      <xs:enumeration value="TableMergedCell"/>
      <xs:enumeration value="AriaCurrentSuffix"/>
      <xs:enumeration value="AriaCurrentPageSuffix"/>
      <xs:enumeration value="AriaCurrentStepSuffix"/>
      <xs:enumeration value="AriaCurrentLocationSuffix"/>
      <xs:enumeration value="AriaCurrentDateSuffix"/>
      <xs:enumeration value="AriaCurrentTimeSuffix"/>
      <xs:enumeration value="TableSelectSingleCellNew"/>
      <xs:enumeration value="TableSelectSingleCellExisting"/>
      <xs:enumeration value="TableSelectMultiCell"/>
      <xs:enumeration value="TableUnselectSingleCell"/>
      <xs:enumeration value="TableUnselectMultiCell"/>
    </xs:restriction>
  </xs:simpleType>

</xs:schema>
