{
  metadata: {
    namespace: "HTML",
    namespacePrefix: "xhtml",
    namespaceURI: "http://www.w3.org/1999/xhtml",
    attrsNullNamespace: true,
    export: "CORE_EXPORT",
  },
  attributes: [
    {
      name: "aria-actions",
      type: "IDREF_list",
      isGlobal: true,
      preventedOnRoles: [
        "caption",
        "code",
        "definition",
        "deletion",
        "emphasis",
        "generic",
        "insertion",
        "mark",
        "paragraph",
        "strong",
        "subscript",
        "suggestion",
        "superscript",
        "term",
        "time"
      ]
    },
    {
      name: "aria-activedescendant",
      type: "IDREF",
      supportedOnRoles: [
        "application",
        "combobox",
        "composite",
        "grid",
        "group",
        "listbox",
        "menu",
        "menubar",
        "radiogroup",
        "row",
        "searchbox",
        "select",
        "spinbutton",
        "tablist",
        "textbox",
        "toolbar",
        "tree",
        "treegrid"
      ]
    },
    {name: "aria-atomic", default: "false", type: "boolean", isGlobal: true},
    {
      name: "aria-autocomplete",
      default: "none",
      enum: ["inline", "list", "both", "none"],
      type: "token",
      supportedOnRoles: [
        "combobox",
        "searchbox",
        "textbox"
      ]
    },
    {
      name: "aria-braillelabel",
      type: "string",
      isGlobal: true,
      preventedOnRoles: [
        "caption",
        "code",
        "definition",
        "deletion",
        "emphasis",
        "generic",
        "insertion",
        "mark",
        "none",
        "paragraph",
        "strong",
        "subscript",
        "suggestion",
        "superscript",
        "term",
        "time"
      ]
    },
    {
      name: "aria-brailleroledescription",
      type: "string",
      isGlobal: true,
      preventedOnRoles: [
        "generic"
      ]
    },
    {name: "aria-busy", default: "false", type: "boolean", isGlobal: true},
    {
      name: "aria-checked",
      default: "undefined",
      enum: ["true", "false", "mixed", "undefined"],
      type: "token",
      supportedOnRoles: [
        "checkbox",
        "menuitemcheckbox",
        "menuitemradio",
        "option",
        "radio",
        "switch",
        "treeitem"
      ]
    },
    {
      name: "aria-colcount",
      type: "integer",
      supportedOnRoles: [
        "grid",
        "table",
        "treegrid"
      ]
    },
    {
      name: "aria-colindex",
      type: "integer",
      supportedOnRoles: [
        "cell",
        "columnheader",
        "gridcell",
        "row",
        "rowheader"
      ]
    },
    {
      name: "aria-colindextext",
      type: "string",
      supportedOnRoles: [
        "cell",
        "columnheader",
        "gridcell",
        "rowheader"
      ]
    },
    {
      name: "aria-colspan",
      type: "integer",
      supportedOnRoles: [
        "cell",
        "columnheader",
        "rowheader"
      ]
    },
    {name: "aria-controls", type: "IDREF_list", isGlobal: true},
    {
      name: "aria-current",
      default: "false",
      enum: ["page", "step", "location", "date", "time", "true", "false"],
      type: "token",
      isGlobal: true
    },
    {name: "aria-describedby", type: "IDREF_list", isGlobal: true},
    {name: "aria-description", type: "string", isGlobal: true},
    {name: "aria-details", type: "IDREF", isGlobal: true},
    {
      name: "aria-disabled",
      default: "false",
      type: "boolean",
      supportedOnRoles: [
        "application",
        "button",
        "checkbox",
        "columnheader",
        "combobox",
        "composite",
        "grid",
        "gridcell",
        "group",
        "input",
        "link",
        "listbox",
        "menu",
        "menubar",
        "menuitem",
        "menuitemcheckbox",
        "menuitemradio",
        "option",
        "radio",
        "radiogroup",
        "row",
        "rowheader",
        "scrollbar",
        "searchbox",
        "select",
        "separator",
        "slider",
        "spinbutton",
        "switch",
        "tab",
        "tablist",
        "textbox",
        "toolbar",
        "tree",
        "treegrid",
        "treeitem"
      ]
    },
    {
      name: "aria-errormessage",
      type: "IDREF",
      supportedOnRoles: [
        "application",
        "checkbox",
        "columnheader",
        "combobox",
        "gridcell",
        "listbox",
        "radiogroup",
        "rowheader",
        "searchbox",
        "slider",
        "spinbutton",
        "switch",
        "textbox",
        "tree",
        "treegrid"
      ]
    },
    {
      name: "aria-expanded",
      default: "undefined",
      enum: ["true", "false", "undefined"],
      type: "token",
      supportedOnRoles: [
        "application",
        "button",
        "checkbox",
        "columnheader",
        "combobox",
        "gridcell",
        "link",
        "menuitem",
        "menuitemcheckbox",
        "menuitemradio",
        "row",
        "rowheader",
        "switch",
        "tab",
        "treeitem"
      ]
    },
    {name: "aria-flowto", type: "IDREF_list", isGlobal: true},
    {
      name: "aria-haspopup",
      default: "false",
      enum: ["false", "true", "menu", "listbox", "tree", "grid", "dialog"],
      type: "token",
      supportedOnRoles: [
        "application",
        "button",
        "columnheader",
        "combobox",
        "gridcell",
        "link",
        "menuitem",
        "menuitemcheckbox",
        "menuitemradio",
        "rowheader",
        "searchbox",
        "slider",
        "tab",
        "textbox",
        "treeitem"
      ]
    },
    {
      name: "aria-hidden",
      default: "undefined",
      enum: ["true", "false", "undefined"],
      type: "token",
      isGlobal: true
    },
    {
      name: "aria-invalid",
      default: "false",
      enum: ["grammar", "false", "spelling", "true"],
      type: "token",
      supportedOnRoles: [
        "application",
        "checkbox",
        "columnheader",
        "combobox",
        "gridcell",
        "listbox",
        "radiogroup",
        "rowheader",
        "searchbox",
        "slider",
        "spinbutton",
        "switch",
        "textbox",
        "tree",
        "treegrid"
      ]
    },
    {name: "aria-keyshortcuts", type: "string", isGlobal: true},
    {
      name: "aria-label",
      type: "string",
      isGlobal: true,
      preventedOnRoles: [
        "caption",
        "code",
        "definition",
        "deletion",
        "emphasis",
        "generic",
        "insertion",
        "mark",
        "none",
        "paragraph",
        "strong",
        "subscript",
        "suggestion",
        "superscript",
        "term",
        "time"
      ]
    },
    {
      name: "aria-labelledby",
      type: "IDREF_list",
      isGlobal: true,
      preventedOnRoles: [
        "caption",
        "code",
        "definition",
        "deletion",
        "emphasis",
        "generic",
        "insertion",
        "mark",
        "none",
        "paragraph",
        "strong",
        "subscript",
        "suggestion",
        "superscript",
        "term",
        "time"
      ]
    },
    {
      name: "aria-labeledby",
      type: "IDREF_list",
      isGlobal: true,
      preventedOnRoles: [
        "caption",
        "code",
        "definition",
        "deletion",
        "emphasis",
        "generic",
        "insertion",
        "mark",
        "none",
        "paragraph",
        "strong",
        "subscript",
        "suggestion",
        "superscript",
        "term",
        "time"
      ]
    },  // alias for labelledby
    {
      name: "aria-level",
      type: "integer",
      supportedOnRoles: [
        "comment",
        "heading",
        "row",
        "treeitem"
      ]
    },
    {
      name: "aria-live",
      // Chromium diverges from ARIA spec: we use "undefined" as the default instead of "off"
      // to distinguish "not a live region" from "live region but inactive".
      // See: https://github.com/w3c/aria/issues/2653
      default: "undefined",
      enum: ["off", "polite", "assertive", "undefined"],
      type: "token",
      isGlobal: true
    },
    {
      name: "aria-modal",
      default: "false",
      type: "boolean",
      supportedOnRoles: [
        "alertdialog",
        "dialog"
      ]
    },
    {
      name: "aria-multiline",
      default: "false",
      type: "boolean",
      supportedOnRoles: [
        "searchbox",
        "textbox"
      ]
    },
    {
      name: "aria-multiselectable",
      default: "false",
      type: "boolean",
      supportedOnRoles: [
        "grid",
        "listbox",
        "tablist",
        "tree",
        "treegrid"
      ]
    },
    {
      name: "aria-orientation",
      default: "undefined",
      enum: ["horizontal", "undefined", "vertical"],
      type: "token",
      supportedOnRoles: [
        "listbox",
        "menu",
        "menubar",
        "radiogroup",
        "scrollbar",
        "select",
        "separator",
        "slider",
        "tablist",
        "toolbar",
        "tree",
        "treegrid"
      ]
    },
    {name: "aria-owns", type: "IDREF_list", isGlobal: true},
    {
      name: "aria-placeholder",
      type: "string",
      supportedOnRoles: [
        "searchbox",
        "textbox"
      ]
    },
    {
      name: "aria-posinset",
      type: "integer",
      supportedOnRoles: [
        "article",
        "comment",
        "listitem",
        "menuitem",
        "menuitemcheckbox",
        "menuitemradio",
        "option",
        "radio",
        "row",
        "tab",
        "treeitem"
      ]
    },
    {
      name: "aria-pressed",
      default: "undefined",
      enum: ["true", "false", "mixed", "undefined"],
      type: "token",
      supportedOnRoles: [
        "button"
      ]
    },
    {
      name: "aria-readonly",
      default: "false",
      type: "boolean",
      supportedOnRoles: [
        "checkbox",
        "columnheader",
        "combobox",
        "grid",
        "gridcell",
        "listbox",
        "radiogroup",
        "rowheader",
        "searchbox",
        "slider",
        "spinbutton",
        "switch",
        "textbox",
        "treegrid"
      ]
    },
    {
      name: "aria-relevant",
      default: "additions text",
      enum: ["additions", "removals", "text", "all"],
      type: "token_list",
      isGlobal: true
    },
    {
      name: "aria-required",
      default: "false",
      type: "boolean",
      supportedOnRoles: [
        "checkbox",
        "columnheader",
        "combobox",
        "gridcell",
        "listbox",
        "radiogroup",
        "rowheader",
        "searchbox",
        "spinbutton",
        "switch",
        "textbox",
        "tree",
        "treegrid"
      ]
    },
    {
      name: "aria-roledescription",
      type: "string",
      isGlobal: true,
      preventedOnRoles: [
        "generic"
      ]
    },
    {
      name: "aria-rowcount",
      type: "integer",
      supportedOnRoles: [
        "grid",
        "table",
        "treegrid"
      ]
    },
    {
      name: "aria-rowindex",
      type: "integer",
      supportedOnRoles: [
        "cell",
        "columnheader",
        "gridcell",
        "row",
        "rowheader"
      ]
    },
    {
      name: "aria-rowindextext",
      type: "string",
      supportedOnRoles: [
        "cell",
        "columnheader",
        "gridcell",
        "row",
        "rowheader"
      ]
    },
    {
      name: "aria-rowspan",
      type: "integer",
      supportedOnRoles: [
        "cell",
        "columnheader",
        "rowheader"
      ]
    },
    {
      name: "aria-selected",
      default: "undefined",
      enum: ["true", "false", "undefined"],
      type: "token",
      supportedOnRoles: [
        "columnheader",
        "gridcell",
        "option",
        "row",
        "rowheader",
        "tab",
        "treeitem"
      ]
    },
    {
      name: "aria-setsize",
      type: "integer",
      supportedOnRoles: [
        "article",
        "comment",
        "listitem",
        "menuitem",
        "menuitemcheckbox",
        "menuitemradio",
        "option",
        "radio",
        "row",
        "tab",
        "treeitem"
      ]
    },
    {
      name: "aria-sort",
      default: "none",
      enum: ["ascending", "descending", "none", "other"],
      type: "token",
      supportedOnRoles: [
        "columnheader",
        "rowheader"
      ]
    },
    {
      name: "aria-valuemax",
      type: "decimal",
      supportedOnRoles: [
        "meter",
        "progressbar",
        "scrollbar",
        "separator",
        "slider",
        "spinbutton"
      ]
    },
    {
      name: "aria-valuemin",
      type: "decimal",
      supportedOnRoles: [
        "meter",
        "progressbar",
        "scrollbar",
        "separator",
        "slider",
        "spinbutton"
      ]
    },
    {
      name: "aria-valuenow",
      type: "decimal",
      supportedOnRoles: [
        "meter",
        "progressbar",
        "scrollbar",
        "separator",
        "slider",
        "spinbutton"
      ]
    },
    {
      name: "aria-valuetext",
      type: "string",
      supportedOnRoles: [
        "meter",
        "progressbar",
        "scrollbar",
        "separator",
        "slider",
        "spinbutton"
      ]
    },
  ],
  roles: [
    {
      name: "alert",
      nameFrom: ["author"],
      superclasses: ["section"],
      "implicitValues": {
        "aria-live": "assertive",
        "aria-atomic": "true"
      }
    },
    {
      name: "alertdialog",
      internalRoles: ["kAlertDialog"],
      nameFrom: ["author"],
      superclasses: ["alert", "dialog"],
      nameRequired: true
    },
    {
      name: "application",
      nameFrom: ["author"],
      superclasses: ["structure"],
      nameRequired: true
    },
    {
      name: "article",
      nameFrom: ["author"],
      superclasses: ["document"],
    },
    {
      name: "banner",
      internalRoles: ["kBanner", "kHeader"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "blockquote",
      nameFrom: ["author"],
      superclasses: ["section"]
    },
    {
      name: "button",
      internalRoles: ["kButton", "kToggleButton", "kPopUpButton"],
      nameFrom: ["contents", "author"],
      superclasses: ["command"],
      nameRequired: true,
      childrenPresentational: true
    },
    {
      name: "caption",
      nameFrom: ["prohibited"],
      superclasses: ["structure"]
    },
    {
      name: "cell",
      nameFrom: ["contents", "author"],
      scope: "row",
      superclasses: ["section"],
    },
    {
      name: "checkbox",
      internalRoles: ["kCheckBox"],
      nameFrom: ["contents", "author"],
      requiredAttributes: ["aria-checked"],
      superclasses: ["input"],
      nameRequired: true,
      implicitValues: {"aria-checked": false}
    },
    {
      name: "code",
      nameFrom: ["prohibited"],
      superclasses: ["structure"]
    },
    {
      name: "columnheader",
      internalRoles: ["kColumnHeader"],
      nameFrom: ["contents", "author"],
      scope: ["row"],
      superclasses: ["gridcell", "sectionhead", "widget"],
      nameRequired: true
    },
    {
      name: "combobox",
      internalRoles: ["kComboBoxGrouping", "kComboBoxMenuButton", "kComboBoxSelect", "kTextFieldWithComboBox"],
      // TODO(aboxhall): Follow up with Nektarios and Aaron regarding role
      // on textbox
      mustContain: ["textbox"],
      nameFrom: ["author"],
      requiredAttributes: ["aria-controls", "aria-expanded"],
      superclasses: ["select"],
      nameRequired: true,
      implicitValues: {
        "aria-expanded": "false",
        "aria-haspopup": "listbox"
      }
    },
    {
      name: "comment",
      nameFrom: ["author"],
      superclasses: ["structure"]
    },
    {
      name: "command",
      abstract: true,
      nameFrom: ["author"],
      superclasses: ["widget"]
    },
    {name: "complementary", nameFrom: ["author"], superclasses: ["landmark"]},
    {
      name: "composite",
      abstract: true,
      nameFrom: ["author"],
      superclasses: ["widget"],
    },
    {
      name: "contentinfo",
      internalRoles: ["kContentInfo", "kFooter"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "definition",
      nameFrom: ["prohibited"],
      superclasses: ["section"]
    },
    {
      name: "deletion",
      internalRoles: ["kContentDeletion"],
      nameFrom: ["prohibited"],
      superclasses: ["structure"]
    },
    {
      name: "dialog",
      nameFrom: ["author"],
      superclasses: ["window"],
      nameRequired: true
    },
    {
      name: "directory",
      deprecated: true,
      internalRoles: ["kList"],
      nameFrom: ["author"],
      superclasses: ["list"]
    },
    {
      name: "document",
      nameFrom: ["author"],
      superclasses: ["structure"],
      nameRequired: false
    },
    {
      name: "emphasis",
      nameFrom: ["prohibited"],
      superclasses: ["structure"]
    },
    {
      name: "feed",
      nameFrom: ["author"],
      superclasses: ["list"],
      mustContain: ["article"],
      nameRequired: false
    },
    {
      name: "figure",
      nameFrom: ["author"],
      superclasses: ["section"],
      nameRequired: false
    },
    {name: "form", nameFrom: ["author"], superclasses: ["landmark"], nameRequired: true},
    {
      name: "generic",
      internalRoles: ["kGenericContainer", "kSectionWithoutName"],
      nameFrom: ["prohibited"],
      superclasses: ["structure"]
    },
    {
      name: "grid",
      nameFrom: ["author"],
      superclasses: ["composite", "table"],
      // TODO(aboxhall): Figure out how to express "rowgroup --> row" here.
      mustContain: ["row"],
      nameRequired: true
    },
    {
      name: "gridcell",
      internalRoles: ["kGridCell"],
      nameFrom: ["contents", "author"],
      scope: ["row"],
      superclasses: ["cell", "widget"],
      nameRequired: true
    },
    {
      name: "group",
      internalRoles: ["kGroup", "kDetails"],
      nameFrom: ["author"],
      superclasses: ["section"],
    },
    {
      name: "heading",
      nameFrom: ["contents", "author"],
      superclasses: ["sectionhead"],
      nameRequired: true,
      implicitValues: {"aria-level": "2"}
    },
    {
      name: "image",
      internalRoles: ["kImage"],
      nameFrom: ["author"],
      superclasses: ["structure"]
    },
    {
      name: "img",
      deprecated: true,
      internalRoles: ["kImage"],
      nameFrom: ["author"],
      superclasses: ["section"],
      nameRequired: true,
      childrenPresentational: true
    },
    {
      name: "insertion",
      internalRoles: ["kContentInsertion"],
      nameFrom: ["prohibited"],
      superclasses: ["structure"]
    },
    {
      name: "input",
      abstract: true,
      nameFrom: ["author"],
      superclasses: ["widget"]
    },
    {
      name: "landmark",
      abstract: true,
      nameFrom: ["author"],
      superclasses: ["section"],
      nameRequired: false
    },
    {
      name: "link",
      nameFrom: ["contents", "author"],
      superclasses: ["command"],
      nameRequired: true
    },
    {
      name: "list",
      internalRoles: ["kList"],
      // TODO(aboxhall): Figure out how to express "group --> listitem"
      mustContain: ["listitem"],
      nameFrom: ["author"],
      superclasses: ["section"],
      implicitValues: {"aria-orientation": "vertical"}
    },
    {
      name: "listbox",
      internalRoles: ["kListBox"],
      nameFrom: ["author"],
      superclasses: ["select"],
      mustContain: ["option"],
      nameRequired: true,
      implicitValues: {"aria-orientation": "vertical"}
    },
    {
      name: "listitem",
      internalRoles: ["kListItem"],
      nameFrom: ["author"],
      superclasses: ["section"],
      scope: ["group", "list"],
    },
    {
      name: "log",
      nameFrom: ["author"],
      superclasses: ["section"],
      nameRequired: true,
      implicitValues: {"aria-live": "polite"}
    },
    {
      name: "main",
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "mark",
      nameFrom: ["prohibited"],
      superclasses: ["structure"]
    },
    {
      name: "marquee",
      nameFrom: ["author"],
      superclasses: ["section"],
      nameRequired: true
    },
    {
      name: "math",
      nameFrom: ["author"],
      superclasses: ["section"],
      nameRequired: true,
      // TODO(aboxhall/aleventhal): this is what the spec says, but seems
      // wrong.
      childrenPresentational: true
    },
    {
      name: "menu",
      mustContain: [
        "group", "menuitemradio", "menuitem", "menuitemcheckbox",
        "menuitemradio"
      ],
      nameFrom: ["author"],
      superclasses: ["select"],
      implicitValues: {"aria-orientation": "vertical"}
    },
    {
      name: "menubar",
      internalRoles: ["kMenuBar"],
      nameFrom: ["author"],
      superclasses: ["menu"],
      // TODO(aboxhall): figure out how to express "group --> {menuitem,
      // menuitemradio, menuitemcheckbox}"
      mustContain: ["menuitem", "menuitemradio", "menuitemcheckbox"],
      implicitValues: {"aria-orientation": "horizontal"}
    },
    {
      name: "menuitem",
      internalRoles: ["kMenuItem"],
      nameFrom: ["contents", "author"],
      scope: ["group", "menu", "menubar"],
      superclasses: ["command"],
      nameRequired: true
    },
    {
      name: "menuitemcheckbox",
      internalRoles: ["kMenuItemCheckBox"],
      nameFrom: ["contents", "author"],
      scope: ["menu", "menubar"],
      superclasses: ["checkbox", "menuitem"],
      nameRequired: true,
      childrenPresentational: true,
      implicitValues: {"aria-checked": false}
    },
    {
      name: "menuitemradio",
      internalRoles: ["kMenuItemRadio"],
      nameFrom: ["contents", "author"],
      scope: ["menu", "menubar", "group"],
      superclasses: ["menuitemcheckbox", "radio"],
      nameRequired: true,
      childrenPresentational: true,
      implicitValues: {"aria-checked": false}
    },
    {
      name: "meter",
      nameFrom: ["author"],
      superclasses: ["structure"],
      nameRequired: true,
      implicitValues: {"aria-valuemin": "0", "aria-valuemax": "100"}
    },
    {
      name: "navigation",
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "none",
      internalRoles: ["kNone"],
      nameFrom: ["prohibited"],
      superclasses: ["structure"]
    },
    {
      name: "note",
      nameFrom: ["author"],
      superclasses: ["section"]
    },
    {
      name: "option",
      internalRoles: ["kListBoxOption", "kMenuListOption"],
      nameFrom: ["contents", "author"],
      scope: ["listbox"],
      superclasses: ["input"],
      requiredAttributes: ["aria-selected"],
      nameRequired: true,
      childrenPresentational: true,
      implicitValues: {"aria-selected": "false"}
    },
    {
      name: "paragraph",
      nameFrom: ["prohibited"],
      superclasses: ["structure"]
    },
    {
      name: "presentation",
      deprecated: true,
      internalRoles: ["kNone"],
      superclasses: ["structure"]
    },
    {
      name: "progressbar",
      internalRoles: ["kProgressIndicator"],
      nameFrom: ["author"],
      superclasses: ["range"],
      nameRequired: true,
      childrenPresentational: true,
      implicitValues: {"aria-valuemin": "0", "aria-valuemax": "100"}
    },
    {
      name: "radio",
      internalRoles: ["kRadioButton"],
      nameFrom: ["contents", "author"],
      superclasses: ["input"],
      requiredAttributes: ["aria-checked"],
      nameRequired: true,
      childrenPresentational: true,
      implicitValues: {"aria-checked": "false"}
    },
    {
      name: "radiogroup",
      internalRoles: ["kRadioGroup"],
      nameFrom: ["author"],
      superclasses: ["select"],
      mustContain: ["radio"],
      nameRequired: true
    },
    {
      name: "range",
      abstract: true,
      nameFrom: ["author"],
      superclasses: ["widget"],
    },
    {
      name: "region",
      nameFrom: ["author"],
      superclasses: ["landmark"],
      nameRequired: true
    },
    {
      name: "roletype",
      abstract: true,
    },
    {
      name: "row",
      nameFrom: ["contents", "author"],
      superclasses: ["group", "widget"],
      mustContain: ["cell", "columnheader", "gridcell", "rowheader"],
      scope: ["grid", "rowgroup", "table", "treegrid"],
    },
    {
      name: "rowgroup",
      internalRoles: ["kRowGroup"],
      nameFrom: ["author"],
      superclasses: ["structure"],
      mustContain: ["row"],
      scope: ["grid", "table", "treegrid"],
    },
    {
      name: "rowheader",
      internalRoles: ["kRowHeader"],
      nameFrom: ["contents", "author"],
      scope: ["row"],
      superclasses: ["cell", "gridcell", "sectionhead"],
      nameRequired: true
    },
    {
      name: "scrollbar",
      internalRoles: ["kScrollBar"],
      nameFrom: ["author"],
      requiredAttributes: [
        "aria-controls", "aria-orientation", "aria-valuemax",
        "aria-valuemin", "aria-valuenow"
      ],
      superclasses: ["range"],
      nameRequired: false,
      childrenPresentational: true,
      implicitValues: {
        "aria-orientation": "vertical",
        "aria-valuemin": "0", "aria-valuemax": "100"
      }
    },
    {
      name: "search",
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "searchbox",
      internalRoles: ["kSearchBox"],
      nameFrom: ["author"],
      superclasses: ["textbox"],
      nameRequired: true
    },
    {
      name: "section",
      abstract: true,
      superclasses: ["structure"],
    },
    {
      name: "sectionhead",
      abstract: true,
      nameFrom: ["contents", "author"],
      superclasses: ["structure"],
    },
    {
      name: "select",
      abstract: true,
      nameFrom: ["author"],
      superclasses: ["composite", "group"]
    },
    {
      name: "separator",
      internalRoles: ["kSplitter"],
      nameFrom: ["author"],
      superclasses: ["structure"],
      implicitValues: {
        "aria-orientation": "horizontal",
        "aria-valuemin": "0",
        "aria-valuemax": "100"
      }
    },
    {
      name: "slider",
      nameFrom: ["author"],
      requiredAttributes:
          ["aria-valuemax", "aria-valuemin", "aria-valuenow"],
      superclasses: ["input", "range"],
      nameRequired: true,
      childrenPresentational: true,
      // TODO(aboxhall): aria-valuenow default is halfway between
      // aria-valuemin and aria-valuemax
      implicitValues: {
         "aria-orientation": "horizontal",
         "aria-valuemin": "0", "aria-valuemax": "100"
      }
    },
    {
      name: "spinbutton",
      internalRoles: ["kSpinButton"],
      nameFrom: ["author"],
      requiredAttributes:
          ["aria-valuemax", "aria-valuemin", "aria-valuenow"],
      superclasses: ["composite", "input", "range"],
      nameRequired: true
    },
    {
      name: "status",
      nameFrom: ["author"],
      superclasses: ["section"],
      implicitValues: {"aria-live": "polite", "aria-atomic": "true" }
    },
    {
      name: "strong",
      nameFrom: ["prohibited"],
      superclasses: ["structure"]
    },
    {
      name: "structure",
      abstract: true,
      superclasses: ["roletype"]
    },
    {
      name: "subscript",
      nameFrom: ["prohibited"],
      superclasses: ["structure"]
    },
    {
      name: "suggestion",
      nameFrom: ["prohibited"],
      superclasses: ["structure"]
    },
    {
      name: "superscript",
      nameFrom: ["prohibited"],
      superclasses: ["structure"]
    },
    {
      name: "switch", nameFrom: ["contents", "author"],
      superclasses: ["checkbox"], requiredAttributes: ["aria-checked"],
      nameRequired: true, childrenPresentational: true,
      implicitValues: {"aria-checked": "false"}
    },
    {
      name: "tab",
      nameFrom: ["contents", "author"],
      scope: ["tablist"],
      superclasses: ["sectionhead", "widget"],
      childrenPresentational: true,
      implicitValues: {"aria-selected": "false"}
    },
    {
      name: "table",
      nameFrom: ["author"],
      superclasses: ["section"],
      // TODO(aboxhall): Figure out how to express "rowgroup --> row"
      mustContain: ["row"],
      nameRequired: true
    },
    {
      name: "tablist",
      internalRoles: ["kTabList"],
      nameFrom: ["author"],
      superclasses: ["composite"],
      mustContain: ["tab"],
      implicitValues: {"aria-orientation": "horizontal"}
    },
    {
      name: "tabpanel",
      internalRoles: ["kTabPanel"],
      nameFrom: ["author"],
      superclasses: ["section"],
      nameRequired: true
    },
    {
      name: "term",
      nameFrom: ["prohibited"],
      superclasses: ["section"]
    },
    {
      name: "time",
      nameFrom: ["prohibited"],
      superclasses: ["structure"]
    },
    {
      name: "textbox",
      internalRoles: ["kTextField"],
      nameFrom: ["author"],
      superclasses: ["input"],
      nameRequired: true
    },
    {
      name: "timer",
      nameFrom: ["author"],
      superclasses: ["status"]
    },
    {
      name: "toolbar",
      nameFrom: ["author"],
      superclasses: ["group"],
      implicitValues: {"aria-orientation": "horizontal"
      }
    },
    {
      name: "tooltip",
      nameFrom: ["contents", "author"],
      superclasses: ["section"],
      nameRequired: true
    },
    {
      name: "tree",
      nameFrom: ["author"],
      mustContain: ["group", "treeitem"],
      superclasses: ["select"],
      nameRequired: true,
      implicitValues: {"aria-orientation": "vertical"
      }
    },
    {
      name: "treegrid",
      internalRoles: ["kTreeGrid"],
      // TODO(aboxhall): Figure out how to express "rowgroup --> row"
      mustContain: ["row"],
      nameFrom: ["author"],
      superclasses: ["grid", "tree"],
      nameRequired: true
    },
    {
      name: "treeitem",
      internalRoles: ["kTreeItem"],
      nameFrom: ["contents", "author"],
      scope: ["group", "tree"],
      superclasses: ["listitem", "option"],
      nameRequired: true
    },
    {
      name: "widget",
      abstract: true,
      superclasses: ["roletype"]
    },
    {
      name: "window",
      abstract: true,
      nameFrom: ["author"],
      superclasses: ["roletype"],
    },
    // In the Core-AAM for HTML
    {
      name: "sectionfooter",
      internalRoles: ["kSectionFooter"],
      nameFrom: ["author"],
      superclasses: ["contentinfo"]
    },
    {
      name: "sectionheader",
      internalRoles: ["kSectionHeader"],
      nameFrom: ["author"],
      superclasses: ["banner"]
    },

    // DPub-ARIA Module roles
    {
      name: "doc-abstract",
      internalRoles: ["kDocAbstract"],
      nameFrom: ["author"],
      superclasses: ["section"]
    },
    {
      name: "doc-acknowledgments",
      internalRoles: ["kDocAcknowledgments"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "doc-afterword",
      internalRoles: ["kDocAfterword"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "doc-appendix",
      internalRoles: ["kDocAppendix"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "doc-backlink",
      internalRoles: ["kDocBackLink"],
      nameFrom: ["contents", "author"],
      superclasses: ["link"]
    },
    {
      name: "doc-biblioentry",
      internalRoles: ["kDocBiblioEntry"],
      nameFrom: ["author"],
      superclasses: ["listitem"]
    },
    {
      name: "doc-bibliography",
      internalRoles: ["kDocBibliography"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "doc-biblioref",
      internalRoles: ["kDocBiblioRef"],
      nameFrom: ["contents", "author"],
      superclasses: ["link"]
    },
    {
      name: "doc-chapter",
      internalRoles: ["kDocChapter"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "doc-colophon",
      internalRoles: ["kDocColophon"],
      nameFrom: ["author"],
      superclasses: ["section"]
    },
    {
      name: "doc-conclusion",
      internalRoles: ["kDocConclusion"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "doc-cover",
      internalRoles: ["kDocCover"],
      nameFrom: ["author"],
      superclasses: ["img"]
    },
    {
      name: "doc-credit",
      internalRoles: ["kDocCredit"],
      nameFrom: ["author"],
      superclasses: ["section"]
    },
    {
      name: "doc-credits",
      internalRoles: ["kDocCredits"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "doc-dedication",
      internalRoles: ["kDocDedication"],
      nameFrom: ["author"],
      superclasses: ["section"]
    },
    {
      name: "doc-endnote",
      internalRoles: ["kDocEndnote"],
      nameFrom: ["author"],
      superclasses: ["listitem"]
    },
    {
      name: "doc-endnotes",
      internalRoles: ["kDocEndnotes"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "doc-epigraph",
      internalRoles: ["kDocEpigraph"],
      nameFrom: ["author"],
      superclasses: ["section"]
    },
    {
      name: "doc-epilogue",
      internalRoles: ["kDocEpilogue"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "doc-errata",
      internalRoles: ["kDocErrata"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "doc-example",
      internalRoles: ["kDocExample"],
      nameFrom: ["author"],
      superclasses: ["section"]
    },
    {
      name: "doc-footnote",
      internalRoles: ["kDocFootnote"],
      nameFrom: ["author"],
      superclasses: ["section"]
    },
    {
      name: "doc-foreword",
      internalRoles: ["kDocForeword"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "doc-glossary",
      internalRoles: ["kDocGlossary"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "doc-glossref",
      internalRoles: ["kDocGlossRef"],
      nameFrom: ["contents", "author"],
      superclasses: ["link"]
    },
    {
      name: "doc-index",
      internalRoles: ["kDocIndex"],
      nameFrom: ["author"],
      superclasses: ["navigation"]
    },
    {
      name: "doc-introduction",
      internalRoles: ["kDocIntroduction"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "doc-noteref",
      internalRoles: ["kDocNoteRef"],
      nameFrom: ["contents", "author"],
      superclasses: ["link"]
    },
    {
      name: "doc-notice",
      internalRoles: ["kDocNotice"],
      nameFrom: ["author"],
      superclasses: ["note"]
    },
    {
      name: "doc-pagebreak",
      internalRoles: ["kDocPageBreak"],
      nameFrom: ["author"],
      superclasses: ["separator"]
    },
    {
      name: "doc-pagefooter",
      internalRoles: ["kDocPageFooter"],
      nameFrom: ["author"],
      superclasses: ["contentinfo"]
    },
    {
      name: "doc-pageheader",
      internalRoles: ["kDocPageHeader"],
      nameFrom: ["author"],
      superclasses: ["banner"]
    },
    {
      name: "doc-pagelist",
      internalRoles: ["kDocPageList"],
      nameFrom: ["author"],
      superclasses: ["navigation"]
    },
    {
      name: "doc-part",
      internalRoles: ["kDocPart"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "doc-preface",
      internalRoles: ["kDocPreface"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "doc-prologue",
      internalRoles: ["kDocPrologue"],
      nameFrom: ["author"],
      superclasses: ["landmark"]
    },
    {
      name: "doc-pullquote",
      internalRoles: ["kDocPullquote"],
      nameFrom: ["author"],
      superclasses: ["section"]
    },
    {
      name: "doc-qna",
      internalRoles: ["kDocQna"],
      nameFrom: ["author"],
      superclasses: ["section"]
    },
    {
      name: "doc-subtitle",
      internalRoles: ["kDocSubtitle"],
      nameFrom: ["contents", "author"],
      superclasses: ["sectionhead"]
    },
    {
      name: "doc-tip",
      internalRoles: ["kDocTip"],
      nameFrom: ["author"],
      superclasses: ["note"]
    },
    {
      name: "doc-toc",
      internalRoles: ["kDocToc"],
      nameFrom: ["author"],
      superclasses: ["navigation"]
    },

    // Graphics-ARIA Module roles
    {
      name: "graphics-document",
      internalRoles: ["kGraphicsDocument"],
      nameFrom: ["author"],
      superclasses: ["document"]
    },
    {
      name: "graphics-object",
      internalRoles: ["kGraphicsObject"],
      nameFrom: ["contents", "author"],
      superclasses: ["group"]
    },
    {
      name: "graphics-symbol",
      internalRoles: ["kGraphicsSymbol"],
      nameFrom: ["author"],
      superclasses: ["img"]
    }
  ]
}
