Repository: hed-standard/hed-python (language: python)

Issue:
Rewrite schema internals to be simpler.  Not complete
Test pull just for code climate


Discussion / hints:

Fix patch:
diff --git a/hedtools/hed/errors/error_messages.py b/hedtools/hed/errors/error_messages.py
index 19fe4403b..93a8eceee 100644
--- a/hedtools/hed/errors/error_messages.py
+++ b/hedtools/hed/errors/error_messages.py
@@ -135,12 +135,12 @@ def val_error_def_unmatched(tag):
     return f"A data-recording’s Def tag cannot be matched to definition.  Tag: '{tag}'", {}
 
 
-@hed_tag_error(ValidationErrors.HED_DEF_VALUE_MISSING, actual_code=ValidationErrors.HED_DEF_INVALID)
+@hed_tag_error(ValidationErrors.HED_DEF_VALUE_MISSING, actual_code=ValidationErrors.HED_DEF_VALUE_INVALID)
 def val_error_def_value_missing(tag):
     return f"A def tag requires a placeholder value, but was not given one.  Definition: '{tag}'", {}
 
 
-@hed_tag_error(ValidationErrors.HED_DEF_VALUE_EXTRA, actual_code=ValidationErrors.HED_DEF_INVALID)
+@hed_tag_error(ValidationErrors.HED_DEF_VALUE_EXTRA, actual_code=ValidationErrors.HED_DEF_VALUE_INVALID)
 def val_error_def_value_extra(tag):
     return f"A def tag does not take a placeholder value, but was given one.  Definition: '{tag}", {}
 
diff --git a/hedtools/hed/errors/error_reporter.py b/hedtools/hed/errors/error_reporter.py
index 867bfffb8..9a115ada6 100644
--- a/hedtools/hed/errors/error_reporter.py
+++ b/hedtools/hed/errors/error_reporter.py
@@ -147,7 +147,7 @@ def wrapper(tag, *args, severity=default_severity, **kwargs):
                 -------
                 error_list: [{}]
                 """
-                from hed.models.hed_tag import HedTag
+                from hed.schema.hed_tag import HedTag
                 from hed.models.hed_group import HedGroup
                 if isinstance(tag, HedTag):
                     org_tag_text = tag.org_tag
@@ -170,7 +170,6 @@ def wrapper(tag, *args, severity=default_severity, **kwargs):
 # Import after hed_error decorators are defined.
 from hed.errors import error_messages
 
-
 class ErrorHandler:
     def __init__(self):
         # The current (ordered) dictionary of contexts.
diff --git a/hedtools/hed/errors/error_types.py b/hedtools/hed/errors/error_types.py
index 16901dac6..ec5910422 100644
--- a/hedtools/hed/errors/error_types.py
+++ b/hedtools/hed/errors/error_types.py
@@ -21,7 +21,7 @@ class ValidationErrors:
     HED_CHARACTER_INVALID = 'HED_CHARACTER_INVALID'
     HED_COMMA_MISSING = 'HED_COMMA_MISSING'
     HED_DEF_UNMATCHED = "HED_DEF_UNMATCHED"
-    HED_DEF_INVALID = "HED_DEF_INVALID"
+    HED_DEF_VALUE_INVALID = "HED_DEF_VALUE_INVALID"
     HED_DEFINITION_INVALID = "HED_DEFINITION_INVALID"
     # HED_GENERIC_ERROR
     # HED_GENERIC_WARNING
diff --git a/hedtools/hed/models/__init__.py b/hedtools/hed/models/__init__.py
index 42e00e1bc..4ba15c44d 100644
--- a/hedtools/hed/models/__init__.py
+++ b/hedtools/hed/models/__init__.py
@@ -7,4 +7,3 @@
 from hed.models.column_mapper import ColumnMapper
 from hed.models.hed_string import HedString
 from hed.models.hed_group import HedGroup
-from hed.models.hed_tag import HedTag
diff --git a/hedtools/hed/models/hed_group.py b/hedtools/hed/models/hed_group.py
index 6cb46918d..aa8201a2f 100644
--- a/hedtools/hed/models/hed_group.py
+++ b/hedtools/hed/models/hed_group.py
@@ -1,4 +1,4 @@
-from hed.models.hed_tag import HedTag
+from hed.schema.hed_tag import HedTag
 
 
 class HedGroup:
diff --git a/hedtools/hed/models/hed_string.py b/hedtools/hed/models/hed_string.py
index 1030c530c..afef3c31a 100644
--- a/hedtools/hed/models/hed_string.py
+++ b/hedtools/hed/models/hed_string.py
@@ -2,7 +2,7 @@
 This module is used to split tags in a HED string.
 """
 from hed.models.hed_group import HedGroup
-from hed.models.hed_tag import HedTag
+from hed.schema.hed_tag import HedTag
 
 
 class HedString(HedGroup):
@@ -261,7 +261,7 @@ def split_hed_string_return_tags(hed_string):
         hed_tags: [HedTag]
             The string split apart into hed tags with all delimiters removed
         """
-        from hed.models.hed_tag import HedTag
+        from hed.schema.hed_tag import HedTag
         result_positions = HedString.split_hed_string(hed_string)
         return [HedTag(hed_string, span) for (is_hed_tag, span) in
                 result_positions if is_hed_tag]
diff --git a/hedtools/hed/schema/__init__.py b/hedtools/hed/schema/__init__.py
index 6a9ba3de9..4b92d2ab5 100644
--- a/hedtools/hed/schema/__init__.py
+++ b/hedtools/hed/schema/__init__.py
@@ -1,6 +1,6 @@
 from hed.schema.hed_schema import HedSchema
 from hed.schema.hed_schema_file import load_schema, load_schema_version, from_string, get_hed_xml_version, \
     convert_schema_to_format
-from hed.schema.hed_schema_constants import HedKey
+from hed.schema.hed_schema_constants import HedKey, HedSectionKey
 from hed.schema.hed_cache import cache_all_hed_xml_versions, get_all_hed_versions, \
     get_path_from_hed_version, set_cache_directory
diff --git a/hedtools/hed/schema/fileio/__init__.py b/hedtools/hed/schema/fileio/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/hedtools/hed/schema/schema2wiki.py b/hedtools/hed/schema/fileio/schema2wiki.py
similarity index 78%
rename from hedtools/hed/schema/schema2wiki.py
rename to hedtools/hed/schema/fileio/schema2wiki.py
index d5e41660c..b52999ac6 100644
--- a/hedtools/hed/schema/schema2wiki.py
+++ b/hedtools/hed/schema/fileio/schema2wiki.py
@@ -1,8 +1,8 @@
 """Allows output of HedSchema objects as .mediawiki format"""
 import copy
 
-from hed.schema.hed_schema_constants import HedKey
-from hed.schema import wiki_constants
+from hed.schema.hed_schema_constants import HedSectionKey
+from hed.schema.fileio import wiki_constants
 
 
 class HedSchema2Wiki:
@@ -89,64 +89,48 @@ def _output_tags(self, hed_schema):
         self._add_blank_line()
 
     def _output_units(self, hed_schema):
-        if not hed_schema.has_unit_classes:
+        if not hed_schema.unit_classes:
             return
 
         self.current_tag_string += wiki_constants.UNIT_CLASS_STRING
         self._flush_current_tag()
-        for unit_name, unit_types in hed_schema.dictionaries[HedKey.UnitClasses].items():
-            self.current_tag_string += f"* {unit_name}"
-            self.current_tag_extra += self._format_props_and_desc(hed_schema, unit_name, HedKey.UnitClasses)
+        for unit_class, unit_entry in hed_schema[HedSectionKey.UnitClasses].items():
+            unit_types = unit_entry.value
+            self.current_tag_string += f"* {unit_class}"
+            self.current_tag_extra += self._format_props_and_desc(hed_schema, unit_class, HedSectionKey.UnitClasses)
             self._flush_current_tag()
 
             for unit_type in unit_types:
                 self.current_tag_string += f"** {unit_type}"
                 self.current_tag_extra += self._format_props_and_desc(
-                    hed_schema, unit_type, HedKey.Units)
+                    hed_schema, unit_type, HedSectionKey.Units)
                 self._flush_current_tag()
 
         self._add_blank_line()
 
-    def _output_unit_modifiers(self, hed_schema):
-        if not hed_schema.has_unit_modifiers:
-            return
-        self.current_tag_string += wiki_constants.UNIT_MODIFIER_STRING
-        self._flush_current_tag()
-        for modifier_name in hed_schema.dictionaries[HedKey.UnitModifiers]:
-            self.current_tag_string += f"* {modifier_name}"
-            self.current_tag_extra += self._format_props_and_desc(
-                hed_schema, modifier_name, HedKey.UnitModifiers)
-            self._flush_current_tag()
-
-    def _output_value_classes(self, hed_schema):
-        if not hed_schema.has_value_classes:
+    def _output_section(self, hed_schema, key_class):
+        if not hed_schema._sections[key_class]:
             return
         self._add_blank_line()
-        self.current_tag_string += wiki_constants.VALUE_CLASS_STRING
+        self.current_tag_string += wiki_constants.wiki_section_headers[key_class]
         self._flush_current_tag()
-        for value_name in hed_schema.dictionaries[HedKey.ValueClasses]:
+        for value_name in hed_schema[key_class]:
             self.current_tag_string += f"* {value_name}"
-            self.current_tag_extra += self._format_props_and_desc(
-                hed_schema, value_name, HedKey.ValueClasses)
+            self.current_tag_extra += self._format_props_and_desc(hed_schema, value_name, key_class)
             self._flush_current_tag()
 
+    def _output_unit_modifiers(self, hed_schema):
+        self._output_section(hed_schema, HedSectionKey.UnitModifiers)
+        return
+
+    def _output_value_classes(self, hed_schema):
+        self._output_section(hed_schema, HedSectionKey.ValueClasses)
+
     def _output_attributes(self, hed_schema):
-        self._add_blank_line()
-        self.current_tag_string += wiki_constants.ATTRIBUTE_DEFINITION_STRING
-        self._flush_current_tag()
-        for attribute_name in hed_schema.dictionaries[HedKey.Attributes]:
-            self.current_tag_string += f"* {attribute_name}"
-            self.current_tag_extra += self._format_props_and_desc(hed_schema, attribute_name, HedKey.Attributes)
-            self._flush_current_tag()
+        self._output_section(hed_schema, HedSectionKey.Attributes)
 
     def _output_properties(self, hed_schema):
-        self._add_blank_line()
-        self.current_tag_string += wiki_constants.ATTRIBUTE_PROPERTY_STRING
-        self._flush_current_tag()
-        for prop_name in hed_schema.dictionaries[HedKey.Properties]:
-            self.current_tag_string += f"* {prop_name}"
-            self.current_tag_extra += self._format_props_and_desc(hed_schema, prop_name, HedKey.Properties)
-            self._flush_current_tag()
+        self._output_section(hed_schema, HedSectionKey.Properties)
 
     def _flush_current_tag(self):
         if self.current_tag_string or self.current_tag_extra:
@@ -162,7 +146,7 @@ def _add_blank_line(self):
         self.output.append("")
 
     # Should this be a function?
-    def _format_props_and_desc(self, hed_schema, tag_name, key_class=HedKey.AllTags):
+    def _format_props_and_desc(self, hed_schema, tag_name, key_class=HedSectionKey.AllTags):
         prop_string = ""
         tag_props = hed_schema.get_all_tag_attributes(tag_name, key_class=key_class)
         if tag_props:
diff --git a/hedtools/hed/schema/schema2xml.py b/hedtools/hed/schema/fileio/schema2xml.py
similarity index 81%
rename from hedtools/hed/schema/schema2xml.py
rename to hedtools/hed/schema/fileio/schema2xml.py
index 531b71820..47334e354 100644
--- a/hedtools/hed/schema/schema2xml.py
+++ b/hedtools/hed/schema/fileio/schema2xml.py
@@ -1,8 +1,8 @@
 """Allows output of HedSchema objects as .xml format"""
 import copy
 from xml.etree.ElementTree import Element, SubElement
-from hed.schema.hed_schema_constants import HedKey
-from hed.schema import xml_constants
+from hed.schema.hed_schema_constants import HedSectionKey
+from hed.schema.fileio import xml_constants
 
 
 class HedSchema2XML:
@@ -68,12 +68,13 @@ def _output_tags(self, hed_schema):
                 tag_levels[level] = child_tag
 
     def _output_units(self, hed_schema):
-        if not hed_schema.has_unit_classes:
+        if not hed_schema.unit_classes:
             return
-        unit_section_node = SubElement(self.hed_node, xml_constants.get_section_name(HedKey.UnitClasses,
+        unit_section_node = SubElement(self.hed_node, xml_constants.get_section_name(HedSectionKey.UnitClasses,
                                                                                      self.save_as_legacy_format))
-        for unit_class, unit_types in hed_schema.dictionaries[HedKey.UnitClasses].items():
-            unit_class_node = self._add_node(hed_schema, unit_section_node, unit_class, HedKey.UnitClasses)
+        for unit_class, unit_entry in hed_schema[HedSectionKey.UnitClasses].items():
+            unit_types = unit_entry.value
+            unit_class_node = self._add_node(hed_schema, unit_section_node, unit_class, HedSectionKey.UnitClasses)
             if self.save_as_legacy_format:
                 unit_class_node = SubElement(unit_class_node, xml_constants.UNIT_CLASS_UNITS_ELEMENT)
 
@@ -81,38 +82,33 @@ def _output_units(self, hed_schema):
                 # These units nodes are the only "special case" from the old schema where behavior differs.
                 if self.save_as_legacy_format:
                     unit_node = SubElement(unit_class_node, xml_constants.UNIT_CLASS_UNIT_ELEMENT)
-                    attributes = hed_schema.get_all_tag_attributes(unit_class_unit, key_class=HedKey.Units)
+                    attributes = hed_schema.get_all_tag_attributes(unit_class_unit, key_class=HedSectionKey.Units)
                     HedSchema2XML._add_tag_node_attributes_old_format(unit_node, attributes)
                     unit_node.text = unit_class_unit
                 else:
-                    self._add_node(hed_schema, unit_class_node, unit_class_unit, HedKey.Units,
+                    self._add_node(hed_schema, unit_class_node, unit_class_unit, HedSectionKey.Units,
                                    sub_node_name="unit")
 
-    def _output_unit_modifiers(self, hed_schema):
-        if not hed_schema.has_unit_modifiers:
+    def _output_section(self, hed_schema, key_class):
+        if not hed_schema._sections[key_class]:
             return
-        unit_modifier_node = SubElement(self.hed_node, xml_constants.get_section_name(HedKey.UnitModifiers,
+        unit_modifier_node = SubElement(self.hed_node, xml_constants.get_section_name(key_class,
                                                                                       self.save_as_legacy_format))
-        for modifier_name in hed_schema.dictionaries[HedKey.UnitModifiers]:
-            self._add_node(hed_schema, unit_modifier_node, modifier_name, HedKey.UnitModifiers)
+        for modifier_name in hed_schema[key_class]:
+            self._add_node(hed_schema, unit_modifier_node, modifier_name, key_class)
+
+    def _output_unit_modifiers(self, hed_schema):
+        self._output_section(hed_schema, HedSectionKey.UnitModifiers)
+        return
 
     def _output_value_classes(self, hed_schema):
-        values_section_node = SubElement(self.hed_node, xml_constants.get_section_name(HedKey.ValueClasses,
-                                                                                           self.save_as_legacy_format))
-        for value_class in hed_schema.dictionaries[HedKey.ValueClasses]:
-            self._add_node(hed_schema, values_section_node, value_class, HedKey.ValueClasses)
+        self._output_section(hed_schema, HedSectionKey.ValueClasses)
 
     def _output_attributes(self, hed_schema):
-        attributes_section_node = SubElement(self.hed_node, xml_constants.get_section_name(HedKey.Attributes,
-                                                                                           self.save_as_legacy_format))
-        for attribute_name in hed_schema.dictionaries[HedKey.Attributes]:
-            self._add_node(hed_schema, attributes_section_node, attribute_name, HedKey.Attributes)
+        self._output_section(hed_schema, HedSectionKey.Attributes)
 
     def _output_properties(self, hed_schema):
-        properties_section_node = SubElement(self.hed_node, xml_constants.get_section_name(HedKey.Properties,
-                                                                                           self.save_as_legacy_format))
-        for property_name in hed_schema.dictionaries[HedKey.Properties]:
-            self._add_node(hed_schema, properties_section_node, property_name, HedKey.Properties)
+        self._output_section(hed_schema, HedSectionKey.Properties)
 
     def _output_footer(self, hed_schema):
         if hed_schema.epilogue:
@@ -175,7 +171,7 @@ def _add_tag_node_attributes_old_format(tag_node, tag_attributes):
             else:
                 tag_node.set(attribute, value)
 
-    def _add_node(self, hed_schema, parent_node, full_name, key_class=HedKey.AllTags, short_tag_name=None,
+    def _add_node(self, hed_schema, parent_node, full_name, key_class=HedSectionKey.AllTags, short_tag_name=None,
                   sub_node_name=None):
         """
             Creates a tag node and adds it to the parent.
@@ -189,7 +185,7 @@ def _add_node(self, hed_schema, parent_node, full_name, key_class=HedKey.AllTags
         full_name : str
             Long version of the tag/modifier/unit name
         key_class: str
-            The type of node we are adding.  eg HedKey.AllTags, HedKey.UnitModifiers, etc.
+            The type of node we are adding.  eg HedSectionKey.AllTags, HedSectionKey.UnitModifiers, etc.
         short_tag_name : str
             The short version of the tag if this is a tag.  Even for hed2g.
         sub_node_name: str or None
diff --git a/hedtools/hed/schema/wiki2schema.py b/hedtools/hed/schema/fileio/wiki2schema.py
similarity index 84%
rename from hedtools/hed/schema/wiki2schema.py
rename to hedtools/hed/schema/fileio/wiki2schema.py
index 79c3a0ea9..6f66dbeae 100644
--- a/hedtools/hed/schema/wiki2schema.py
+++ b/hedtools/hed/schema/fileio/wiki2schema.py
@@ -2,12 +2,11 @@
 This module is used to create a HedSchema object from a .mediawiki file.
 """
 import re
-from hed.schema.hed_schema_constants import HedKey
+from hed.schema.hed_schema_constants import HedSectionKey
 from hed.errors.exceptions import HedFileError, HedExceptions
-from hed.schema.hed_schema import HedSchema
+from hed.schema import HedSchema
 from hed.schema import schema_validation_util
-from hed.schema import wiki_constants
-
+from hed.schema.fileio import wiki_constants
 
 level_expression = r'\*+'
 attributes_expression = r'\{.*\}'
@@ -20,7 +19,7 @@
 
 
 # these must always be in order under the current spec.
-class HedSection:
+class HedWikiSection:
     HeaderLine = 2
     Prologue = 3
     Schema = 4
@@ -35,38 +34,38 @@ class HedSection:
 
 
 SectionStarts = {
-    HedSection.Prologue: wiki_constants.PROLOGUE_SECTION_ELEMENT,
-    HedSection.Schema: wiki_constants.START_HED_STRING,
-    HedSection.EndSchema: wiki_constants.END_SCHEMA_STRING,
-    HedSection.UnitsClasses: wiki_constants.UNIT_CLASS_STRING,
-    HedSection.UnitModifiers: wiki_constants.UNIT_MODIFIER_STRING,
-    HedSection.ValueClasses: wiki_constants.VALUE_CLASS_STRING,
-    HedSection.Attributes: wiki_constants.ATTRIBUTE_DEFINITION_STRING,
-    HedSection.Properties: wiki_constants.ATTRIBUTE_PROPERTY_STRING,
-    HedSection.Epilogue: wiki_constants.EPILOGUE_SECTION_ELEMENT,
-    HedSection.EndHed: wiki_constants.END_HED_STRING
+    HedWikiSection.Prologue: wiki_constants.PROLOGUE_SECTION_ELEMENT,
+    HedWikiSection.Schema: wiki_constants.START_HED_STRING,
+    HedWikiSection.EndSchema: wiki_constants.END_SCHEMA_STRING,
+    HedWikiSection.UnitsClasses: wiki_constants.UNIT_CLASS_STRING,
+    HedWikiSection.UnitModifiers: wiki_constants.UNIT_MODIFIER_STRING,
+    HedWikiSection.ValueClasses: wiki_constants.VALUE_CLASS_STRING,
+    HedWikiSection.Attributes: wiki_constants.ATTRIBUTE_DEFINITION_STRING,
+    HedWikiSection.Properties: wiki_constants.ATTRIBUTE_PROPERTY_STRING,
+    HedWikiSection.Epilogue: wiki_constants.EPILOGUE_SECTION_ELEMENT,
+    HedWikiSection.EndHed: wiki_constants.END_HED_STRING
 }
 
 
 SectionNames = {
-    HedSection.HeaderLine: "Header",
-    HedSection.Prologue: "Prologue",
-    HedSection.Schema: "Schema",
-    HedSection.EndSchema: "EndSchema",
-    HedSection.UnitsClasses: "Unit Classes",
-    HedSection.UnitModifiers: "Unit Modifiers",
-    HedSection.ValueClasses: "Value Classes",
-    HedSection.Attributes: "Attributes",
-    HedSection.Properties: "Properties",
-    HedSection.EndHed: "EndHed"
+    HedWikiSection.HeaderLine: "Header",
+    HedWikiSection.Prologue: "Prologue",
+    HedWikiSection.Schema: "Schema",
+    HedWikiSection.EndSchema: "EndSchema",
+    HedWikiSection.UnitsClasses: "Unit Classes",
+    HedWikiSection.UnitModifiers: "Unit Modifiers",
+    HedWikiSection.ValueClasses: "Value Classes",
+    HedWikiSection.Attributes: "Attributes",
+    HedWikiSection.Properties: "Properties",
+    HedWikiSection.EndHed: "EndHed"
 }
 
 ErrorsBySection = {
-    HedSection.Schema: HedExceptions.SCHEMA_START_MISSING,
-    HedSection.EndSchema: HedExceptions.SCHEMA_END_INVALID,
-    HedSection.EndHed: HedExceptions.HED_END_INVALID
+    HedWikiSection.Schema: HedExceptions.SCHEMA_START_MISSING,
+    HedWikiSection.EndSchema: HedExceptions.SCHEMA_END_INVALID,
+    HedWikiSection.EndHed: HedExceptions.HED_END_INVALID
 }
-required_sections = [HedSection.Schema, HedSection.EndSchema, HedSection.EndHed]
+required_sections = [HedWikiSection.Schema, HedWikiSection.EndSchema, HedWikiSection.EndHed]
 
 
 class HedSchemaWikiParser:
@@ -111,17 +110,17 @@ def _read_wiki(self, wiki_lines):
 
         wiki_lines_by_section = self._split_lines_into_sections(wiki_lines)
         parse_order = {
-            HedSection.HeaderLine: self._read_header_section,
-            HedSection.Prologue: self._read_prologue,
-            HedSection.Properties: self._read_properties,
-            HedSection.Epilogue: self._read_epilogue,
+            HedWikiSection.HeaderLine: self._read_header_section,
+            HedWikiSection.Prologue: self._read_prologue,
+            HedWikiSection.Properties: self._read_properties,
+            HedWikiSection.Epilogue: self._read_epilogue,
             # Pass 2
-            HedSection.Attributes: self._read_attributes,
+            HedWikiSection.Attributes: self._read_attributes,
             # Pass3
-            HedSection.Schema: self._read_schema,
-            HedSection.UnitsClasses: self._read_unit_classes,
-            HedSection.UnitModifiers: self._read_unit_modifiers,
-            HedSection.ValueClasses: self._read_value_classes,
+            HedWikiSection.Schema: self._read_schema,
+            HedWikiSection.UnitsClasses: self._read_unit_classes,
+            HedWikiSection.UnitModifiers: self._read_unit_modifiers,
+            HedWikiSection.ValueClasses: self._read_value_classes,
         }
         self._parse_sections(wiki_lines_by_section, parse_order)
 
@@ -149,7 +148,7 @@ def _split_lines_into_sections(self, wiki_lines):
             A list of lines for each section of the schema(not including the identifying section line)
         """
         # We start having found the header and may still be in it
-        current_section = HedSection.HeaderLine
+        current_section = HedWikiSection.HeaderLine
         found_section = True
         strings_for_section = {}
         for line in wiki_lines:
@@ -177,7 +176,7 @@ def _split_lines_into_sections(self, wiki_lines):
                 found_section = False
                 continue
 
-            if (current_section != HedSection.Schema and line.startswith(wiki_constants.ROOT_TAG) and
+            if (current_section != HedWikiSection.Schema and line.startswith(wiki_constants.ROOT_TAG) and
                     not (line.startswith(wiki_constants.OLD_SYNTAX_SECTION_NAME) and not self._schema.is_hed3_schema)):
                 raise HedFileError(HedExceptions.INVALID_SECTION_SEPARATOR,
                                    f"Invalid section separator '{line.strip()}'", filename=self.filename)
@@ -186,7 +185,7 @@ def _split_lines_into_sections(self, wiki_lines):
                 raise HedFileError(HedExceptions.INVALID_SECTION_SEPARATOR,
                                    f"Invalid section separator '{line.strip()}'", filename=self.filename)
 
-            if current_section == HedSection.Prologue or current_section == HedSection.Epilogue:
+            if current_section == HedWikiSection.Prologue or current_section == HedWikiSection.Epilogue:
                 if line.strip():
                     # we want to preserve all formatting in the prologue and epilogue.
                     if line.endswith("\n"):
@@ -297,11 +296,11 @@ def _read_unit_classes(self, lines):
             if level == 1:
                 current_unit_class = unit_class
                 self._schema._add_unit_class_unit(current_unit_class, None)
-                self._add_single_line(line, HedKey.UnitClasses, skip_adding_name=True)
+                self._add_single_line(line, HedSectionKey.UnitClasses, skip_adding_name=True)
             # This is a unit class unit
             else:
                 self._schema._add_unit_class_unit(current_unit_class, unit_class)
-                self._add_single_line(line, HedKey.Units, skip_adding_name=True)
+                self._add_single_line(line, HedSectionKey.Units, skip_adding_name=True)
 
     def _read_unit_modifiers(self, lines):
         """Adds the unit modifiers section
@@ -312,7 +311,7 @@ def _read_unit_modifiers(self, lines):
             Lines for this section
         """
         for line in lines:
-            self._add_single_line(line, HedKey.UnitModifiers)
+            self._add_single_line(line, HedSectionKey.UnitModifiers)
 
     def _read_value_classes(self, lines):
         """Adds the unit modifiers section
@@ -323,24 +322,20 @@ def _read_value_classes(self, lines):
             Lines for this section
         """
         for line in lines:
-            self._add_single_line(line, HedKey.ValueClasses)
+            self._add_single_line(line, HedSectionKey.ValueClasses)
 
     def _read_properties(self, lines):
         for line in lines:
-            prop_name = self._get_tag_name(line)
-            prop_desc = self._get_tag_description(line)
-            self._schema._add_property_name_to_dict(prop_name, prop_desc)
+            self._add_single_line(line, HedSectionKey.Properties)
         self._schema.add_default_properties()
 
     def _read_attributes(self, lines):
         self.attributes = {}
         for line in lines:
-            attribute_name = self._get_tag_name(line)
-
-            self._schema._add_attribute_name_to_dict(attribute_name)
-            self._add_single_line(line, HedKey.Attributes)
+            self._add_single_line(line, HedSectionKey.Attributes)
         self._schema.add_hed2_attributes()
 
+
     def _get_header_attributes(self, version_line):
         """Extracts all valid attributes like version from the HED line in .mediawiki format.
 
@@ -534,7 +529,7 @@ def _add_tag_line(self, parent_tags, tag_line):
                 long_tag_name = "/".join(parent_tags) + "/" + tag_name
             else:
                 long_tag_name = tag_name
-            self._add_single_line(tag_line, HedKey.AllTags, long_tag_name)
+            self._add_single_line(tag_line, HedSectionKey.AllTags, long_tag_name)
 
         return tag_name
 
@@ -547,8 +542,10 @@ def _add_single_line(self, tag_line, key_class, element_name=None, skip_adding_n
         node_desc = self._get_tag_description(tag_line)
         node_attributes = self._get_tag_attributes(tag_line)
         if not skip_adding_name:
-            self._schema._add_tag_to_dict(node_name, key_class, node_name)
-        self._schema._add_description_to_dict(node_name, node_desc, key_class)
+            self._schema._add_tag_to_dict(node_name, key_class)
+        tag_entry = self._schema._get_entry_for_tag(node_name, key_class)
+        if node_desc:
+            tag_entry.description = node_desc
 
         for attribute_name, attribute_value in node_attributes.items():
-            self._schema._add_attribute_to_dict(node_name, attribute_name, attribute_value, key_class)
+            tag_entry.set_attribute_value(attribute_name, attribute_value)
diff --git a/hedtools/hed/schema/wiki_constants.py b/hedtools/hed/schema/fileio/wiki_constants.py
similarity index 50%
rename from hedtools/hed/schema/wiki_constants.py
rename to hedtools/hed/schema/fileio/wiki_constants.py
index b2637221f..9acfcbc7f 100644
--- a/hedtools/hed/schema/wiki_constants.py
+++ b/hedtools/hed/schema/fileio/wiki_constants.py
@@ -1,4 +1,4 @@
-
+from hed.schema.hed_schema_constants import HedSectionKey
 START_HED_STRING = "!# start schema"
 END_SCHEMA_STRING = "!# end schema"
 END_HED_STRING = "!# end hed"
@@ -12,4 +12,14 @@
 VALUE_CLASS_STRING = "'''Value classes'''"
 PROLOGUE_SECTION_ELEMENT = "'''Prologue'''"
 EPILOGUE_SECTION_ELEMENT = "'''Epilogue'''"
-OLD_SYNTAX_SECTION_NAME = "'''Syntax'''"
\ No newline at end of file
+OLD_SYNTAX_SECTION_NAME = "'''Syntax'''"
+
+wiki_section_headers = {
+    HedSectionKey.AllTags: None,
+    HedSectionKey.UnitClasses: UNIT_CLASS_STRING,
+    HedSectionKey.Units: None,
+    HedSectionKey.UnitModifiers: UNIT_MODIFIER_STRING,
+    HedSectionKey.ValueClasses: VALUE_CLASS_STRING,
+    HedSectionKey.Attributes: ATTRIBUTE_DEFINITION_STRING,
+    HedSectionKey.Properties: ATTRIBUTE_PROPERTY_STRING,
+}
\ No newline at end of file
diff --git a/hedtools/hed/schema/xml2schema.py b/hedtools/hed/schema/fileio/xml2schema.py
similarity index 73%
rename from hedtools/hed/schema/xml2schema.py
rename to hedtools/hed/schema/fileio/xml2schema.py
index fce6cee26..4fc68d5ae 100644
--- a/hedtools/hed/schema/xml2schema.py
+++ b/hedtools/hed/schema/fileio/xml2schema.py
@@ -5,9 +5,9 @@
 from defusedxml import ElementTree
 import xml
 from hed.errors.exceptions import HedFileError, HedExceptions
-from hed.schema.hed_schema_constants import HedKey
-from hed.schema.hed_schema import HedSchema
-from hed.schema import xml_constants
+from hed.schema.hed_schema_constants import HedKey, HedSectionKey
+from hed.schema import HedSchema
+from hed.schema.fileio import xml_constants
 
 
 class HedSchemaXMLParser:
@@ -22,9 +22,7 @@ def __init__(self, hed_xml_file_path, schema_as_string=None):
         self._schema.header_attributes = self._get_header_attributes()
 
         self._populate_property_dictionaries()
-        self._schema.add_default_properties()
         self._populate_attribute_dictionaries()
-        self._schema.add_hed2_attributes()
         self._populate_value_class_dictionaries()
 
         self._schema.prologue = self._get_prologue()
@@ -101,18 +99,17 @@ def _populate_property_dictionaries(self):
         Returns
         -------
         """
-        section_name = xml_constants.get_section_name(HedKey.Properties)
+        section_name = xml_constants.get_section_name(HedSectionKey.Properties)
         properties_section = self._get_elements_by_name(section_name)
-        if not properties_section:
-            return
-        properties_section = properties_section[0]
+        if properties_section:
+            properties_section = properties_section[0]
 
-        def_element_name = xml_constants.get_element_name(HedKey.Properties)
-        attribute_elements = self._get_elements_by_name(def_element_name, properties_section)
-        for element in attribute_elements:
-            attribute_name = self._get_element_tag_value(element)
-            attribute_desc = self._get_element_tag_value(element, tag_name="description")
-            self._schema._add_property_name_to_dict(attribute_name, attribute_desc)
+            def_element_name = xml_constants.get_element_name(HedSectionKey.Properties)
+            attribute_elements = self._get_elements_by_name(def_element_name, properties_section)
+            for element in attribute_elements:
+                self._parse_node(element, HedSectionKey.Properties)
+
+        self._schema.add_default_properties()
 
     def _populate_attribute_dictionaries(self):
         """Populates a dictionary of dictionaries associated with attributes and their properties
@@ -125,32 +122,30 @@ def _populate_attribute_dictionaries(self):
         Returns
         -------
         """
-        section_name = xml_constants.get_section_name(HedKey.Attributes)
+        section_name = xml_constants.get_section_name(HedSectionKey.Attributes)
         attribute_section = self._get_elements_by_name(section_name)
-        if not attribute_section:
+        if attribute_section:
+            attribute_section = attribute_section[0]
+
+            def_element_name = xml_constants.get_element_name(HedSectionKey.Attributes)
+            attribute_elements = self._get_elements_by_name(def_element_name, attribute_section)
+            for element in attribute_elements:
+                self._parse_node(element, HedSectionKey.Attributes)
+        else:
             self._legacy_style_xml = True
-            return
-        attribute_section = attribute_section[0]
 
-        def_element_name = xml_constants.get_element_name(HedKey.Attributes)
-        attribute_elements = self._get_elements_by_name(def_element_name, attribute_section)
-        for element in attribute_elements:
-            attribute_name = self._get_element_tag_value(element)
-            self._schema._add_attribute_name_to_dict(attribute_name)
-            self._parse_node(element, HedKey.Attributes)
+        self._schema.add_hed2_attributes()
 
     def _populate_value_class_dictionaries(self):
-        section_name = xml_constants.get_section_name(HedKey.ValueClasses)
+        section_name = xml_constants.get_section_name(HedSectionKey.ValueClasses)
         value_class_section = self._get_elements_by_name(section_name)
         if not value_class_section:
             return
         value_class_section = value_class_section[0]
-        def_element_name = xml_constants.get_element_name(HedKey.ValueClasses)
+        def_element_name = xml_constants.get_element_name(HedSectionKey.ValueClasses)
         attribute_elements = self._get_elements_by_name(def_element_name, value_class_section)
         for element in attribute_elements:
-            attribute_name = self._get_element_tag_value(element)
-            self._schema._add_tag_to_dict(attribute_name, key_class=HedKey.ValueClasses)
-            self._parse_node(element, HedKey.ValueClasses)
+            self._parse_node(element, HedSectionKey.ValueClasses)
 
     def _populate_tag_dictionaries(self):
         """Populates a dictionary of dictionaries associated with tags and their attributes.
@@ -168,9 +163,9 @@ def _populate_tag_dictionaries(self):
         for tag_element in tag_elements:
             tag = self._get_tag_path_from_tag_element(tag_element)
             if self._legacy_style_xml:
-                self._parse_node_old(tag_element, HedKey.AllTags, tag)
+                self._parse_node_old_format(tag_element, HedSectionKey.AllTags, tag)
             else:
-                self._parse_node(tag_element, HedKey.AllTags, tag)
+                self._parse_node(tag_element, HedSectionKey.AllTags, tag)
 
     def _populate_unit_class_dictionaries(self):
         """Populates a dictionary of dictionaries associated with all of the unit classes, unit class units, and unit
@@ -186,50 +181,54 @@ class default units.
             default units.
 
         """
-        section_name = xml_constants.get_section_name(HedKey.UnitClasses, self._legacy_style_xml)
+        section_name = xml_constants.get_section_name(HedSectionKey.UnitClasses, self._legacy_style_xml)
         units_section_nodes = self._get_elements_by_name(section_name)
         if len(units_section_nodes) == 0:
             return
         units_section = units_section_nodes[0]
 
-        def_element_name = xml_constants.get_element_name(HedKey.UnitClasses, self._legacy_style_xml)
+        def_element_name = xml_constants.get_element_name(HedSectionKey.UnitClasses, self._legacy_style_xml)
         unit_class_elements = self._get_elements_by_name(def_element_name, units_section)
 
         if self._legacy_style_xml:
-            for unit_class_element in unit_class_elements:
-                self._parse_node_old(unit_class_element, HedKey.UnitClasses, skip_adding_name=True)
-                element_name = self._get_element_tag_value(unit_class_element)
-                self._schema._add_unit_class_unit(element_name, None)
-                element_units = self._get_elements_by_name(xml_constants.UNIT_CLASS_UNIT_ELEMENT, unit_class_element)
-                if not element_units:
-                    # Support super legacy format where units were just comma separated on a single line.
-                    element_units = self._get_element_tag_value(unit_class_element,
-                                                                xml_constants.UNIT_CLASS_UNITS_ELEMENT)
-                    if element_units:
-                        units = element_units.split(',')
-                        units_list = [unit.lower() for unit in units]
-                        for unit in units_list:
-                            self._schema._add_unit_class_unit(element_name, unit)
-                        continue
-                    element_units = []
-
-                element_unit_names = [element.text for element in element_units]
-                for unit in element_unit_names:
-                    self._schema._add_unit_class_unit(element_name, unit)
-                for element in element_units:
-                    self._parse_node_old(element, HedKey.Units, element_name=element.text,
-                                         skip_adding_name=True)
+            self._populate_unit_class_dictionaries_legacy(unit_class_elements)
         else:
             for unit_class_element in unit_class_elements:
-                self._parse_node(unit_class_element, HedKey.UnitClasses, skip_adding_name=True)
                 element_name = self._get_element_tag_value(unit_class_element)
+                self._schema._add_unit_class_unit(element_name, None)
+                self._parse_node(unit_class_element, HedSectionKey.UnitClasses, skip_adding_name=True)
                 element_units = self._get_elements_by_name(xml_constants.UNIT_CLASS_UNIT_ELEMENT, unit_class_element)
                 element_unit_names = [self._get_element_tag_value(element) for element in element_units]
-                self._schema._add_unit_class_unit(element_name, None)
+
                 for unit in element_unit_names:
                     self._schema._add_unit_class_unit(element_name, unit)
                 for element in element_units:
-                    self._parse_node(element, HedKey.Units, skip_adding_name=True)
+                    self._parse_node(element, HedSectionKey.Units, skip_adding_name=True)
+
+    def _populate_unit_class_dictionaries_legacy(self, unit_class_elements):
+        for unit_class_element in unit_class_elements:
+            element_name = self._get_element_tag_value(unit_class_element)
+            self._schema._add_unit_class_unit(element_name, None)
+            self._parse_node_old_format(unit_class_element, HedSectionKey.UnitClasses, skip_adding_name=True)
+            element_units = self._get_elements_by_name(xml_constants.UNIT_CLASS_UNIT_ELEMENT, unit_class_element)
+            if not element_units:
+                # Support super legacy format where units were just comma separated on a single line.
+                element_units = self._get_element_tag_value(unit_class_element,
+                                                            xml_constants.UNIT_CLASS_UNITS_ELEMENT)
+                if element_units:
+                    units = element_units.split(',')
+                    units_list = [unit.lower() for unit in units]
+                    for unit in units_list:
+                        self._schema._add_unit_class_unit(element_name, unit)
+                    continue
+                element_units = []
+
+            element_unit_names = [element.text for element in element_units]
+            for unit in element_unit_names:
+                self._schema._add_unit_class_unit(element_name, unit)
+            for element in element_units:
+                self._parse_node_old_format(element, HedSectionKey.Units, element_name=element.text,
+                                            skip_adding_name=True)
 
     def _populate_unit_modifier_dictionaries(self):
         """
@@ -239,18 +238,18 @@ def _populate_unit_modifier_dictionaries(self):
         -------
 
         """
-        section_name = xml_constants.get_section_name(HedKey.UnitModifiers, self._legacy_style_xml)
+        section_name = xml_constants.get_section_name(HedSectionKey.UnitModifiers, self._legacy_style_xml)
         unit_modifier_section_nodes = self._get_elements_by_name(section_name)
         if len(unit_modifier_section_nodes) == 0:
             return
         unit_modifier_section = unit_modifier_section_nodes[0]
-        def_element_name = xml_constants.get_element_name(HedKey.UnitModifiers, self._legacy_style_xml)
+        def_element_name = xml_constants.get_element_name(HedSectionKey.UnitModifiers, self._legacy_style_xml)
         node_elements = self._get_elements_by_name(def_element_name, unit_modifier_section)
         for node_element in node_elements:
             if self._legacy_style_xml:
-                self._parse_node_old(node_element, key_class=HedKey.UnitModifiers)
+                self._parse_node_old_format(node_element, key_class=HedSectionKey.UnitModifiers)
             else:
-                self._parse_node(node_element, key_class=HedKey.UnitModifiers)
+                self._parse_node(node_element, key_class=HedSectionKey.UnitModifiers)
 
     def _reformat_xsd_attrib(self, attrib_dict):
         final_attrib = {}
@@ -275,7 +274,6 @@ def _get_header_attributes(self):
         """
         return self._reformat_xsd_attrib(self._root_element.attrib)
 
-
     def _get_prologue(self):
         prologue_elements = self._get_elements_by_name(xml_constants.PROLOGUE_ELEMENT)
         if len(prologue_elements) == 1:
@@ -288,7 +286,7 @@ def _get_epilogue(self):
             return epilogue_elements[0].text
         return ""
 
-    def _parse_node_old(self, node_element, key_class, element_name=None, skip_adding_name=False):
+    def _parse_node_old_format(self, node_element, key_class, element_name=None, skip_adding_name=False):
         if element_name:
             node_name = element_name
         else:
@@ -296,14 +294,18 @@ def _parse_node_old(self, node_element, key_class, element_name=None, skip_addin
 
         node_desc = self._get_element_tag_value(node_element, xml_constants.DESCRIPTION_ELEMENT)
         if not skip_adding_name:
-            self._schema._add_tag_to_dict(node_name, key_class, node_name)
-        self._schema._add_description_to_dict(node_name, node_desc, key_class)
-
+            self._schema._add_tag_to_dict(node_name, key_class)
+        tag_entry = self._schema._get_entry_for_tag(node_name, key_class)
+        if node_desc:
+            tag_entry.description = node_desc
         for attribute_name in node_element.attrib:
             new_value = node_element.get(attribute_name)
+            if new_value == "true":
+                if tag_entry.attribute_has_property(attribute_name, HedKey.BoolProperty):
+                    new_value = True
             if new_value and attribute_name == xml_constants.DEFAULT_UNIT_FOR_OLD_UNIT_CLASS_ATTRIBUTE:
                 attribute_name = xml_constants.DEFAULT_UNITS_FOR_TYPE_ATTRIBUTE
-            self._schema._add_attribute_to_dict(node_name, attribute_name, new_value, key_class)
+            tag_entry.set_attribute_value(attribute_name, new_value)
 
     def _parse_node(self, node_element, key_class, element_name=None, skip_adding_name=False):
         if element_name:
@@ -313,7 +315,9 @@ def _parse_node(self, node_element, key_class, element_name=None, skip_adding_na
         attribute_desc = self._get_element_tag_value(node_element, xml_constants.DESCRIPTION_ELEMENT)
         if not skip_adding_name:
             self._schema._add_tag_to_dict(node_name, key_class)
-        self._schema._add_description_to_dict(node_name, attribute_desc, key_class=key_class)
+        tag_entry = self._schema._get_entry_for_tag(node_name, key_class)
+        if attribute_desc:
+            tag_entry.description = attribute_desc
 
         for attribute_element in node_element:
             if attribute_element.tag != xml_constants.ATTRIBUTE_PROPERTY_ELEMENTS[key_class]:
@@ -321,9 +325,10 @@ def _parse_node(self, node_element, key_class, element_name=None, skip_adding_na
             attribute_name = self._get_element_tag_value(attribute_element)
             attribute_value_elements = self._get_elements_by_name("value", attribute_element)
             attribute_value = ",".join(element.text for element in attribute_value_elements)
+            # Todo: do we need to validate this here?
             if not attribute_value:
                 attribute_value = True
-            self._schema._add_attribute_to_dict(node_name, attribute_name, attribute_value, key_class)
+            tag_entry.set_attribute_value(attribute_name, attribute_value)
 
     def _get_ancestor_tag_names(self, tag_element):
         """Gets all the ancestor tag names of a tag element.
diff --git a/hedtools/hed/schema/xml_constants.py b/hedtools/hed/schema/fileio/xml_constants.py
similarity index 52%
rename from hedtools/hed/schema/xml_constants.py
rename to hedtools/hed/schema/fileio/xml_constants.py
index d652a1859..b3ed9258c 100644
--- a/hedtools/hed/schema/xml_constants.py
+++ b/hedtools/hed/schema/fileio/xml_constants.py
@@ -1,4 +1,4 @@
-from hed.schema.hed_schema_constants import HedKey
+from hed.schema.hed_schema_constants import HedKey, HedSectionKey
 
 # These are only currently used by the XML reader/writer, but that may change.
 XSI_SOURCE = "http://www.w3.org/2001/XMLSchema-instance"
@@ -49,19 +49,19 @@
 def get_section_name(key_class, legacy_format=False):
     if not legacy_format:
         section_names = {
-            HedKey.UnitClasses: UNIT_CLASS_SECTION_ELEMENT,
-            HedKey.UnitModifiers: UNIT_MODIFIER_SECTION_ELEMENT,
-            HedKey.ValueClasses: SCHEMA_VALUE_CLASSES_SECTION_ELEMENT,
-            HedKey.Attributes: SCHEMA_ATTRIBUTES_SECTION_ELEMENT,
-            HedKey.Properties: SCHEMA_PROPERTIES_SECTION_ELEMENT,
+            HedSectionKey.UnitClasses: UNIT_CLASS_SECTION_ELEMENT,
+            HedSectionKey.UnitModifiers: UNIT_MODIFIER_SECTION_ELEMENT,
+            HedSectionKey.ValueClasses: SCHEMA_VALUE_CLASSES_SECTION_ELEMENT,
+            HedSectionKey.Attributes: SCHEMA_ATTRIBUTES_SECTION_ELEMENT,
+            HedSectionKey.Properties: SCHEMA_PROPERTIES_SECTION_ELEMENT,
         }
     else:
         section_names = {
-            HedKey.UnitClasses: UNIT_CLASS_SECTION_ELEMENT_LEGACY,
-            HedKey.UnitModifiers: UNIT_MODIFIER_SECTION_ELEMENT_LEGACY,
-            HedKey.ValueClasses: SCHEMA_VALUE_CLASSES_SECTION_ELEMENT,
-            HedKey.Attributes: SCHEMA_ATTRIBUTES_SECTION_ELEMENT,
-            HedKey.Properties: SCHEMA_PROPERTIES_SECTION_ELEMENT,
+            HedSectionKey.UnitClasses: UNIT_CLASS_SECTION_ELEMENT_LEGACY,
+            HedSectionKey.UnitModifiers: UNIT_MODIFIER_SECTION_ELEMENT_LEGACY,
+            HedSectionKey.ValueClasses: SCHEMA_VALUE_CLASSES_SECTION_ELEMENT,
+            HedSectionKey.Attributes: SCHEMA_ATTRIBUTES_SECTION_ELEMENT,
+            HedSectionKey.Properties: SCHEMA_PROPERTIES_SECTION_ELEMENT,
         }
 
     return section_names.get(key_class, None)
@@ -70,31 +70,32 @@ def get_section_name(key_class, legacy_format=False):
 def get_element_name(key_class, legacy_format=False):
     if not legacy_format:
         element_names = {
-            HedKey.AllTags: TAG_DEF_ELEMENT,
-            HedKey.UnitClasses: UNIT_CLASS_DEF_ELEMENT,
-            HedKey.UnitModifiers: UNIT_MODIFIER_DEF_ELEMENT,
-            HedKey.ValueClasses: SCHEMA_VALUE_CLASSES_DEF_ELEMENT,
-            HedKey.Attributes: SCHEMA_ATTRIBUTES_DEF_ELEMENT,
-            HedKey.Properties: SCHEMA_PROPERTIES_DEF_ELEMENT,
+            HedSectionKey.AllTags: TAG_DEF_ELEMENT,
+            HedSectionKey.UnitClasses: UNIT_CLASS_DEF_ELEMENT,
+            HedSectionKey.UnitModifiers: UNIT_MODIFIER_DEF_ELEMENT,
+            HedSectionKey.ValueClasses: SCHEMA_VALUE_CLASSES_DEF_ELEMENT,
+            HedSectionKey.Attributes: SCHEMA_ATTRIBUTES_DEF_ELEMENT,
+            HedSectionKey.Properties: SCHEMA_PROPERTIES_DEF_ELEMENT,
         }
     else:
         element_names = {
-            HedKey.AllTags: TAG_DEF_ELEMENT,
-            HedKey.UnitClasses: UNIT_CLASS_DEF_ELEMENT_LEGACY,
-            HedKey.UnitModifiers: UNIT_MODIFIER_DEF_ELEMENT_LEGACY,
-            HedKey.ValueClasses: SCHEMA_VALUE_CLASSES_DEF_ELEMENT,
-            HedKey.Attributes: SCHEMA_ATTRIBUTES_DEF_ELEMENT,
-            HedKey.Properties: SCHEMA_PROPERTIES_DEF_ELEMENT,
+            HedSectionKey.AllTags: TAG_DEF_ELEMENT,
+            HedSectionKey.UnitClasses: UNIT_CLASS_DEF_ELEMENT_LEGACY,
+            HedSectionKey.UnitModifiers: UNIT_MODIFIER_DEF_ELEMENT_LEGACY,
+            HedSectionKey.ValueClasses: SCHEMA_VALUE_CLASSES_DEF_ELEMENT,
+            HedSectionKey.Attributes: SCHEMA_ATTRIBUTES_DEF_ELEMENT,
+            HedSectionKey.Properties: SCHEMA_PROPERTIES_DEF_ELEMENT,
         }
 
     return element_names.get(key_class, (None, None))
 
 
 ATTRIBUTE_PROPERTY_ELEMENTS = {
-    HedKey.AllTags: ATTRIBUTE_ELEMENT,
-    HedKey.UnitClasses: ATTRIBUTE_ELEMENT,
-    HedKey.Units: ATTRIBUTE_ELEMENT,
-    HedKey.UnitModifiers: ATTRIBUTE_ELEMENT,
-    HedKey.ValueClasses: ATTRIBUTE_ELEMENT,
-    HedKey.Attributes: ATTRIBUTE_PROPERTY_ELEMENT
+    HedSectionKey.AllTags: ATTRIBUTE_ELEMENT,
+    HedSectionKey.UnitClasses: ATTRIBUTE_ELEMENT,
+    HedSectionKey.Units: ATTRIBUTE_ELEMENT,
+    HedSectionKey.UnitModifiers: ATTRIBUTE_ELEMENT,
+    HedSectionKey.ValueClasses: ATTRIBUTE_ELEMENT,
+    HedSectionKey.Attributes: ATTRIBUTE_PROPERTY_ELEMENT,
+    HedSectionKey.Properties: None
 }
diff --git a/hedtools/hed/schema/hed_schema.py b/hedtools/hed/schema/hed_schema.py
index f09f826ff..e5f5b6f9a 100644
--- a/hedtools/hed/schema/hed_schema.py
+++ b/hedtools/hed/schema/hed_schema.py
@@ -4,14 +4,13 @@
 
 The dictionary is a dictionary of dictionaries. The dictionary names are the list in HedKey from hed_schema_constants.
 """
-from hed.schema.hed_schema_constants import HedKey
+from hed.schema.hed_schema_constants import HedKey, HedSectionKey
 from hed.util import file_util
-from hed.errors import error_reporter
-from hed.schema.schema2xml import HedSchema2XML
-from hed.schema.schema2wiki import HedSchema2Wiki
+from hed.schema.fileio.schema2xml import HedSchema2XML
+from hed.schema.fileio.schema2wiki import HedSchema2Wiki
 from hed.schema import schema_compliance
-from hed.errors.error_types import ValidationErrors
 from hed.schema import schema_validation_util
+from hed.schema.hed_schema_section import HedSchemaSection
 
 import inflect
 pluralize = inflect.engine()
@@ -29,10 +28,9 @@ def __init__(self):
         HedSchema
             A HedSchema object.
         """
-        self.no_duplicate_tags = True
+        self._has_duplicate_tags = False
         self.header_attributes = {}
         self._filename = None
-        self.dictionaries = self._create_empty_dictionaries()
         self.prologue = ""
         self.epilogue = ""
 
@@ -40,6 +38,12 @@ def __init__(self):
         self._is_hed3_schema = None
         # This is the specified library prefix - tags will be {library_prefix}:{tag_name}
         self._library_prefix = ""
+        
+        self._sections = self._create_empty_sections()
+        self.short_tag_mapping = {}
+
+        # Caches results when you search for all tags with an attribute.
+        self._all_tags_attributes_cache = {}
 
     # ===============================================
     # Basic schema properties
@@ -60,7 +64,28 @@ def version(self):
     @property
     def library(self):
         return self.header_attributes.get('library')
-    
+
+    def schema_for_prefix(self, prefix):
+        """
+            Return the specific HedSchema object for the given tag prefix.
+
+            This is mostly a placeholder for HedSchemaGroup.  May be refactored out later.
+
+        Parameters
+        ----------
+        prefix : str
+            A schema library prefix to get the schema for.
+
+        Returns
+        -------
+        schema: HedSchema
+        """
+        return self
+
+    @property
+    def valid_prefixes(self):
+        return [self._library_prefix]
+
     # ===============================================
     # Creation and saving functions
     # ===============================================
@@ -136,34 +161,12 @@ def set_library_prefix(self, library_prefix):
             library_prefix += ":"
 
         len_prefix = len(self._library_prefix)
-        new_tag_dicts = {}
-        dicts_to_update = self.get_tag_attribute_names()
-        bool_attribute_names = [dict_name for dict_name in dicts_to_update
-                                if dict_name in self.dictionaries[HedKey.BoolProperty]]
-        dicts_to_update += [HedKey.AllTags, HedKey.ExtensionAllowedPropagated]
-        bool_attribute_names += [HedKey.AllTags, HedKey.ExtensionAllowedPropagated]
-        for dict_name in dicts_to_update:
-            tag_dict = self.dictionaries[dict_name]
-            new_dict = {}
-            for tag_key_name, tag_key_value in tag_dict.items():
-                tag_key_name = library_prefix.lower() + tag_key_name[len_prefix:]
-                if dict_name in bool_attribute_names:
-                    tag_key_value = library_prefix + tag_key_value[len_prefix:]
-                new_dict[tag_key_name] = tag_key_value
-            new_tag_dicts[dict_name] = new_dict
-
-        for dict_name, new_dict in new_tag_dicts.items():
-            self.dictionaries[dict_name] = new_dict
-
-        # Update description dictionary
-        tag_desc_prefix = f"{HedKey.AllTags}_"
-        len_prefix += len(tag_desc_prefix)
-        new_desc_dict = {}
-        for desc_name, desc in self.dictionaries[HedKey.Descriptions].items():
-            if desc_name.startswith(tag_desc_prefix):
-                desc_name = tag_desc_prefix + library_prefix.lower() + desc_name[len_prefix:]
-            new_desc_dict[desc_name] = desc
-        self.dictionaries[HedKey.Descriptions] = new_desc_dict
+
+        new_section_dict = {library_prefix.lower() + tag_name[len_prefix:]: tag_entry for
+                            tag_name, tag_entry in self._sections[HedSectionKey.AllTags].items()}
+        for entry in new_section_dict.values():
+            entry.long_name = library_prefix.lower() + entry.long_name[len_prefix:]
+        self._sections[HedSectionKey.AllTags].all_names = new_section_dict
 
         self._library_prefix = library_prefix
         self.finalize_dictionaries()
@@ -202,7 +205,7 @@ def find_duplicate_tags(self):
             long tags sharing that short tag
         """
         duplicate_dict = {}
-        short_tag_dict = self.dictionaries[HedKey.ShortTags]
+        short_tag_dict = self.short_tag_mapping
         for tag_name in short_tag_dict:
             if isinstance(short_tag_dict[tag_name], list):
                 duplicate_dict[tag_name] = short_tag_dict[tag_name]
@@ -236,6 +239,9 @@ def dupe_tag_iter(self, return_detailed_info=False):
     # ===============================================
     # General schema properties/functions
     # ===============================================
+    def __getitem__(self, section_key):
+        return self._sections[section_key]
+
     @property
     def has_duplicate_tags(self):
         """
@@ -246,15 +252,19 @@ def has_duplicate_tags(self):
         bool
             Returns True if this is a valid hed3 schema with no duplicate short tags.
         """
-        return not self.no_duplicate_tags
+        return self._has_duplicate_tags
 
     @property
-    def has_unit_classes(self):
-        return HedKey.UnitClasses in self.dictionaries
+    def unit_classes(self):
+        return self._sections[HedSectionKey.UnitClasses]
 
     @property
-    def is_hed3_compatible(self):
-        return self.no_duplicate_tags
+    def unit_modifiers(self):
+        return self._sections[HedSectionKey.UnitModifiers]
+
+    @property
+    def value_classes(self):
+        return self._sections[HedSectionKey.ValueClasses]
 
     @property
     def is_hed3_schema(self):
@@ -263,178 +273,35 @@ def is_hed3_schema(self):
 
         return self.library or schema_validation_util.is_hed3_version_number(self.version)
 
-    @property
-    def has_unit_modifiers(self):
-        return HedKey.SIUnitModifier in self.dictionaries
-
-    @property
-    def has_value_classes(self):
-        return bool(self.dictionaries[HedKey.ValueClasses])
-
     def __eq__(self, other):
-        # Comment the following back in for easy debugging of schema that should be equal.
-        # dict_keys = set(list(self.dictionaries.keys()) + list(other.dictionaries.keys()))
-        # for dict_key in dict_keys:
-        #     if dict_key not in self.dictionaries:
-        #         print(f"{dict_key} dict not in self")
-        #         continue
-        #     if dict_key not in other.dictionaries:
-        #         print(f"{dict_key} dict not in other")
-        #         continue
-        #     dict1 = self.dictionaries[dict_key]
-        #     dict2 = other.dictionaries[dict_key]
-        #     if dict1 != dict2:
-        #         print(f"DICT {dict_key} NOT EQUAL")
-        #         key_union = set(list(dict1.keys()) + list(dict2.keys()))
-        #         for key in key_union:
-        #             if key not in dict1:
-        #                 print(f"{key} not in dict1")
-        #                 continue
-        #             if key not in dict2:
-        #                 print(f"{key} not in dict2")
-        #                 continue
-        #             if dict1[key] != dict2[key]:
-        #                 print(f"{key} doesn't match.  '{dict1[key]}' vs '{dict2[key]}'")
-        if self.dictionaries != other.dictionaries:
-            return False
         if self.header_attributes != other.header_attributes:
             return False
-        if self.no_duplicate_tags != other.no_duplicate_tags:
+        if self._has_duplicate_tags != other._has_duplicate_tags:
             return False
         if self.prologue != other.prologue:
             return False
         if self.epilogue != other.epilogue:
             return False
+        if self._sections != other._sections:
+            # for section1, section2 in zip(self._sections.values(), other._sections.values()):
+            #     if section1 != section2:
+            #         dict1 = section1.all_names
+            #         dict2 = section2.all_names
+            #         if dict1 != dict2:
+            #             print(f"DICT {section1._section_key} NOT EQUAL")
+            #             key_union = set(list(dict1.keys()) + list(dict2.keys()))
+            #             for key in key_union:
+            #                 if key not in dict1:
+            #                     print(f"{key} not in dict1")
+            #                     continue
+            #                 if key not in dict2:
+            #                     print(f"{key} not in dict2")
+            #                     continue
+            #                 if dict1[key] != dict2[key]:
+            #                     print(f"{key} doesn't match.  '{dict1[key]}' vs '{dict2[key]}'")
+            return False
         return True
 
-    def calculate_canonical_forms(self, original_tag, error_handler=None):
-        """
-        This takes a hed tag(short or long form) and converts it to the long form
-        Works left to right.(mostly relevant for errors)
-        Note: This only does minimal validation
-
-        eg 'Event'                    - Returns ('Event', None)
-           'Sensory event'            - Returns ('Event/Sensory event', None)
-        Takes Value:
-           'Environmental sound/Unique Value'
-                                      - Returns ('Item/Sound/Environmental Sound/Unique Value', None)
-        Extension Allowed:
-            'Experiment control/demo_extension'
-                                      - Returns ('Event/Experiment Control/demo_extension/', None)
-            'Experiment control/demo_extension/second_part'
-                                      - Returns ('Event/Experiment Control/demo_extension/second_part', None)
-
-
-        Parameters
-        ----------
-        original_tag: HedTag
-            A single hed tag(long or short)
-        error_handler: ErrorHandler
-            The error handler to use for context.  Will create a default one if not passed.
-        Returns
-        -------
-        long_tag: str
-            The converted long tag
-        short_tag_index: int
-            The position the short tag starts at in long_tag
-        extension_index: int
-            The position the extension or value starts at in the long_tag
-        errors: list
-            a list of errors while converting
-        """
-        if error_handler is None:
-            error_handler = error_reporter.ErrorHandler()
-
-        clean_tag = original_tag.tag.lower()
-        prefix = original_tag.library_prefix
-        clean_tag = clean_tag[len(prefix):]
-        prefix_tag_adj = len(prefix)
-        split_tags = clean_tag.split("/")
-        found_unknown_extension = False
-        found_index_end = 0
-        found_index_start = 0
-        found_long_org_tag = None
-        index_in_tag_end = 0
-        # Iterate over tags left to right keeping track of current index
-        for tag in split_tags:
-            tag_len = len(tag)
-            # Skip slashes
-            if index_in_tag_end != 0:
-                index_in_tag_end += 1
-            index_start = index_in_tag_end
-            index_in_tag_end += tag_len
-
-            # If we already found an unknown tag, it's implicitly an extension.  No known tags can follow it.
-            if not found_unknown_extension:
-                if tag not in self.short_tag_mapping:
-                    found_unknown_extension = True
-                    if not found_long_org_tag:
-                        error = error_handler.format_error(ValidationErrors.NO_VALID_TAG_FOUND,
-                                                           original_tag, index_in_tag=index_start + prefix_tag_adj,
-                                                           index_in_tag_end=index_in_tag_end + prefix_tag_adj)
-                        return str(original_tag), None, None, error
-                    continue
-
-                long_org_tags = self.short_tag_mapping[tag]
-                long_org_tag = None
-                if isinstance(long_org_tags, str):
-                    tag_string = long_org_tags.lower()
-
-                    main_hed_portion = clean_tag[:index_in_tag_end]
-                    # Verify the tag has the correct path above it.
-                    if tag_string.endswith(main_hed_portion):
-                        long_org_tag = long_org_tags
-                else:
-                    for org_tag_string in long_org_tags:
-                        tag_string = org_tag_string.lower()
-
-                        main_hed_portion = clean_tag[:index_in_tag_end]
-
-                        if tag_string.endswith(main_hed_portion):
-                            long_org_tag = org_tag_string
-                            break
-                if not long_org_tag:
-                    error = error_handler.format_error(ValidationErrors.INVALID_PARENT_NODE, tag=original_tag,
-                                                       index_in_tag=index_start + prefix_tag_adj,
-                                                       index_in_tag_end=index_in_tag_end + prefix_tag_adj,
-                                                       expected_parent_tag=long_org_tags)
-                    return str(original_tag), None, None, error
-
-                # In hed2 compatible, make sure this is a long form of a tag or throw an invalid base tag error.
-                if not self.is_hed3_compatible:
-                    if not clean_tag.startswith(long_org_tag.lower()):
-                        error = error_handler.format_error(ValidationErrors.NO_VALID_TAG_FOUND,
-                                                           original_tag, index_in_tag=index_start + prefix_tag_adj,
-                                                           index_in_tag_end=index_in_tag_end + prefix_tag_adj)
-                        return str(original_tag), None, None, error
-
-                found_index_start = index_start
-                found_index_end = index_in_tag_end
-                found_long_org_tag = long_org_tag
-            else:
-                # These means we found a known tag in the remainder/extension section, which is an error
-                if tag in self.short_tag_mapping:
-                    error = error_handler.format_error(ValidationErrors.INVALID_PARENT_NODE, original_tag,
-                                                       index_in_tag=index_start + prefix_tag_adj,
-                                                       index_in_tag_end=index_in_tag_end + prefix_tag_adj,
-                                                       expected_parent_tag=self.short_tag_mapping[tag])
-                    return str(original_tag), None, None, error
-
-        full_tag_string = str(original_tag)
-        # skip over the tag prefix if present
-        full_tag_string = full_tag_string[len(prefix):]
-        # Finally don't actually adjust the tag if it's hed2 style.
-        if not self.is_hed3_compatible:
-            return full_tag_string, None, found_index_end, []
-
-        remainder = full_tag_string[found_index_end:]
-        long_tag_string = found_long_org_tag + remainder
-
-        # calculate short_tag index into long tag.
-        found_index_start += (len(long_tag_string) - len(full_tag_string))
-        remainder_start_index = found_index_end + (len(long_tag_string) - len(full_tag_string))
-        return prefix + long_tag_string, found_index_start + prefix_tag_adj, remainder_start_index + prefix_tag_adj, {}
-
     # ===============================================
     # Basic tag attributes
     # ===============================================
@@ -451,8 +318,22 @@ def is_extension_allowed_tag(self, original_tag):
         tag_takes_extension: bool
             True if the tag has the 'extensionAllowed' attribute. False, if otherwise.
         """
+        # Takes value tag cannot be extension allowed
+        if self.is_takes_value_tag(original_tag):
+            return False
+
         base_tag = original_tag.base_tag.lower()
-        return self.tag_has_attribute(base_tag, HedKey.ExtensionAllowedPropagated)
+        lower_tag = base_tag
+        found_slash = len(lower_tag)
+        check_tag = lower_tag
+        while found_slash != -1:
+            current_index = found_slash
+            check_tag = check_tag[:current_index]
+            parent_tag_entry = self._get_entry_for_tag(check_tag, HedSectionKey.AllTags)
+            if parent_tag_entry and parent_tag_entry.has_attribute(HedKey.ExtensionAllowed):
+                return True
+            found_slash = check_tag.rfind("/")
+        return False
 
     def is_takes_value_tag(self, original_tag):
         """Checks to see if the tag has the 'takesValue' attribute.
@@ -500,7 +381,7 @@ def is_value_class_tag(self, original_tag):
         return self._value_tag_has_attribute(original_tag, HedKey.ValueClass)
 
     def is_basic_tag(self, original_tag):
-        return self.dictionaries[HedKey.AllTags].get(original_tag.lower())
+        return bool(self._get_entry_for_tag(original_tag.lower()))
 
     def base_tag_has_attribute(self, original_tag, tag_attribute):
         """Checks to see if the tag has a specific attribute.
@@ -517,9 +398,11 @@ def base_tag_has_attribute(self, original_tag, tag_attribute):
             True if the tag has the specified attribute. False, if otherwise.
 
         """
-        if self.dictionaries[tag_attribute].get(original_tag.base_tag.lower()):
-            return True
-        return False
+        tag_entry = self._get_entry_for_tag(original_tag.base_tag)
+        new_val = False
+        if tag_entry:
+            new_val = tag_entry.has_attribute(tag_attribute)
+        return new_val
 
     def tag_has_attribute(self, original_tag, tag_attribute):
         """Checks to see if the tag has a specific attribute.
@@ -536,8 +419,9 @@ def tag_has_attribute(self, original_tag, tag_attribute):
             True if the tag has the specified attribute. False, if otherwise.
 
         """
-        if self.dictionaries[tag_attribute].get(original_tag.lower()):
-            return True
+        tag_entry = self._get_entry_for_tag(original_tag, HedSectionKey.AllTags)
+        if tag_entry:
+            return tag_attribute in tag_entry.attributes
         return False
 
     # ===============================================
@@ -585,7 +469,9 @@ def get_unit_class_default_unit(self, original_tag):
         unit_classes = self.get_tag_unit_classes(original_tag)
         if unit_classes:
             first_unit_class = unit_classes[0]
-            default_unit = self.dictionaries[HedKey.DefaultUnits][first_unit_class]
+            unit_class_entry = self._get_entry_for_tag(first_unit_class, HedSectionKey.UnitClasses)
+            if unit_class_entry:
+                default_unit = unit_class_entry.has_attribute(HedKey.DefaultUnits, return_value=True)
 
         return default_unit
 
@@ -606,9 +492,10 @@ def get_tag_unit_class_units(self, original_tag):
         units = []
         unit_classes = self.get_tag_unit_classes(original_tag)
         for unit_class in unit_classes:
-            unit = self.dictionaries[HedKey.UnitClasses].get(unit_class)
-            if unit:
-                units += unit
+            unit_class_entry = self._get_entry_for_tag(unit_class, HedSectionKey.UnitClasses)
+            if unit_class_entry:
+                units += unit_class_entry.value
+
         return units
 
     def get_stripped_unit_value(self, original_tag):
@@ -640,20 +527,41 @@ def get_stripped_unit_value(self, original_tag):
 
         return formatted_tag_unit_value
 
-    def get_all_with_attribute(self, key):
-        return self.dictionaries[key]
-
     def get_unit_class_units(self, unit_class_type):
-        unit_class_units = self.dictionaries[HedKey.UnitClasses].get(unit_class_type)
-        return unit_class_units
+        unit_class_entry = self._get_entry_for_tag(unit_class_type, HedSectionKey.UnitClasses)
+        if not unit_class_entry:
+            return []
+
+        return unit_class_entry.value
+
+    def get_all_tags_with_attribute(self, key):
+        if key in self._all_tags_attributes_cache:
+            return self._all_tags_attributes_cache[key]
+        new_val = [tag_entry.long_name for tag_entry in self._sections[HedSectionKey.AllTags].values() if tag_entry.has_attribute(key)]
+        self._all_tags_attributes_cache[key] = new_val
+        return new_val
 
     # ===============================================
     # Semi-private creation finalizing functions
     # ===============================================
     def finalize_dictionaries(self):
         self._is_hed3_schema = self.is_hed3_schema
-        self._propagate_extension_allowed()
         self._populate_short_tag_dict()
+        self._all_tags_attributes_cache = {}
+
+    def _initialize_attributes(self, key_class):
+        """
+        Sets the valid attributes for the given section based on the schema.
+
+        Parameters
+        ----------
+        key_class : str
+            The section key for the section to update.
+        Returns
+        -------
+
+        """
+        self._sections[key_class].valid_attributes = self._get_attributes_for_class(key_class)
 
     def add_hed2_attributes(self, only_add_if_none_present=True):
         """
@@ -665,17 +573,20 @@ def add_hed2_attributes(self, only_add_if_none_present=True):
             If True(default), will only add attributes if there is currently none.
             If False, will add any missing attributes.
         """
-        if HedKey.ValueClassProperty not in self.dictionaries:
+        if HedKey.ValueClassProperty not in self._sections[HedSectionKey.Properties]:
             self._add_single_default_property(HedKey.ValueClassProperty)
 
         # !BFK! for handling old files.  If allowed character is a unit class property, ignore it entirely.
-        if HedKey.AllowedCharacter in self.dictionaries[HedKey.UnitClassProperty]:
-            del self.dictionaries[HedKey.AllowedCharacter]
-            del self.dictionaries[HedKey.UnitClassProperty][HedKey.AllowedCharacter]
-            del self.dictionaries[HedKey.Attributes][HedKey.AllowedCharacter]
-            self._add_description_to_dict(HedKey.AllowedCharacter, None, key_class=HedKey.Attributes)
-
-        if only_add_if_none_present and self.dictionaries[HedKey.Attributes]:
+        if HedKey.AllowedCharacter in self._sections[HedSectionKey.Attributes]:
+            attribute_entry = self._sections[HedSectionKey.Attributes][HedKey.AllowedCharacter]
+            if attribute_entry.has_attribute(HedKey.UnitClassProperty):
+                del self._sections[HedSectionKey.Attributes].all_names[HedKey.AllowedCharacter]
+                for section in self._sections.values():
+                    for entry in section.values():
+                        if HedKey.AllowedCharacter in entry.attributes:
+                            del entry.attributes[HedKey.AllowedCharacter]
+
+        if only_add_if_none_present and bool(self._sections[HedSectionKey.Attributes]):
             return
 
         from hed.schema import hed_2g_attributes
@@ -692,7 +603,7 @@ def add_default_properties(self, only_add_if_none_present=True):
                 If True(default), will only add properties if there is currently none.
                 If False, will add any missing properties.
                 """
-        if only_add_if_none_present and self.dictionaries[HedKey.Properties]:
+        if only_add_if_none_present and bool(self._sections[HedSectionKey.Properties]):
             return
 
         from hed.schema import hed_2g_attributes
@@ -700,28 +611,32 @@ def add_default_properties(self, only_add_if_none_present=True):
             self._add_single_default_property(prop_name)
 
     def update_old_hed_schema(self):
-        if HedKey.UnitPrefix not in self.dictionaries:
+        if HedKey.UnitPrefix not in self._sections[HedSectionKey.Attributes]:
             self._add_single_default_attribute(HedKey.UnitPrefix)
 
-        if self.dictionaries[HedKey.UnitPrefix]:
-            return
-
-        self.dictionaries[HedKey.UnitPrefix]['$'] = "$"
+        if not self.get_all_tags_with_attribute(HedKey.UnitPrefix):
+            tag_entry = self._get_entry_for_tag("$", HedSectionKey.Units)
+            if tag_entry:
+                tag_entry.set_attribute_value(HedKey.UnitPrefix, True)
 
     # ===============================================
     # Getters used to write out schemas primarily.
     # ===============================================
-    def get_desc_dict(self):
+    def get_desc_iter(self):
         """
-            Helper to return HedKey.Descriptions dictionary
+            Returns an iterator over all the descriptions found in all sections.
 
         Returns
         -------
-        descriptions_dict: {str:str}
+        tag_name: str
+        description: str
         """
-        return self.dictionaries[HedKey.Descriptions]
+        for section in self._sections.values():
+            for tag_entry in section.values():
+                if tag_entry.description:
+                    yield tag_entry.long_name, tag_entry.description
 
-    def get_tag_description(self, tag_name, key_class=HedKey.AllTags):
+    def get_tag_description(self, tag_name, key_class=HedSectionKey.AllTags):
         """
             If a description exists for the given name, returns it
 
@@ -729,16 +644,16 @@ def get_tag_description(self, tag_name, key_class=HedKey.AllTags):
         ----------
         tag_name : str
             A hed tag name(or unit/unit modifier etc) with proper capitalization.
-        key_class: str, default HedKey.AllTags
+        key_class: str, default HedSectionKey.AllTags
             A HedKey indicating what type of description you are asking for.  (All tags, Units, Unit modifier)
 
         Returns
         -------
         description: str or None
         """
-        if key_class == HedKey.AllTags:
-            tag_name = tag_name.lower()
-        return self.dictionaries[HedKey.Descriptions].get(f"{key_class}_{tag_name}", None)
+        tag_entry = self._get_entry_for_tag(tag_name, key_class)
+        if tag_entry:
+            return tag_entry.description
 
     def get_all_schema_tags(self, return_short_form=False):
         """
@@ -750,21 +665,22 @@ def get_all_schema_tags(self, return_short_form=False):
             A list of all terms(short tags) from the schema.
         """
         final_list = []
-        for lower_tag, org_tag in self.dictionaries[HedKey.AllTags].items():
+        for lower_tag, tag_entry in self._sections[HedSectionKey.AllTags].items():
             if return_short_form:
-                final_list.append(org_tag.split('/')[-1])
+                final_list.append(tag_entry.long_name.split('/')[-1])
             else:
-                final_list.append(org_tag)
+                final_list.append(tag_entry.long_name)
+
         return final_list
 
     def get_tag_attribute_names(self):
-        return [key_name for key_name in self.dictionaries[HedKey.Attributes]
-                if key_name not in self.dictionaries[HedKey.UnitClassProperty]
-                and key_name not in self.dictionaries[HedKey.UnitProperty]
-                and key_name not in self.dictionaries[HedKey.UnitModifierProperty]
-                and key_name not in self.dictionaries[HedKey.ValueClassProperty]]
+        return {tag_entry.long_name:tag_entry for tag_entry in self._sections[HedSectionKey.Attributes].values()
+                if not tag_entry.has_attribute(HedKey.UnitClassProperty)
+                and not tag_entry.has_attribute(HedKey.UnitProperty)
+                and not tag_entry.has_attribute(HedKey.UnitModifierProperty)
+                and not tag_entry.has_attribute(HedKey.ValueClassProperty)}
 
-    def get_all_tag_attributes(self, tag_name, key_class=HedKey.AllTags, keys=None):
+    def get_all_tag_attributes(self, tag_name, key_class=HedSectionKey.AllTags):
         """
             Gathers all attributes for a given tag name.  If keys is none, gets all normal hed tag attributes.
 
@@ -774,108 +690,35 @@ def get_all_tag_attributes(self, tag_name, key_class=HedKey.AllTags, keys=None):
             The name of the tag to check
         key_class: str
             The type of attributes we are asking for.  eg Tag, Units, Unit modifiers, or attributes.
-        keys : [str]
-            If this is filled in, use these exact keys and ignore the key_class parameter.
 
         Returns
         -------
         tag_values: {str: str}
             {key_name : attribute_value}
         """
-        if keys is None:
-            keys = self._get_attributes_for_class(key_class)
-            if keys is None:
-                raise KeyError("Invalid key_class property type")
+        tag_entry = self._get_entry_for_tag(tag_name, key_class)
         attributes = {}
-        for key in keys:
-            check_name = tag_name
-            if key in self.get_tag_attribute_names():
-                check_name = tag_name.lower()
-            source_dicts = self.dictionaries
-            if key_class == HedKey.AllTags:
-                source_dicts = self.dictionaries
-            if key not in source_dicts:
-                # Potentially raise or return an error here.
-                continue
-            if check_name in source_dicts[key]:
-                value = source_dicts[key][check_name]
-                # A tag attribute is True if the tag name and dictionary value are the same, ignoring capitalization
-                if value is True or value and check_name.lower() == value.lower():
-                    attributes[key] = True
-                else:
-                    if value is None:
-                        value = False
-                    attributes[key] = value
+        if tag_entry:
+            attributes = tag_entry.attributes
 
         return attributes
 
     # ===============================================
     # Private utility functions
     # ===============================================
-    @staticmethod
-    def _create_empty_dictionaries():
-        """
-        Initializes a dictionary with the minimum so the tools won't crash
-        """
+    def _create_empty_sections(self):
         dictionaries = {}
-
         # Add main sections
-        dictionaries[HedKey.AllTags] = {}
-        dictionaries[HedKey.UnitClasses] = {}
-        dictionaries[HedKey.Units] = {}
-        dictionaries[HedKey.UnitModifiers] = {}
-        dictionaries[HedKey.ValueClasses] = {}
-        dictionaries[HedKey.Attributes] = {}
-        dictionaries[HedKey.Properties] = {}
-
-        dictionaries[HedKey.UnknownAttributes] = {}
-        dictionaries[HedKey.Descriptions] = {}
+        dictionaries[HedSectionKey.AllTags] = HedSchemaSection(HedSectionKey.AllTags, case_sensitive=False)
+        dictionaries[HedSectionKey.UnitClasses] = HedSchemaSection(HedSectionKey.UnitClasses)
+        dictionaries[HedSectionKey.Units] = HedSchemaSection(HedSectionKey.Units)
+        dictionaries[HedSectionKey.UnitModifiers] = HedSchemaSection(HedSectionKey.UnitModifiers)
+        dictionaries[HedSectionKey.ValueClasses] = HedSchemaSection(HedSectionKey.ValueClasses)
+        dictionaries[HedSectionKey.Attributes] = HedSchemaSection(HedSectionKey.Attributes)
+        dictionaries[HedSectionKey.Properties] = HedSchemaSection(HedSectionKey.Properties)
 
         return dictionaries
 
-    def _propagate_extension_allowed(self):
-        """
-        Populates the ExtensionAllowedPropagated based on the ExtensionAllowed one.
-
-        Returns
-        -------
-
-        """
-        allowed_extensions = self.dictionaries[HedKey.ExtensionAllowed]
-        self.dictionaries[HedKey.ExtensionAllowedPropagated] = {}
-        for long_tag in self.dictionaries[HedKey.AllTags].values():
-            lower_tag = long_tag.lower()
-            if lower_tag in allowed_extensions:
-                self.dictionaries[HedKey.ExtensionAllowedPropagated][lower_tag] = long_tag
-                continue
-
-            if self.tag_has_attribute(lower_tag, HedKey.TakesValue):
-                continue
-
-            current_index = -1
-            found_slash = lower_tag.find("/", current_index + 1)
-            while found_slash != -1:
-                current_index = found_slash
-                check_tag = lower_tag[:current_index]
-                if check_tag in allowed_extensions:
-                    self.dictionaries[HedKey.ExtensionAllowedPropagated][lower_tag] = long_tag
-                    break
-                found_slash = lower_tag.find("/", current_index + 1)
-
-    @property
-    def short_tag_mapping(self):
-        """
-        This returns the short->long tag dictionary.
-
-
-        Returns
-        -------
-        short_tag_dict: {str:str} or {str:str or list}
-            Returns the short tag mapping dictionary.  If this is hed2 and has duplicates, the values of the dict
-            may contain lists in addition to strings.
-        """
-        return self.dictionaries[HedKey.ShortTags]
-
     def _populate_short_tag_dict(self):
         """
         Create a mapping from the short version of a tag to the long version and
@@ -884,10 +727,11 @@ def _populate_short_tag_dict(self):
         Returns
         -------
         """
-        self.no_duplicate_tags = True
-        base_tag_dict = self.dictionaries[HedKey.AllTags]
+        self._has_duplicate_tags = False
+        base_tag_dict = self._sections[HedSectionKey.AllTags]
         new_short_tag_dict = {}
-        for tag, unformatted_tag in base_tag_dict.items():
+        for tag, tag_entry in base_tag_dict.items():
+            unformatted_tag = tag_entry.long_name
             if self._library_prefix and unformatted_tag.startswith(self._library_prefix):
                 unformatted_tag = unformatted_tag[len(self._library_prefix):]
             split_tags = unformatted_tag.split("/")
@@ -900,13 +744,13 @@ def _populate_short_tag_dict(self):
             if short_clean_tag not in new_short_tag_dict:
                 new_short_tag_dict[short_clean_tag] = new_tag_entry
             else:
-                self.no_duplicate_tags = False
+                self._has_duplicate_tags = True
                 if not isinstance(new_short_tag_dict[short_clean_tag], list):
                     new_short_tag_dict[short_clean_tag] = [new_short_tag_dict[short_clean_tag]]
                 new_short_tag_dict[short_clean_tag].append(new_tag_entry)
-        self.dictionaries[HedKey.ShortTags] = new_short_tag_dict
+        self.short_tag_mapping = new_short_tag_dict
 
-    def _value_tag_has_attribute(self, original_tag, key=HedKey.ExtensionAllowedPropagated,
+    def _value_tag_has_attribute(self, original_tag, key,
                                  return_value=False):
         """
             Will return if original tag has the specified attribute, or False if original tag is not a takes value tag.
@@ -928,15 +772,16 @@ def _value_tag_has_attribute(self, original_tag, key=HedKey.ExtensionAllowedProp
         if not original_tag.extension_or_value_portion:
             return False
 
-        if key not in self.dictionaries:
-            return False
         value_class_tag = original_tag.base_tag.lower() + "/#"
 
-        value = self.dictionaries[key].get(value_class_tag, False)
-        if return_value:
-            return value
-        return bool(value)
+        tag_entry = self._get_entry_for_tag(value_class_tag)
+        if not tag_entry:
+            return False
+
+        new_val = tag_entry.has_attribute(key, return_value)
+        return new_val
 
+    # todo: Consider moving these into HedTag
     def _get_tag_units_portion(self, original_tag_unit_value, formatted_tag_unit_value,
                                tag_unit_class_units):
         """Checks to see if the specified string has a valid unit, and removes it if so.
@@ -958,10 +803,10 @@ def _get_tag_units_portion(self, original_tag_unit_value, formatted_tag_unit_val
         """
         tag_unit_class_units = sorted(tag_unit_class_units, key=len, reverse=True)
         for unit in tag_unit_class_units:
+            unit_entry = self._get_entry_for_tag(unit, HedSectionKey.Units)
             derivative_units = self._get_valid_unit_plural(unit)
             for derivative_unit in derivative_units:
-                if self.has_unit_modifiers and \
-                        self.dictionaries[HedKey.UnitSymbol].get(unit):
+                if unit_entry.has_attribute(HedKey.UnitSymbol):
                     found_unit, stripped_value = self._strip_off_units_if_valid(original_tag_unit_value,
                                                                                 derivative_unit,
                                                                                 True)
@@ -969,10 +814,8 @@ def _get_tag_units_portion(self, original_tag_unit_value, formatted_tag_unit_val
                     found_unit, stripped_value = self._strip_off_units_if_valid(formatted_tag_unit_value,
                                                                                 derivative_unit,
                                                                                 False)
-
                 if found_unit:
                     return stripped_value
-
         return None
 
     def _strip_off_units_if_valid(self, unit_value, unit, is_unit_symbol):
@@ -993,8 +836,10 @@ def _strip_off_units_if_valid(self, unit_value, unit, is_unit_symbol):
         """
         found_unit = False
         stripped_value = ''
-
-        should_be_prefix = self.dictionaries[HedKey.UnitPrefix].get(unit, False)
+        should_be_prefix = False
+        unit_entry = self._get_entry_for_tag(unit, HedSectionKey.Units)
+        if unit_entry:
+            should_be_prefix = unit_entry.has_attribute(HedKey.UnitPrefix)
         if should_be_prefix and str(unit_value).startswith(unit):
             found_unit = True
             stripped_value = str(unit_value)[len(unit):].strip()
@@ -1002,13 +847,16 @@ def _strip_off_units_if_valid(self, unit_value, unit, is_unit_symbol):
             found_unit = True
             stripped_value = str(unit_value)[0:-len(unit)].strip()
 
-        if found_unit and self.has_unit_modifiers:
+        if found_unit and self.unit_modifiers:
             if is_unit_symbol:
-                modifier_key = HedKey.SIUnitSymbolModifier
+                modifier_attribute_name = HedKey.SIUnitSymbolModifier
             else:
-                modifier_key = HedKey.SIUnitModifier
+                modifier_attribute_name = HedKey.SIUnitModifier
 
-            for unit_modifier in self.dictionaries[modifier_key]:
+            for modifier_entry in self._sections[HedSectionKey.UnitModifiers].values():
+                if not modifier_entry.has_attribute(modifier_attribute_name):
+                    continue
+                unit_modifier = modifier_entry.long_name
                 if stripped_value.startswith(unit_modifier):
                     stripped_value = stripped_value[len(unit_modifier):].strip()
                 elif stripped_value.endswith(unit_modifier):
@@ -1027,9 +875,10 @@ def _get_valid_unit_plural(self, unit):
             list of plural units
         """
         derivative_units = [unit]
-        if self.has_unit_modifiers and \
-                self.dictionaries[HedKey.UnitSymbol].get(unit) is None:
+        tag_entry = self._get_entry_for_tag(unit, HedSectionKey.Units)
+        if tag_entry and not tag_entry.has_attribute(HedKey.UnitSymbol):
             derivative_units.append(pluralize.plural(unit))
+
         return derivative_units
 
     def _get_attributes_for_class(self, key_class):
@@ -1043,119 +892,77 @@ def _get_attributes_for_class(self, key_class):
 
         Returns
         -------
-        attributes: [str] or {str:}
-            A list of all the attributes for this section.  May return a dict where the keys are the attribute names.
+        attributes: {str:entry} or HedSchemaSection
+            A dict of all the attributes for this section.  May be a HedSchemaSection and not actually a dict.
         """
-        if key_class == HedKey.AllTags:
+        if key_class == HedSectionKey.AllTags:
             return self.get_tag_attribute_names()
-        attrib_classes = {
-            HedKey.Properties: None,
-            HedKey.Attributes: HedKey.Properties,
-            HedKey.UnitClasses: HedKey.UnitClassProperty,
-            HedKey.Units: HedKey.UnitProperty,
-            HedKey.UnitModifiers: HedKey.UnitModifierProperty,
-            HedKey.ValueClasses: HedKey.ValueClassProperty
-        }
-        attrib_class = attrib_classes.get(key_class, None)
-        if attrib_class is None:
-            return []
-
-        return self.dictionaries[attrib_class]
+        elif key_class == HedSectionKey.Attributes:
+            return self._sections[HedSectionKey.Properties]
+        else:
+            attrib_classes = {
+                HedSectionKey.UnitClasses: HedKey.UnitClassProperty,
+                HedSectionKey.Units: HedKey.UnitProperty,
+                HedSectionKey.UnitModifiers: HedKey.UnitModifierProperty,
+                HedSectionKey.ValueClasses: HedKey.ValueClassProperty
+            }
+            attrib_class = attrib_classes.get(key_class, None)
+            if attrib_class is None:
+                return []
+
+            attributes = {attribute:entry for attribute, entry in self._sections[HedSectionKey.Attributes].items() if entry.has_attribute(attrib_class)}
+            return attributes
 
     # ===============================================
     # Semi private functions used to create a schema in memory(usually from a source file)
     # ===============================================
-    def _add_tag_to_dict(self, long_tag_name, key_class=HedKey.AllTags, value=None):
-        if value is None:
-            value = long_tag_name
-        if key_class == HedKey.AllTags:
-            self.dictionaries[key_class][long_tag_name.lower()] = value
-        else:
-            self.dictionaries[key_class][long_tag_name] = value
+    def _get_entry_for_tag(self, long_tag_name, key_class=HedSectionKey.AllTags):
+        """
+            Returns the schema entry for this tag, if one exists.
 
-    def _add_attribute_to_dict(self, tag_name, attribute_name, new_value, key_class):
-        if not new_value:
-            return
+        Parameters
+        ----------
+        long_tag_name :
+        key_class :
 
-        if attribute_name in self.dictionaries[HedKey.BoolProperty]:
-            # This case will only happen if someone has a slightly malformed schema where they use
-            # "extensionAllowed=true" instead of just "extensionAllowed"
-            # Todo: We should probably update this to internally store true/false for simplicity.
-            if new_value is True or new_value == "true":
-                new_value = tag_name
-            # if new_value == "true":
-            #     new_value = True
-            elif new_value is False or new_value == "false":
-                return
-
-        # Tags are case insensitive.
-        if key_class == HedKey.AllTags:
-            tag_name = tag_name.lower()
-
-        valid_attribute_classes = self._get_attributes_for_class(key_class)
-        # This might have duplicates as it's unknown and could be in other sections.
-        if attribute_name in self.dictionaries[HedKey.UnknownAttributes] \
-                or attribute_name not in valid_attribute_classes:
-            tag_name = key_class + "_" + tag_name
-            attribute_name = "invalidAttribute_" + attribute_name
-            if key_class == HedKey.AllTags:
-                if attribute_name not in self.dictionaries:
-                    self.dictionaries[attribute_name] = {}
-                    self.dictionaries[HedKey.UnknownAttributes][attribute_name] = "true"
-            else:
-                if attribute_name not in self.dictionaries:
-                    self.dictionaries[attribute_name] = {}
-                    self.dictionaries[HedKey.UnknownAttributes][attribute_name] = "true"
+        Returns
+        -------
 
-        self.dictionaries[attribute_name][tag_name] = new_value
+        """
+        return self._sections[key_class].get(long_tag_name)
+
+    def _add_tag_to_dict(self, long_tag_name, key_class):
+        section = self._sections[key_class]
+        if not section:
+            self._initialize_attributes(key_class)
+        section._add_to_dict(long_tag_name)
 
     def _add_unit_class_unit(self, unit_class, unit_class_unit):
-        if unit_class not in self.dictionaries[HedKey.UnitClasses]:
-            self.dictionaries[HedKey.UnitClasses][unit_class] = []
+        if unit_class not in self._sections[HedSectionKey.UnitClasses]:
+            self._sections[HedSectionKey.UnitClasses]._add_to_dict(unit_class)
+            unit_class_entry = self._get_entry_for_tag(unit_class, HedSectionKey.UnitClasses)
+            unit_class_entry.value = []
         if unit_class_unit is not None:
-            self.dictionaries[HedKey.UnitClasses][unit_class].append(unit_class_unit)
-        self.dictionaries[HedKey.Units][unit_class_unit] = unit_class_unit
-
-    def _add_description_to_dict(self, tag_name, desc, key_class=HedKey.AllTags):
-        if key_class == HedKey.AllTags:
-            tag_name = tag_name.lower()
-        desc_key = f"{key_class}_{tag_name}"
-        if desc:
-            self.dictionaries[HedKey.Descriptions][desc_key] = desc
-        else:
-            try:
-                del self.dictionaries[HedKey.Descriptions][desc_key]
-            except KeyError:
-                pass
-
-    def _add_attribute_name_to_dict(self, attribute_name):
-        if attribute_name in self.dictionaries[HedKey.Attributes]:
-            raise ValueError(f"Duplicate attribute {attribute_name} found in attributes section.")
-        if attribute_name in self.dictionaries:
-            raise ValueError(f"Attribute '{attribute_name}' is already reserved in dictionary and cannot be re-used.")
-        self.dictionaries[HedKey.Attributes][attribute_name] = attribute_name
-        self.dictionaries[attribute_name] = {}
-
-    def _add_property_name_to_dict(self, prop_name, prop_desc):
-        if prop_name in self.dictionaries[HedKey.Properties]:
-            raise ValueError(f"Duplicate property {prop_name} found in properties section.")
-        if prop_name in self.dictionaries:
-            raise ValueError(f"Property '{prop_name}' is already in dictionary as reserved and cannot be re-used.")
-        self.dictionaries[HedKey.Properties][prop_name] = prop_name
-        self.dictionaries[prop_name] = {}
-        self._add_description_to_dict(prop_name, prop_desc, HedKey.Properties)
+            unit_class_entry = self._get_entry_for_tag(unit_class, HedSectionKey.UnitClasses)
+            unit_class_entry.value.append(unit_class_unit)
+            self._add_tag_to_dict(unit_class_unit, HedSectionKey.Units)
 
     def _add_single_default_attribute(self, attribute_name):
         from hed.schema import hed_2g_attributes
         attribute_props, attribute_desc = hed_2g_attributes.attributes[attribute_name]
-        if attribute_name not in self.dictionaries[HedKey.Attributes]:
-            self._add_attribute_name_to_dict(attribute_name)
-        self._add_description_to_dict(attribute_name, attribute_desc, HedKey.Attributes)
+        if attribute_name not in self._sections[HedSectionKey.Attributes]:
+            self._add_tag_to_dict(attribute_name, HedSectionKey.Attributes)
+        tag_entry = self._get_entry_for_tag(attribute_name, HedSectionKey.Attributes)
+        if attribute_desc:
+            tag_entry.description = attribute_desc
 
         for attribute_property_name in attribute_props:
-            self._add_attribute_to_dict(attribute_name, attribute_property_name, True, HedKey.Attributes)
+            tag_entry.set_attribute_value(attribute_property_name, True)
 
     def _add_single_default_property(self, prop_name):
         from hed.schema import hed_2g_attributes
         prop_desc = hed_2g_attributes.properties[prop_name]
-        self._add_property_name_to_dict(prop_name, prop_desc)
+        self._add_tag_to_dict(prop_name, HedSectionKey.Properties)
+        tag_entry = self._get_entry_for_tag(prop_name, HedSectionKey.Properties)
+        if prop_desc:
+            tag_entry.description = prop_desc
diff --git a/hedtools/hed/schema/hed_schema_constants.py b/hedtools/hed/schema/hed_schema_constants.py
index d8d217982..9f7a921c4 100644
--- a/hedtools/hed/schema/hed_schema_constants.py
+++ b/hedtools/hed/schema/hed_schema_constants.py
@@ -1,9 +1,7 @@
 
-class HedKey:
+class HedSectionKey:
     """
-        Used to access the hed schema dictionaries
-
-        These names should match the attribute values in the XML/wiki.
+    Used to get at a specific section in a HedSchema object.
     """
     # overarching category listing all tags
     AllTags = 'tags'
@@ -20,10 +18,15 @@ class HedKey:
     # These are the allowed attribute property list, gathered from the schema on load.
     Properties = 'properties'
 
+
+class HedKey:
+    """
+        Known property and attribute names.  These should directly match what's in the file.
+
+        These names should match the attribute values in the XML/wiki.
+    """
     # Tag attributes
     ExtensionAllowed = 'extensionAllowed'
-    # On opening, the extension allowed attribute is propagated down to child tags.
-    ExtensionAllowedPropagated = 'extensionAllowedPropagated'
     IsNumeric = 'isNumeric'
     Position = 'position'
     PredicateType = 'predicateType'
@@ -44,8 +47,6 @@ class HedKey:
     UnitModifierProperty = 'unitModifierProperty'
     ValueClassProperty = 'valueClassProperty'
 
-    # Attributes found in file, but not definitions
-    UnknownAttributes = 'unknownAttributes'
 
     SIUnit = 'SIUnit'
     UnitSymbol = 'unitSymbol'
@@ -56,17 +57,9 @@ class HedKey:
     SIUnitModifier = 'SIUnitModifier'
     SIUnitSymbolModifier = 'SIUnitSymbolModifier'
 
+    # value class attributes
     AllowedCharacter = 'allowedCharacter'
 
-    # for normal tags, the key to this is the full tag name.
-    # For unit modifiers and such, prefix the tag with the appropriate HedKey.
-    # eg. dictionaries[HedKey.Descriptions][HedKey.UnitModifiers + 'm']
-    Descriptions = 'descriptions'
-
-    # If this is a valid HED3 spec, this allows mapping from short to long.
-    # this is in dictionaries, not tag dictionaries.
-    ShortTags = 'shortTags'
-
 
 VERSION_ATTRIBUTE = 'version'
 
diff --git a/hedtools/hed/schema/hed_schema_file.py b/hedtools/hed/schema/hed_schema_file.py
index eb9bcab52..3b06f0308 100644
--- a/hedtools/hed/schema/hed_schema_file.py
+++ b/hedtools/hed/schema/hed_schema_file.py
@@ -1,8 +1,8 @@
 import os
 
 
-from hed.schema.xml2schema import HedSchemaXMLParser
-from hed.schema.wiki2schema import HedSchemaWikiParser
+from hed.schema.fileio.xml2schema import HedSchemaXMLParser
+from hed.schema.fileio.wiki2schema import HedSchemaWikiParser
 from hed.schema import hed_schema_constants, hed_cache
 
 from hed.errors.exceptions import HedFileError, HedExceptions
@@ -51,6 +51,7 @@ def load_schema(hed_file_path=None, hed_url_path=None, library_prefix=None):
 
     return hed_schema
 
+
 # todo: this could be updated to also support .mediawiki format.
 def get_hed_xml_version(hed_xml_file_path):
     """Gets the version number from a HED XML file.
diff --git a/hedtools/hed/schema/hed_schema_group.py b/hedtools/hed/schema/hed_schema_group.py
index 380257de1..05dff2a90 100644
--- a/hedtools/hed/schema/hed_schema_group.py
+++ b/hedtools/hed/schema/hed_schema_group.py
@@ -4,7 +4,6 @@
 # todo: Switch various properties to this once we require python 3.8
 # from functools import cached_property
 from hed.errors.exceptions import HedExceptions, HedFileError
-from hed.errors.error_types import ValidationErrors
 
 
 class HedSchemaGroup:
@@ -29,7 +28,7 @@ def __init__(self, schema_list):
         library_prefixes = [hed_schema._library_prefix for hed_schema in schema_list]
         if len(set(library_prefixes)) != len(library_prefixes):
             raise HedFileError(HedExceptions.SCHEMA_DUPLICATE_PREFIX, "Multiple schemas share the same tag prefix.  This is not allowed.", filename="Combined Schema")
-        self._schemas = {hed_schema._library_prefix:hed_schema for hed_schema in schema_list}
+        self._schemas = {hed_schema._library_prefix: hed_schema for hed_schema in schema_list}
 
     # ===============================================
     # General schema properties/functions
@@ -44,11 +43,11 @@ def has_duplicate_tags(self):
         bool
             Returns True if this is a valid hed3 schema with no duplicate short tags.
         """
-        return not all([schema.no_duplicate_tags for schema in self._schemas.values()])
+        return any([schema.has_duplicate_tags for schema in self._schemas.values()])
 
     @property
-    def has_unit_classes(self):
-        return all([schema.has_unit_classes for schema in self._schemas.values()])
+    def unit_classes(self):
+        return all([schema.unit_classes for schema in self._schemas.values()])
 
     @property
     def is_hed3_compatible(self):
@@ -60,58 +59,38 @@ def is_hed3_schema(self):
         return True
 
     @property
-    def has_unit_modifiers(self):
-        return all([schema.has_unit_modifiers for schema in self._schemas.values()])
+    def unit_modifiers(self):
+        return all([schema.unit_modifiers for schema in self._schemas.values()])
 
     @property
-    def has_value_classes(self):
-        return all([schema.has_value_classes for schema in self._schemas.values()])
+    def value_classes(self):
+        return all([schema.value_classes for schema in self._schemas.values()])
 
     def __eq__(self, other):
         return self._schemas == other._schemas
 
-    def calculate_canonical_forms(self, original_tag, error_handler=None):
+    def schema_for_prefix(self, prefix):
         """
-        This takes a hed tag(short or long form) and converts it to the long form
-        Works left to right.(mostly relevant for errors)
-        Note: This only does minimal validation
-
-        eg 'Event'                    - Returns ('Event', None)
-           'Sensory event'            - Returns ('Event/Sensory event', None)
-        Takes Value:
-           'Environmental sound/Unique Value'
-                                      - Returns ('Item/Sound/Environmental Sound/Unique Value', None)
-        Extension Allowed:
-            'Experiment control/demo_extension'
-                                      - Returns ('Event/Experiment Control/demo_extension/', None)
-            'Experiment control/demo_extension/second_part'
-                                      - Returns ('Event/Experiment Control/demo_extension/second_part', None)
+            Return the specific HedSchema object for the given tag prefix.
 
+            Returns None if prefix is invalid.
 
         Parameters
         ----------
-        original_tag: HedTag
-            A single hed tag(long or short)
-        error_handler: ErrorHandler
-            The error handler to use for conversion
+        prefix : str
+            A schema library prefix to get the schema for.
+
         Returns
         -------
-        long_tag: str
-            The converted long tag
-        short_tag_index: int
-            The position the short tag starts at in long_tag
-        extension_index: int
-            The position the extension or value starts at in the long_tag
-        errors: list
-            a list of errors while converting
+        schema: HedSchema
+            The specific schema for this library prefix
         """
-        schema = self._schemas.get(original_tag.library_prefix)
-        if schema:
-            return schema.calculate_canonical_forms(original_tag, error_handler)
+        schema = self._schemas.get(prefix)
+        return schema
 
-        validation_issues = error_handler.format_error(ValidationErrors.HED_UNKNOWN_PREFIX, original_tag,
-                                                        original_tag.library_prefix, list(self._schemas.keys()))
-        return str(original_tag), None, None, validation_issues
+    @property
+    def valid_prefixes(self):
+        return self._schemas.keys()
 
     # ===============================================
     # Basic tag attributes
@@ -295,8 +274,8 @@ def get_stripped_unit_value(self, original_tag):
         if schema:
             return schema.get_stripped_unit_value(original_tag)
 
-    def get_all_with_attribute(self, key):
+    def get_all_tags_with_attribute(self, key):
         new_dict = {}
-        for schema in self._schemas:
-            new_dict.update(schema._tag_dictionaries[key])
-        return new_dict
+        for schema in self._schemas.values():
+            new_dict.update(schema.get_all_tags_with_attribute(key))
+        return new_dict
\ No newline at end of file
diff --git a/hedtools/hed/schema/hed_schema_section.py b/hedtools/hed/schema/hed_schema_section.py
new file mode 100644
index 000000000..4d750ca70
--- /dev/null
+++ b/hedtools/hed/schema/hed_schema_section.py
@@ -0,0 +1,154 @@
+
+
+class HedSchemaEntry:
+    def __init__(self, long_name, section):
+        self.long_name = long_name
+        # key: property/attribute name, value = property value.  Will often be a bool
+        self.attributes = {}
+        self.description = None
+        self.value = None
+        self._section = section
+        
+        # This section is largely unused.  It will only be filled in when we try to add an attribute
+        # that isn't valid in this section.
+        self._unknown_attributes = None
+
+    def set_attribute_value(self, attribute_name, attribute_value):
+        """
+            Add the given attribute to this entry and set its value
+
+            If this is not a valid attribute name, it will be also added as an unknown attribute.
+
+        Parameters
+        ----------
+        attribute_name : str
+        attribute_value : bool or str
+
+        Returns
+        -------
+
+        """
+        if not attribute_value:
+            return
+
+        if attribute_name not in self._section.valid_attributes:
+            # print(f"Unknown attribute {attribute_name}")
+            if self._unknown_attributes is None:
+                self._unknown_attributes = {}
+            self._unknown_attributes[attribute_name] = attribute_value
+        self.attributes[attribute_name] = attribute_value
+
+    def has_attribute(self, attribute_name, return_value=False):
+        """
+        Returns if this entry has this attribute.  This does not guarantee it's a valid attribute for this entry.
+
+        Parameters
+        ----------
+        attribute_name : str
+            The attribute to check for
+        return_value : bool
+            Return the value of the attribute, rather than simply if it is present
+
+        Returns
+        -------
+
+        """
+        if return_value:
+            return self.attributes.get(attribute_name, None)
+        else:
+            return attribute_name in self.attributes
+
+    def attribute_has_property(self, attribute_name, property_name):
+        """
+            If this is a valid attribute for this section, retrieve if it has the given property
+
+        Parameters
+        ----------
+        attribute_name : str
+            Attribute name to check for property_name
+        property_name : str
+        Returns
+        -------
+        has_property: bool
+            Returns if it has the property
+        """
+        attr_entry = self._section.valid_attributes.get(attribute_name)
+        if attr_entry and attr_entry.has_attribute(property_name):
+            return True
+
+    def __eq__(self, other):
+        if self.long_name != other.long_name:
+            return False
+        if self.attributes != other.attributes:
+            # We only want to compare known attributes
+            self_attr = {key: value for key, value in self.attributes.items()
+                         if not self._unknown_attributes or key not in self._unknown_attributes}
+            other_attr = {key: value for key, value in other.attributes.items()
+                          if not other._unknown_attributes or key not in other._unknown_attributes}
+            if self_attr != other_attr:
+                return False
+        if self.description != other.description:
+            return False
+        if self.value != other.value:
+            return False
+        return True
+
+
+class HedSchemaSection:
+    def __init__(self, section_key, case_sensitive=True):
+        # {lower_case_name: HedSchemaEntry}
+        self.all_names = {}
+        self._section_key = section_key
+        self.case_sensitive = case_sensitive
+
+        # Points to the entries in attributes
+        self.valid_attributes = {}
+
+    def _add_to_dict(self, name):
+        name_key = name
+        if not self.case_sensitive:
+            name_key = name.lower()
+
+        if name_key in self.all_names:
+            print(f"NotImplemented: {name_key} found twice in schema.")
+        new_entry = HedSchemaEntry(name, self)
+        self.all_names[name_key] = new_entry
+
+        return new_entry
+
+    # ===============================================
+    # Simple wrapper functions to make this class primarily function as a dict
+    # ===============================================
+    def __iter__(self):
+        return iter(self.all_names)
+
+    def items(self):
+        return self.all_names.items()
+
+    def values(self):
+        return self.all_names.values()
+
+    def keys(self):
+        return self.all_names.keys()
+
+    def __getitem__(self, key):
+        if not self.case_sensitive:
+            key = key.lower()
+        return self.all_names[key]
+
+    def get(self, key):
+        if not self.case_sensitive:
+            key = key.lower()
+        return self.all_names.get(key)
+
+    def __eq__(self, other):
+        if self.all_names != other.all_names:
+            return False
+        if self._section_key != other._section_key:
+            return False
+        if self.case_sensitive != other.case_sensitive:
+            return False
+        return True
+
+    def __bool__(self):
+        return bool(self.all_names)
diff --git a/hedtools/hed/models/hed_tag.py b/hedtools/hed/schema/hed_tag.py
similarity index 54%
rename from hedtools/hed/models/hed_tag.py
rename to hedtools/hed/schema/hed_tag.py
index 748e4b80a..0e903b637 100644
--- a/hedtools/hed/models/hed_tag.py
+++ b/hedtools/hed/schema/hed_tag.py
@@ -1,3 +1,5 @@
+from hed.errors import error_reporter
+from hed.errors.error_types import ValidationErrors
 
 
 class HedTag:
@@ -227,10 +229,6 @@ def add_prefix_if_not_present(self, required_prefix):
             checking_prefix = checking_prefix[slash_index:]
         self._tag = required_prefix + self.org_tag
 
-    def remove_prefix_if_present(self, prefix_to_remove):
-        if self.lower().startswith(prefix_to_remove.lower()):
-            self._tag = str(self)[len(prefix_to_remove):]
-
     def lower(self):
         """Convenience function, equivalent to str(self).lower()"""
         return str(self).lower()
@@ -254,9 +252,131 @@ def convert_to_canonical_forms(self, hed_schema, error_handler=None):
         if not hed_schema:
             return []
 
-        long_form, short_index, remainder_index, tag_issues = hed_schema.calculate_canonical_forms(self, error_handler)
+        specific_schema = hed_schema.schema_for_prefix(self.library_prefix)
+        if not specific_schema:
+            validation_issues = error_handler.format_error(ValidationErrors.HED_UNKNOWN_PREFIX, self,
+                                                           self.library_prefix, list(hed_schema.valid_prefixes))
+            return validation_issues
+
+        long_form, short_index, remainder_index, tag_issues = self._calculate_canonical_forms(specific_schema, error_handler)
         self._long_tag = long_form
         self._short_tag_index = short_index
         self._extension_index = remainder_index
 
-        return tag_issues
\ No newline at end of file
+        return tag_issues
+    
+    def _calculate_canonical_forms(self, hed_schema, error_handler=None):
+        """
+        This takes a hed tag(short or long form) and converts it to the long form
+        Works left to right.(mostly relevant for errors)
+        Note: This only does minimal validation
+
+        Parameters
+        ----------
+        hed_schema: HedSchema
+            The hed schema to use to compute forms of this tag.
+        error_handler: ErrorHandler
+            The error handler to use for context.  Will create a default one if not passed.
+        Returns
+        -------
+        long_tag: str
+            The converted long tag
+        short_tag_index: int
+            The position the short tag starts at in long_tag
+        extension_index: int
+            The position the extension or value starts at in the long_tag
+        errors: list
+            a list of errors while converting
+        """
+        if error_handler is None:
+            error_handler = error_reporter.ErrorHandler()
+
+        clean_tag = self.tag.lower()
+        prefix = self.library_prefix
+        clean_tag = clean_tag[len(prefix):]
+        prefix_tag_adj = len(prefix)
+        split_tags = clean_tag.split("/")
+        found_unknown_extension = False
+        found_index_end = 0
+        found_index_start = 0
+        found_long_org_tag = None
+        index_in_tag_end = 0
+        # Iterate over tags left to right keeping track of current index
+        for tag in split_tags:
+            tag_len = len(tag)
+            # Skip slashes
+            if index_in_tag_end != 0:
+                index_in_tag_end += 1
+            index_start = index_in_tag_end
+            index_in_tag_end += tag_len
+
+            # If we already found an unknown tag, it's implicitly an extension.  No known tags can follow it.
+            if not found_unknown_extension:
+                if tag not in hed_schema.short_tag_mapping:
+                    found_unknown_extension = True
+                    if not found_long_org_tag:
+                        error = error_handler.format_error(ValidationErrors.NO_VALID_TAG_FOUND,
+                                                           self, index_in_tag=index_start + prefix_tag_adj,
+                                                           index_in_tag_end=index_in_tag_end + prefix_tag_adj)
+                        return str(self), None, None, error
+                    continue
+
+                long_org_tags = hed_schema.short_tag_mapping[tag]
+                long_org_tag = None
+                if isinstance(long_org_tags, str):
+                    tag_string = long_org_tags.lower()
+
+                    main_hed_portion = clean_tag[:index_in_tag_end]
+                    # Verify the tag has the correct path above it.
+                    if tag_string.endswith(main_hed_portion):
+                        long_org_tag = long_org_tags
+                else:
+                    for org_tag_string in long_org_tags:
+                        tag_string = org_tag_string.lower()
+
+                        main_hed_portion = clean_tag[:index_in_tag_end]
+
+                        if tag_string.endswith(main_hed_portion):
+                            long_org_tag = org_tag_string
+                            break
+                if not long_org_tag:
+                    error = error_handler.format_error(ValidationErrors.INVALID_PARENT_NODE, tag=self,
+                                                       index_in_tag=index_start + prefix_tag_adj,
+                                                       index_in_tag_end=index_in_tag_end + prefix_tag_adj,
+                                                       expected_parent_tag=long_org_tags)
+                    return str(self), None, None, error
+
+                # In hed2 compatible, make sure this is a long form of a tag or throw an invalid base tag error.
+                if hed_schema._has_duplicate_tags:
+                    if not clean_tag.startswith(long_org_tag.lower()):
+                        error = error_handler.format_error(ValidationErrors.NO_VALID_TAG_FOUND,
+                                                           self, index_in_tag=index_start + prefix_tag_adj,
+                                                           index_in_tag_end=index_in_tag_end + prefix_tag_adj)
+                        return str(self), None, None, error
+
+                found_index_start = index_start
+                found_index_end = index_in_tag_end
+                found_long_org_tag = long_org_tag
+            else:
+                # These means we found a known tag in the remainder/extension section, which is an error
+                if tag in hed_schema.short_tag_mapping:
+                    error = error_handler.format_error(ValidationErrors.INVALID_PARENT_NODE, self,
+                                                       index_in_tag=index_start + prefix_tag_adj,
+                                                       index_in_tag_end=index_in_tag_end + prefix_tag_adj,
+                                                       expected_parent_tag=hed_schema.short_tag_mapping[tag])
+                    return str(self), None, None, error
+
+        full_tag_string = str(self)
+        # skip over the tag prefix if present
+        full_tag_string = full_tag_string[len(prefix):]
+        # Finally don't actually adjust the tag if it's hed2 style.
+        if hed_schema._has_duplicate_tags:
+            return full_tag_string, None, found_index_end, []
+
+        remainder = full_tag_string[found_index_end:]
+        long_tag_string = found_long_org_tag + remainder
+
+        # calculate short_tag index into long tag.
+        found_index_start += (len(long_tag_string) - len(full_tag_string))
+        remainder_start_index = found_index_end + (len(long_tag_string) - len(full_tag_string))
+        return prefix + long_tag_string, found_index_start + prefix_tag_adj, remainder_start_index + prefix_tag_adj, {}
diff --git a/hedtools/hed/schema/schema_compliance.py b/hedtools/hed/schema/schema_compliance.py
index 6a06d47d0..d0c0da64e 100644
--- a/hedtools/hed/schema/schema_compliance.py
+++ b/hedtools/hed/schema/schema_compliance.py
@@ -45,7 +45,7 @@ def check_compliance(hed_schema, also_check_for_warnings=True, name=None,
         for hed_term in hed_terms:
             issues_list += validate_schema_term(hed_term, error_handler=error_handler)
 
-        for tag_name, desc in hed_schema.get_desc_dict().items():
+        for tag_name, desc in hed_schema.get_desc_iter():
             issues_list += validate_schema_description(tag_name, desc, error_handler=error_handler)
 
     error_handler.pop_error_context()
diff --git a/hedtools/hed/tools/map_tag_versions.py b/hedtools/hed/tools/map_tag_versions.py
index 531d83bc9..56415c64f 100644
--- a/hedtools/hed/tools/map_tag_versions.py
+++ b/hedtools/hed/tools/map_tag_versions.py
@@ -20,7 +20,7 @@ def validate_single_tag(hed_dict, tag):
     if tag == "YYY" or tag == "XXX":
         return True
 
-    if tag not in hed_dict.dictionaries[HedKey.AllTags]:
+    if tag not in hed_dict.dictionaries[HedSectionKey.AllTags]:
         return False
     return True
 
diff --git a/hedtools/hed/validator/tag_validator.py b/hedtools/hed/validator/tag_validator.py
index d777f38f9..4fbbe4e45 100644
--- a/hedtools/hed/validator/tag_validator.py
+++ b/hedtools/hed/validator/tag_validator.py
@@ -360,7 +360,7 @@ def _validate_value_class_portion(self, original_tag, portion_to_validate):
             return False
 
         # Fallback code for no value classes
-        if not self._hed_schema.has_value_classes:
+        if not self._hed_schema.value_classes:
             unit_class_types = self._hed_schema.get_tag_unit_classes(original_tag)
             for unit_class_type in unit_class_types:
                 valid_func = self.UNIT_CLASS_TYPE_DICT.get(unit_class_type)
@@ -538,9 +538,9 @@ def check_for_required_tags(self, tags):
             A validation issues list. If no issues are found then an empty list is returned.
         """
         validation_issues = []
-        required_tag_prefixes = self._hed_schema.get_all_with_attribute(HedKey.RequiredPrefix)
-        for required_tag_prefix in required_tag_prefixes:
-            capitalized_required_tag_prefix = required_tag_prefixes[required_tag_prefix]
+        required_tag_prefixes = self._hed_schema.get_all_tags_with_attribute(HedKey.RequiredPrefix)
+        for capitalized_required_tag_prefix in required_tag_prefixes:
+            required_tag_prefix = capitalized_required_tag_prefix.lower()
             if sum([x.lower().startswith(required_tag_prefix) for x in tags]) < 1:
                 validation_issues += self._error_handler.format_error(ValidationErrors.HED_REQUIRED_TAG_MISSING,
                                                                       tag_prefix=capitalized_required_tag_prefix)
@@ -559,12 +559,13 @@ def check_multiple_unique_tags_exist(self, original_tag_list):
             A validation issues list. If no issues are found then an empty list is returned.
         """
         validation_issues = []
-        unique_tag_prefixes = self._hed_schema.get_all_with_attribute(HedKey.Unique)
-        for unique_tag_prefix in unique_tag_prefixes:
+        unique_tag_prefixes = self._hed_schema.get_all_tags_with_attribute(HedKey.Unique)
+        for capitalized_unique_tag_prefix in unique_tag_prefixes:
+            unique_tag_prefix = capitalized_unique_tag_prefix.lower()
             unique_tag_prefix_bool_mask = [x.lower().startswith(unique_tag_prefix) for x in original_tag_list]
             if sum(unique_tag_prefix_bool_mask) > 1:
                 validation_issues += self._error_handler.format_error(ValidationErrors.HED_TAG_NOT_UNIQUE,
-                                                                      tag_prefix=unique_tag_prefixes[unique_tag_prefix])
+                                                                      tag_prefix=capitalized_unique_tag_prefix)
         return validation_issues
 
     # ==========================================================================


Test patch:
diff --git a/hedtools/tests/data/hed_pairs/HED8.0.0.mediawiki b/hedtools/tests/data/hed_pairs/HED8.0.0.mediawiki
index e595a8aea..89191b630 100644
--- a/hedtools/tests/data/hed_pairs/HED8.0.0.mediawiki
+++ b/hedtools/tests/data/hed_pairs/HED8.0.0.mediawiki
@@ -79,7 +79,6 @@ This schema is the first official release that includes an xsd and requires unit
 ***	Sit-down <nowiki>[Move from a standing to a sitting position.]</nowiki>
 ***	Sit-up <nowiki>[Move from lying down to a sitting position.]</nowiki>
 ***	Stand-up <nowiki>[Move from a sitting to a standing position.]</nowiki>
-***	Recover-balance <nowiki>[Return to a stable, upright body position.]</nowiki>
 *** Stretch <nowiki>[Straighten or extend body or a part of body to its full length, typically so as to tighten muscles or in order to reach something.]</nowiki>
 *** Shudder <nowiki>[Tremble convulsively, sometimes as a result of fear or revulsion.]</nowiki>
 *** Stumble <nowiki>[Trip or momentarily lose balance and almost fall.]</nowiki>
@@ -571,13 +570,13 @@ This schema is the first official release that includes an xsd and requires unit
 ***** Backward <nowiki>{relatedTag=Forward}[Directed behind or to the rear.]</nowiki>
 ***** Downward <nowiki>{relatedTag=Leftward,relatedTag=Rightward,relatedTag=Upward}[Moving or leading toward a lower place or level.]</nowiki>
 ***** Forward <nowiki>{relatedTag=Backward}[At or near or directed toward the front.]</nowiki>
-***** Horizontally-oriented <nowiki>{related-Tag=Vertically-oriented}[Oriented parallel to or in the plane of the horizon.]</nowiki>
+***** Horizontally-oriented <nowiki>{relatedTag=Vertically-oriented}[Oriented parallel to or in the plane of the horizon.]</nowiki>
 ***** Leftward <nowiki>{relatedTag=Downward,relatedTag=Rightward,relatedTag=Upward}[Going toward or facing the left.]</nowiki>
 ***** Oblique <nowiki>{relatedTag=Rotated}[Slanting or inclined in direction, course, or position that is neither parallel nor perpendicular nor right-angular.]</nowiki>
 ***** Rightward <nowiki>{relatedTag=Downward,relatedTag=Leftward,relatedTag=Upward}[Going toward or situated on the right.]</nowiki>
 ***** Rotated <nowiki>[Positioned offset around an axis or center.]</nowiki>
 ***** Upward <nowiki>{relatedTag=Downward,relatedTag=Leftward,relatedTag=Rightward}[Moving, pointing, or leading to a higher place, point, or level.]</nowiki>
-***** Vertically-oriented <nowiki>{related-Tag=Horizontally-oriented}[Oriented perpendicular to the plane of the horizon.]</nowiki>
+***** Vertically-oriented <nowiki>{relatedTag=Horizontally-oriented}[Oriented perpendicular to the plane of the horizon.]</nowiki>
 *** Physical-value <nowiki>[The value of some physical property of something.] </nowiki>
 **** Weight <nowiki>[The relative mass or the quantity of matter contained by something.]</nowiki>
 ***** <nowiki># {takesValue, valueClass=numericClass, unitClass=weightUnits}</nowiki>
@@ -1100,8 +1099,8 @@ This schema is the first official release that includes an xsd and requires unit
 ** In-front-of <nowiki>[(A (In-front-of B)) means A is in a position just ahead or at the front part of B, potentially partially blocking B from view.]</nowiki>
 ** Left-edge-of <nowiki>{relatedTag=Bottom-edge-of,relatedTag=Right-edge-of,relatedTag=Top-edge-of}[(A (Left-edge-of B)) means A is located on the left side of B on or near the boundary of B.]</nowiki>
 ** Left-side-of <nowiki>{relatedTag=Right-side-of}[(A (Left-side-of B)) means A is located on the left side of B usually as part of B.]</nowiki>
-** Lower-left-of <nowiki>{relatedTag=Lower-right-of,RelatedTag=Upper-left-of,RelatedTag=Upper-right-of}[(A (Lower-left-of B)) means A is situated on the lower left part of B. This relation is often used to specify qualitative information about screen position.]</nowiki>
-** Lower-right-of <nowiki>{relatedTag=Upper-left-of,RelatedTag=Upper-left-of,RelatedTag=Lower-right-of}[(A (Lower-right-of B)) means A is situated on the lower right part of B. This relation is often used to specify qualitative information about screen position.]</nowiki>
+** Lower-left-of <nowiki>{relatedTag=Lower-right-of,relatedTag=Upper-left-of,relatedTag=Upper-right-of}[(A (Lower-left-of B)) means A is situated on the lower left part of B. This relation is often used to specify qualitative information about screen position.]</nowiki>
+** Lower-right-of <nowiki>{relatedTag=Lower-left-of,relatedTag=Upper-left-of,relatedTag=Upper-right-of}[(A (Lower-right-of B)) means A is situated on the lower right part of B. This relation is often used to specify qualitative information about screen position.]</nowiki>
 ** Outside-of <nowiki>[(A (Outside-of B)) means A is located in the space around but not including B.]</nowiki>
 ** Over <nowiki>[(A (over B)) means A above is above B so as to cover or protect or A extends over the a general area as from a from a vantage point.]</nowiki>
 ** Right-edge-of <nowiki>{relatedTag=Bottom-edge-of,relatedTag=Left-edge-of,relatedTag=Top-edge-of}[(A (Right-edge-of B)) means A is located on the right side of B on or near the boundary of B.]</nowiki>
@@ -1111,9 +1110,8 @@ This schema is the first official release that includes an xsd and requires unit
 ** Top-edge-of <nowiki>{relatedTag=Left-edge-of,relatedTag=Right-edge-of,relatedTag=Bottom-edge-of}[(A (Top-edge-of B)) means A is on the uppermost part or or near the boundary of B.]</nowiki>
 ** Top-of <nowiki>[(A (Top-of B)) means A is on the uppermost part, side, or surface of B.]</nowiki>
 ** Underneath <nowiki>[(A (Underneath B)) means A is situated directly below and may be concealed by B.]</nowiki>
-** Upper-left-of <nowiki>{relatedTag=Lower-left-of,RelatedTag=Upper-left-of,RelatedTag=Upper-right-of}[(A (Upper-left-of B)) means A is situated on the upper left part of B. This relation is often used to specify qualitative information about screen position.]</nowiki>
-** Upper-right-of <nowiki>{relatedTag=Lower-left-of,RelatedTag=Upper-left-of,RelatedTag=Lower-right-of}[(A (Upper-right-of B)) means A is situated on the upper right part of B. This relation is often used to specify qualitative information about screen position.]</nowiki>
-** Underneath <nowiki>[(A (Underneath B)) means A is situated directly below and may be concealed by B.]</nowiki>
+** Upper-left-of <nowiki>{relatedTag=Lower-left-of,relatedTag=Upper-right-of,relatedTag=Lower-right-of}[(A (Upper-left-of B)) means A is situated on the upper left part of B. This relation is often used to specify qualitative information about screen position.]</nowiki>
+** Upper-right-of <nowiki>{relatedTag=Lower-left-of,relatedTag=Upper-left-of,relatedTag=Lower-right-of}[(A (Upper-right-of B)) means A is situated on the upper right part of B. This relation is often used to specify qualitative information about screen position.]</nowiki>
 ** Within <nowiki>[(A (Within B)) means A is on the inside of or contained in B.]</nowiki>
 * Temporal-relation <nowiki>[Any relationship which includes a temporal or time-based component.]</nowiki>
 ** After <nowiki>[(A After B) means A happens at a time subsequent to a reference time related to B.]</nowiki>
diff --git a/hedtools/tests/data/hed_pairs/HED8.0.0.xml b/hedtools/tests/data/hed_pairs/HED8.0.0.xml
index 203e9960d..d62ec5f8d 100644
--- a/hedtools/tests/data/hed_pairs/HED8.0.0.xml
+++ b/hedtools/tests/data/hed_pairs/HED8.0.0.xml
@@ -2674,6 +2674,10 @@
                      <node>
                         <name>Horizontally-oriented</name>
                         <description>Oriented parallel to or in the plane of the horizon.</description>
+                        <attribute>
+                           <name>relatedTag</name>
+                           <value>Vertically-oriented</value>
+                        </attribute>
                      </node>
                      <node>
                         <name>Leftward</name>
@@ -2720,6 +2724,10 @@
                      <node>
                         <name>Vertically-oriented</name>
                         <description>Oriented perpendicular to the plane of the horizon.</description>
+                        <attribute>
+                           <name>relatedTag</name>
+                           <value>Horizontally-oriented</value>
+                        </attribute>
                      </node>
                   </node>
                </node>
@@ -5587,6 +5595,8 @@
                <attribute>
                   <name>relatedTag</name>
                   <value>Lower-right-of</value>
+                  <value>Upper-left-of</value>
+                  <value>Upper-right-of</value>
                </attribute>
             </node>
             <node>
@@ -5594,7 +5604,9 @@
                <description>(A (Lower-right-of B)) means A is situated on the lower right part of B. This relation is often used to specify qualitative information about screen position.</description>
                <attribute>
                   <name>relatedTag</name>
+                  <value>Lower-left-of</value>
                   <value>Upper-left-of</value>
+                  <value>Upper-right-of</value>
                </attribute>
             </node>
             <node>
@@ -5655,6 +5667,8 @@
                <attribute>
                   <name>relatedTag</name>
                   <value>Lower-left-of</value>
+                  <value>Upper-right-of</value>
+                  <value>Lower-right-of</value>
                </attribute>
             </node>
             <node>
@@ -5663,6 +5677,8 @@
                <attribute>
                   <name>relatedTag</name>
                   <value>Lower-left-of</value>
+                  <value>Upper-left-of</value>
+                  <value>Lower-right-of</value>
                </attribute>
             </node>
             <node>
diff --git a/hedtools/tests/data/hed_pairs/unknown_attribute.mediawiki b/hedtools/tests/data/hed_pairs/unknown_attribute.mediawiki
new file mode 100644
index 000000000..8906009bf
--- /dev/null
+++ b/hedtools/tests/data/hed_pairs/unknown_attribute.mediawiki
@@ -0,0 +1,1194 @@
+HED version:8.0.0-beta.1
+
+!# start schema
+
+'''Event''' <nowiki>{unknownAttribute, suggestedTag=Task-property}[Something that happens at a given place and time. Elements of this subtree designate the general category in which an event falls.]</nowiki>
+* Sensory-event <nowiki>{suggestedTag=Task-event-role}[Something perceivable by an agent. An event meant to be an experimental stimulus should also be tagged with Task-event-role/Experiment-stimulus.]</nowiki>
+* Agent-action <nowiki>{suggestedTag=Task-role}[Any action engaged in by an agent. An event that is a participant response to an experiment stimulus should also be tagged with Agent-property/Agent-task-role/Participant-response.]</nowiki>
+* Data-feature <nowiki>{suggestedTag=Data-property}[An event derived from the data itself or possibly inserted in a post-hoc fashion. Examples are markers for interictal spikes or alpha bursts.]</nowiki>
+* Experiment-control <nowiki>[An event pertaining to the control of the experiment during its operation.]</nowiki>
+* Experiment-procedure <nowiki>[An event indicating an experimental procedure as in doing a saliva swab on a participant during the experiment or administering a survey.]</nowiki>
+* Experiment-structure <nowiki>[An event specifying the structure of the experiment.]</nowiki>
+* Measurement-event <nowiki>{suggestedTag=Data-property}[Something that is measured or detected by an instrument such as a patch-clamp or a probe.]</nowiki>
+
+'''Agent''' <nowiki>{suggestedTag=Agent-property}[Something in the experiment that takes an active role or produces an effect. The role or effect may be implicit. Being alive or performing an activity such as a computation may qualify something to be an agent. An agent may also be something that simulates something else.]</nowiki>
+* Animal-agent <nowiki>[An animal that is present and acting to produce an effect.]</nowiki>
+* Avatar-agent <nowiki>[An agent associated with an icon or figure representing a particular person in venues such as video games or internet forums.]</nowiki>
+* Computational-agent <nowiki>[An agent whose decisions about its actions can be explained in terms of computation.]</nowiki>
+* Controller-agent <nowiki>[An outside controller such as the experimental control software or hardware.]</nowiki>
+* Human-agent <nowiki>[A person who takes an active role or produces a specified effect.]</nowiki>
+* Robotic-agent <nowiki>[An agent that is a mechanical device capable of performing a variety of often complex tasks on command or by being programmed in advance.]</nowiki>
+* Software-agent <nowiki>[A computer program that acts for a user or other program in a relationship of agency.]</nowiki>
+
+'''Action''' <nowiki>{extensionAllowed}[Do something.]</nowiki>
+* Move <nowiki>[Go in a specified direction or manner; change position.]</nowiki>
+** Breathe <nowiki>[Inhale and exhale air into the body during respiration.]</nowiki>
+*** Cough <nowiki>[Suddenly and audibly expel air from the lungs through a partially closed glottis, preceded by inhalation.]</nowiki>
+*** Exhale <nowiki>[Blow out or expel breath.]</nowiki>
+*** Hiccup <nowiki>[Involuntarily spasm  the diaphragm and respiratory organs, with a sudden closure of the glottis and a characteristic sound like that of a cough.]</nowiki>
+*** Hold-breath <nowiki>[Interrupt normal breathing by ceasing to inhale or exhale.]</nowiki>
+*** Inhale <nowiki>[Draw in with the breath through the nose or mouth.]</nowiki>
+*** Sneeze <nowiki>[Suddenly and violently expel breath through the nose and mouth.]</nowiki>
+*** Sniffle <nowiki>[Inhale through nose slightly or repeatedly, typically because of a cold or fit of crying.]</nowiki>
+** Move-full-body <nowiki>[Move entire body.]</nowiki>
+*** Bend <nowiki>[Move body in a bowed or curved manner.]</nowiki>
+*** Dance <nowiki>[Perform a purposefully selected sequences of human movement often with aesthetic or symbolic value. Move rhythmically to music, typically following a set sequence of steps.]</nowiki>
+*** Fall-down <nowiki>[Lose balance and collapse.]</nowiki>
+*** Flex <nowiki>[Cause a muscle to stand out by contracting or tensing it. Bend a limb or joint.]</nowiki>
+*** Jerk <nowiki>[Make a quick, sharp, sudden movement.]</nowiki>
+***	Recover-balance <nowiki>[Return to a stable, upright body position.]</nowiki>
+*** Stretch <nowiki>[Straighten or extend body or a part of body to its full length, typically so as to tighten muscles or in order to reach something.]</nowiki>
+*** Shudder <nowiki>[Tremble convulsively, sometimes as a result of fear or revulsion.]</nowiki>
+*** Stumble <nowiki>[Trip or momentarily lose balance and almost fall.]</nowiki>
+*** Turn <nowiki>[Change or cause to change direction.]</nowiki>
+** Move-body-part <nowiki>[Move one part of a body.]</nowiki>
+*** Move-head <nowiki>[Move head.]</nowiki>
+**** Move-eyes <nowiki>[Move eyes.]</nowiki>
+***** Blink <nowiki>[Shut and open the eyes quickly.]</nowiki>
+***** Close-eyes <nowiki>[Lower and keep eyelids in a closed position.]</nowiki>
+***** Fixate <nowiki>[Direct eyes to a specific point or target.]</nowiki>
+***** Inhibit-blinks <nowiki>[Purposely prevent blinking.]</nowiki>
+***** Lift-eyebrows <nowiki>[Move eyebrows upward.]</nowiki>
+***** Open-eyes <nowiki>[Raise eyelids to expose pupil.]</nowiki>
+***** Saccade <nowiki>[Move eyes rapidly between fixation points.]</nowiki>
+***** Stare <nowiki>[Look fixedly or vacantly at someone or something with eyes wide open.]</nowiki>
+***** Widen-eyes <nowiki>[Open eyes and possibly with eyebrows lifted especially to express surprise or fear.]</nowiki>
+**** Move-jaw <nowiki>[Move lower part of the jaw and head.]</nowiki>
+***** Bite <nowiki>[Seize with teeth or jaws an object or organism so as to grip or break the surface covering.]</nowiki>
+***** Burp <nowiki>[Noisily release air from the stomach through the mouth; belch.]</nowiki>
+***** Chew <nowiki>[Repeatedly grinding, tearing, and or crushing with teeth or jaws.]</nowiki>
+***** Clear-throat <nowiki>[Cough slightly so as to speak more clearly, attract attention, or to express hesitancy before saying something awkward.]</nowiki>
+***** Frown <nowiki>[Express disapproval, displeasure, or concentration, typically by turning down the corners of the mouth.]</nowiki>
+***** Gurgle <nowiki>[Make a hollow bubbling sound like that made by water running out of a bottle.]</nowiki>
+***** Smile <nowiki>[Form facial features into a pleased, kind, or amused expression, typically with the corners of the mouth turned up and the front teeth exposed.]</nowiki>
+***** Swallow <nowiki>[Cause or allow something, especially food or drink to pass down the throat.]</nowiki>
+***** Yawn <nowiki>[Take a deep involuntary  inhalation with the mouth open often as a sign of drowsiness or boredom.]</nowiki>
+**** Nod-head <nowiki>[Tilt head in alternating up and down arcs along the sagittal plane. It is most commonly, but not universally, used to indicate agreement, acceptance, or acknowledgement.]</nowiki>
+**** Shake-head <nowiki>[Turn head from side to side as a way of showing disagreement or refusal.]</nowiki>
+*** Move-arm-hand <nowiki>[Move some part of arm, shoulder and or arm.]</nowiki>
+**** Clap-hands <nowiki>[Strike the palms of against one another resoundingly, and usually repeatedly, especially to express approval.]</nowiki>
+**** Drop <nowiki>[Let or cause to fall vertically.]</nowiki>
+**** Grab <nowiki>[Seize suddenly or quickly; snatch; clutch.]</nowiki>
+**** Grasp <nowiki>[Seize and hold firmly.]</nowiki>
+**** Hold-down <nowiki>[Prevent someone or something from moving by holding them firmly.]</nowiki>
+**** Lift <nowiki>[Raising something to higher position.]</nowiki>
+**** Make-fist <nowiki>[Close hand tightly with the fingers bent against the palm.]</nowiki>
+**** Point  <nowiki>[Draw attention to something by extending a finger or arm.]</nowiki>
+**** Press <nowiki>{relatedTag=Push}[Apply pressure to something to flatten, shape, smooth or depress it. This action tag should be used to indicate key presses and mouse clicks.]</nowiki>
+**** Push <nowiki>{relatedTag=Press}[Apply force in order to move something away. Use Press to indicate a key press or mouse click.]</nowiki>
+**** Reach <nowiki>[Stretch out your arm in order to get or touch something.]</nowiki>
+**** Release <nowiki>[Make available; set free.]</nowiki>
+**** Retract <nowiki>[Draw or pull back.]</nowiki>
+**** Scratch <nowiki>[Drag claws or nails over a surface or on skin.]</nowiki>
+**** Snap-fingers <nowiki>[Make a noise by pushing second finger hard against thumb and then releasing it suddenly so that it hits the base of the thumb.]</nowiki>
+**** Touch <nowiki>[Come into or be in contact with.]</nowiki>
+*** Move-leg-foot <nowiki>[Move some part of leg or foot.]</nowiki>
+**** Curl-toes <nowiki>[Bend toes sometimes to grip.]</nowiki>
+**** Jog <nowiki>[Run at a trot to exercise.]</nowiki>
+**** Jump <nowiki>[Move off the ground or other surface through sudden muscular effort in the legs.]</nowiki>
+**** Kick <nowiki>[Strike out or flail with the foot or feet.  Strike using the leg, in unison usually with an area of the knee or lower using the foot.]</nowiki>
+**** Pedal <nowiki>[Move by working the pedals of a bicycle or other machine.]</nowiki>
+**** Run <nowiki>[Travel on foot at a fast pace.]</nowiki>
+**** Step <nowiki>[Put one leg in front of the other and shift weight onto it.]</nowiki>
+***** Heel-strike <nowiki>[Strike the ground with the heel during a step.]</nowiki>
+***** Toe-off <nowiki>[Push with toe as part of a stride.]</nowiki>
+**** Trot <nowiki>[Run at a moderate pace, typically with short steps.]</nowiki>
+**** Walk <nowiki>[Move at a regular pace by lifting and setting down each foot in turn never having both feet off the ground at once.]</nowiki>
+* Communicate <nowiki>[Convey knowledge of or information about something.]</nowiki>
+** Communicate-vocally <nowiki>[Communicate using mouth or vocal cords.]</nowiki>
+*** Cry <nowiki>[Shed tears associated with emotions, usually sadness but also joy or frustration.]</nowiki>
+*** Groan <nowiki>[Make a deep inarticulate sound in response to pain or despair.]</nowiki>
+*** Gulp  <nowiki>[Swallow quickly or in large mouthfuls, often audibly, sometimes to indicate apprehension.]</nowiki>
+***	Laugh <nowiki>[Make the spontaneous sounds and movements of the face and body that are the instinctive expressions of lively amusement and sometimes also of contempt or derision.]</nowiki>
+*** Scream <nowiki>[Make loud, vociferous cries or yells to express pain, excitement, or fear.]</nowiki>
+*** Sigh <nowiki>[Emit a long, deep, audible breath expressing sadness, relief, tiredness, or a similar feeling.]</nowiki>
+*** Speak <nowiki>[Communicate using spoken language.]</nowiki>
+** Gesture <nowiki>[Communicate nonverbally using visible bodily actions, either in place of speech or together and in parallel with spoken words. Gestures include movement of the hands, face, or other parts of the body.]</nowiki>
+***	Index-up <nowiki>[Raise with fist clenched in triumph or affirmation.]
+***	Pump-fist <nowiki>[Raise with fist clenched in triumph or affirmation.]</nowiki>
+***	Spread-hands <nowiki>[Spread hands apart to indicate ignorance.]</nowiki>
+***	Shhh <nowiki>[Place finger over lips and possibly uttering the syllable shhh to indicate the need to be quiet.]</nowiki>
+***	Shrug <nowiki>[Lift shoulders up towards head to indicate a lack of knowledge about a particular topic.]</nowiki>
+*** Thumbs-down <nowiki>[Extend the thumb downward to indicate disapproval.]</nowiki>
+***	Thumb-up <nowiki>[Extend the thumb upward to indicate approval.]</nowiki>
+***	Wave <nowiki>[Raise hand and move left and right, as a greeting or sign of departure.]</nowiki>
+** Communicate-musically <nowiki>[Communicate using music.]</nowiki>
+*** Hum <nowiki>[Make a low, steady continuous sound like that of a bee. Sing with the lips closed and without uttering speech.]</nowiki>
+*** Sing <nowiki>[Produce musical tones by means of the voice.]</nowiki>
+*** Vocalize <nowiki>[Utter vocal sounds.]</nowiki>
+*** Whistle <nowiki>[Produce a shrill clear sound by forcing breath out or air in through the puckered lips.]</nowiki>
+* Perform <nowiki>[Carry out or accomplish an action, task, or function.]</nowiki>
+** Collide <nowiki>[Hit with force when moving.]</nowiki>
+** Halt <nowiki>[Bring or come to an abrupt stop.]</nowiki>
+** Modify <nowiki>[Change something.]</nowiki>
+** Operate <nowiki>[Control the functioning of a machine, process, or system.]</nowiki>
+** Play  <nowiki>[Engage in activity for enjoyment and recreation rather than a serious or practical purpose.]</nowiki>
+** Read <nowiki>[Interpret something that is written or printed.]</nowki>
+** Repeat <nowiki>[Make, do, or perform again.]</nowiki>
+** Rest <nowiki>[Be inactive in order to regain strength, health, or energy.]</nowiki>
+** Write <nowiki>[Communicate or express by means of letters or symbols written or imprinted on a surface.]</nowiki>
+* Think <nowiki>[Direct the mind toward someone or something or use the mind actively to form connected ideas.]</nowiki>
+** Allow <nowiki>[Allow access to something such as allowing a car to pass.]</nowiki>
+** Attend-to <nowiki>[Focus mental experience on specific targets.]</nowiki>
+** Count <nowiki>[Tally items either silently or aloud.]</nowiki>
+** Deny <nowiki> [Refuse to give or grant something requested or desired by someone.]</nowiki>
+** Detect <nowiki>[Discover or identify the presence or existence of something.]</nowiki>
+** Discriminate <nowiki>[Recognize a distinction.]</nowiki>
+** Encode <nowiki>[Convert information or an instruction into a particular form.]</nowiki>
+** Evade <nowiki>[Escape or avoid, especially by cleverness or trickery.]</nowiki>
+** Generate <nowiki>[Cause something, especially an emotion or situation to arise or come about.]</nowiki>
+** Identify <nowiki>[Establish or indicate who or what someone or something is.]</nowiki>
+** Imagine <nowiki>[Form a mental image or concept of something.]</nowiki>
+** Judge <nowiki>[Evaluate evidence to make a decision or form a belief.]</nowiki>
+** Learn <nowiki>[Adaptively change behavior as the result of experience.]</nowiki>
+** Memorize <nowiki>[Adaptively change behavior as the result of experience.]</nowiki>
+** Perceive <nowiki>[Produce an internal, conscious image through stimulating a sensory system.]</nowiki>
+*** Listen <nowiki>[Give attention to a sound.]</nowiki>
+*** Look <nowiki>[Direct gaze toward someone or something or in a specified direction.]</nowiki>
+*** Smell <nowiki>[Inhale in order to ascertain an odor or scent.]</nowiki>
+*** Taste <nowiki>[Sense of flavor perceived in the mouth and throat on contact with a substance.]</nowiki>
+** Plan <nowiki>[Think about the activities required to achieve a desired goal. ]</nowiki>
+** Predict <nowiki>[Say or estimate that something will happen or will be a consequence of something without having exact informaton.]</nowiki>
+** Recognize <nowiki>[Identify someone or something from having encountered them before.]</nowiki>
+** Respond <nowiki>[React to something such as a treatment or a stimulus.]</nowiki>
+** Recall <nowiki>[Remember information by mental effort.]</nowiki>
+** Switch-attention <nowiki>[Transfer attention from one focus to another.]</nowiki>
+** Track <nowiki>[Follow a person, animal, or object through space or time.]</nowiki>
+
+'''Item''' <nowiki>{extensionAllowed}[An independently existing thing (living or nonliving).]</nowiki>
+* Biological-item <nowiki>[An entity that is biological, that is related to living organisms.]</nowiki>
+** Organism <nowiki>[A living entity, more specifically a biological entity that consists of one or more cells and is capable of genomic replication (independently or not).]</nowiki>
+*** Animal <nowiki>[A living organism that has membranous cell walls, requires oxygen and organic foods, and is capable of voluntary movement.]</nowiki>
+**** Human <nowiki>[The bipedal primate mammal Homo sapiens.]</nowiki>
+*** Plant <nowiki>[Any living organism that typically synthesizes its food from inorganic substances and possesses cellulose cell walls.]<nowiki>
+** Anatomical-item <nowiki>[A biological structure, system, fluid or other substance excluding single molecular entities.]</nowiki>
+*** Body-part <nowiki>[Any part of an organism.]</nowiki>
+**** Head <nowiki>[The upper part of the human body, or the front or upper part of the body of an animal, typically separated from the rest of the body by a neck, and containing the brain, mouth, and sense organs.]</nowiki>
+***** Hair <nowiki>[The filamentous outgrowth of the epidermis.]</nowiki>
+***** Ear <nowiki>[A sense organ needed for the detection of sound and for establishing balance.]</nowiki>
+***** Face <nowiki>[The anterior portion of the head extending from the forehead to the chin and ear to ear. The facial structures contain the eyes, nose and mouth, cheeks and jaws.]</nowiki>
+****** Cheek <nowiki>[The fleshy part of the face bounded by the eyes, nose, ear, and jaw line.]</nowiki>
+****** Chin <nowiki>[The part of the face below the lower lip and including the protruding part of the lower jaw.]</nowiki>
+****** Eye <nowiki>[The organ of sight or vision.]</nowiki>
+****** Eyebrow <nowiki>[The arched strip of hair on the bony ridge above each eye socket.]</nowiki>
+****** Forehead <nowiki>[The part of the face between the eyebrows and the normal hairline.]</nowiki>
+****** Lip <nowiki>[Fleshy fold which surrounds the opening of the mouth.]</nowiki>
+****** Nose <nowiki>[A structure of special sense serving as an organ of the sense of smell and as an entrance to the respiratory tract.]</nowiki>
+****** Mouth <nowiki>[The proximal portion of the digestive tract, containing the oral cavity and bounded by the oral opening.]</nowiki>
+****** Teeth <nowiki>[The hard bonelike structures in the jaws. A collection of teeth arranged in some pattern in the mouth or other part of the body.]</nowiki>
+**** Arm <nowiki>[The portion of the upper extremity between the shoulder and the elbow. For clinical purposes this term is also used to refer to the whole superior limb.]</nowiki>
+***** Elbow <nowiki>[A type of hinge joint located between the forearm and upper arm.]</nowiki>
+***** Hand <nowiki>[The distal portion of the upper extremity. It consists of the carpus, metacarpus, and digits.]</nowiki>
+****** Finger <nowiki>[Any of the digits of the hand.]</nowiki>
+******* Index-finger <nowiki>[The second finger from the radial side of the hand, next to the thumb.]</nowiki>
+******* Little-finger <nowiki>[The fifth and smallest finger from the radial side of the hand.]</nowiki>
+******* Middle-finger <nowiki>[The middle or third finger from the radial side of the hand.]</nowiki>
+******* Ring-finger <nowiki>[The fourth finger from the radial side of the hand.]</nowiki>
+******* Thumb <nowiki>[The thick and short hand digit which is next to the index finger in humans.]</nowiki>
+***** Wrist <nowiki>[A joint between the distal end of the radius and the proximal row of carpal bones.]</nowiki>
+**** Leg <nowiki>[The portion of the lower extremity between the knee and the ankle. For clinical purposes this term is also used to refer to the whole inferior limb.]</nowiki>
+***** Ankle <nowiki>[A gliding joint between the distal ends of the tibia and fibula and the proximal end of the talus.]</nowiki>
+***** Foot <nowiki>[The structure found below the ankle joint required for locomotion.]</nowiki>
+****** Toe <nowiki>[One of the terminal digits of the foot.]</nowiki>
+***** Knee <nowiki>[A joint connecting the lower part of the femur with the upper part of the tibia.]</nowiki>
+**** Torso <nowiki>[The body excluding the head and neck and limbs.]</nowiki>
+***** Chest <nowiki>[The anterior side of the thorax from the neck to the abdomen.]</nowiki>
+***** Hip <nowiki>[The lateral prominence of the pelvis from the waist to the thigh.]</nowiki>
+***** Waist <nowiki>[The abdominal circumference at the navel.]</nowiki>
+*** Organ <nowiki>[A unique macroscopic anatomic structure that is composed of various tissues and performs specific functions as for example heart or liver.]</nowiki>
+*** Tissue <nowiki>[An anatomical structure consisting of similarly specialized cells and intercellular matrix, aggregated according to genetically determined spatial relationships, performing a specific function.]</nowiki>
+* Language-item <nowiki>{suggestedTag=Attribute/Sensory}[An entity related to a systematic means of communicating by the use of sounds, symbols, or gestures.]</nowiki>
+** Character <nowiki>[A hieroglyphic character or symbol; a pictograph.]</nowiki>
+** Glyph <nowiki>[A hieroglyphic character or symbol; a pictograph.]</nowiki>
+** Nonword <nowiki>[A group of letters or speech sounds that looks or sounds like a word but that is not accepted as such by native speakers.]</nowiki>
+** Phoneme <nowiki>[A speech sound that is distinguished by the speakers of a particular language.]</nowiki>
+** Phrase <nowiki>[A phrase is a group of words functioning as a single unit in the syntax of a sentence.]</nowiki>
+** Sentence <nowiki>[A set of words that is complete in itself, conveying a statement, question, exclamation, or command and typically containing an explicit or implied subject and a predicate containing a finite verb.]</nowiki>
+** Syllable <nowiki>[A unit of spoken language larger than a phoneme.]</nowiki>
+** Textblock <nowiki>[A block of text.]</nowiki>
+** Word <nowiki>[A word is the smallest free form (an item that may be expressed in isolation with semantic or pragmatic content) in a language.]</nowiki>
+* Object <nowiki>{suggestedTag=Attribute/Sensory}[Something perceptible by one or more of the senses, especially by vision or touch; a material thing.]</nowiki>
+** Geometric-object <nowiki>[An object or a representation that has structure and topology in space.]</nowiki>
+*** Pattern <nowiki>[An arrangement of objects, facts, behaviors, or other things which have scientific, mathematical, geometric, statistical, or other meaning.]</nowiki>
+**** Dots <nowiki>[A small round mark or spot.]</nowiki>
+**** Led-pattern <nowiki>[A pattern created by lighting selected members of a fixed light emitting diode array.]</nowiki>
+*** 2D-shape <nowiki>[A planar, two-dimensional shape.]</nowiki>
+**** Clockface <nowiki>[The dial face of a clock. A location identifier based on clockface numbering or anatomic subregion.]</nowiki>
+**** Cross <nowiki>[A figure or mark formed by two intersecting lines crossing at their midpoints.]</nowiki>
+**** Dash <nowiki>[A horizontal stroke in writing or printing to mark a pause or break in sense or to represent omitted letters or words.]</nowiki>
+**** Ellipse <nowiki>[A closed plane curve resulting from the intersection of a circular cone and a plane cutting completely through it, especially a plane not parallel to the base.]</nowiki>
+***** Circle <nowiki>[A ring-shaped structure with every point equidistant from the center.]</nowiki>
+**** Rectangle <nowiki>[A parallelogram with four right angles.]</nowiki>
+***** Square <nowiki>[A square is a special rectangle with four equal sides.]</nowiki>
+**** Single-point <nowiki>[A point is a geometric entity that is located in a zero-dimensional spatial region and whose position is defined by its coordinates in some coordinate system.]</nowiki>
+**** Star <nowiki>[A conventional or stylized representation of a star, typically one having five or more points.]</nowiki>
+**** Triangle <nowiki>[A three-sided polygon.]</nowiki>
+*** 3D-shape <nowiki>[A geometric three-dimensional shape.]</nowiki>
+**** Box <nowiki>[A square or rectangular vessel, usually made of cardboard or plastic.]</nowiki>
+***** Cube <nowiki>[A solid or semi-solid in the shape of a three dimensional square.]</nowiki>
+**** Cone <nowiki>[A shape whose base is a circle and whose sides taper up to a point.]</nowiki>
+**** Cylinder <nowiki>[A surface formed by circles of a given radius that are contained in a plane perpendicular to a given axis, whose centers align on the axis.]</nowiki>
+**** Ellipsoid <nowiki>[A closed plane curve resulting from the intersection of a circular cone and a plane cutting completely through it, especially a plane not parallel to the base. ]</nowiki>
+***** Sphere <nowiki>[A solid or hollow three-dimensional object bounded by a closed surface such that every point on the surface is equidistant from the center.]</nowiki>
+**** Pyramid <nowiki>[A polyhedron of which one face is a polygon of any number of sides, and the other faces are triangles with a common vertex.]</nowiki>
+** Ingestible-object <nowiki>[Something that can be taken into the body by the mouth for digestion or absorption.]</nowiki>
+** Man-made-object <nowiki>[Something constructed by human means.]</nowiki>
+*** Building <nowiki>[A structure that has a roof and walls and stands more or less permanently in one place.]</nowiki>
+**** Room <nowiki>[An area within a building enclosed by walls and floor and ceiling.]</nowiki>
+**** Roof <nowiki>[A roof is the covering on the uppermost part of a building which provides protection from animals and weather, notably rain, but also heat, wind and sunlight.]</nowiki>
+**** Entrance <nowiki>[The means or place of entry.]</nowiki>
+**** Attic <nowiki>[A room or a space immediately below the roof of a building.]</nowiki>
+**** Basement <nowiki>[The part of a building that is wholly or partly below ground level.]</nowiki>
+*** Clothing <nowiki>[A covering designed to be worn on the body.]</nowiki>
+*** Device <nowiki>[An object contrived for a specific purpose.]</nowiki>
+**** Assistive-device <nowiki>[A device that help an individual accomplish a task.]</nowiki>
+***** Glasses <nowiki>[Frames with lenses worn in front of the eye for vision correction, eye protection, or protection from UV rays.]</nowiki>
+***** Writing-device <nowiki>[A device used for writing.]</nowiki>
+****** Pen <nowiki>[A common writing instrument used to apply ink to a surface, usually paper, for writing or drawing.]</nowiki>
+****** Pencil <nowiki>[An implement for writing or drawing, constructed of a narrow, solid pigment core in a protective casing that prevents the core from being broken or marking the hand.]</nowiki>
+**** Computing-device <nowiki>[An electronic device which take inputs, process the inputs and then calculate results from the inputs.]</nowiki>
+**** Engine <nowiki>[A motor is a machine designed to convert one or more forms of energy into mechanical energy.]</nowiki>
+**** IO-device <nowiki>[Hardware used by a human (or other system) to communicate with a computer.]</nowiki>
+***** Input-device <nowiki>[A piece of equipment used to provide data and control signals to an information processing system such as a computer or information appliance.]</nowiki>
+****** Computer-mouse <nowiki>[A hand-held pointing device that detects two-dimensional motion relative to a surface.]</nowiki>
+******* Mouse-button <nowiki>[An electric switch on a computer mouse which can be pressed or clicked to select or interact with an element of a graphical user interface.]</nowiki>
+******* Scroll-wheel <nowiki>[A scroll wheel or mouse wheel is a wheel used for scrolling made of hard plastic with a rubbery surface usually located between the left and right mouse buttons and is positioned perpendicular to the mouse surface.]</nowiki>
+****** Joystick <nowiki>[A control device that uses a movable handle to create two-axis input for a computer device.]</nowiki>
+****** Keyboard <nowiki>[A device consisting of mechanical keys that are pressed to create input to a computer.]</nowiki>
+******* Keyboard-key <nowiki>[A button on a keyboard usually representing letters, numbers, functions, or symbols.]</nowiki>
+******** <nowiki># {takesValue}[Value of a keyboard key.]</nowiki>
+****** Keypad <nowiki>[A device consisting of keys, usually in a block arrangement, that provides limited input to a system.]</nowiki>
+******* Keypad-key <nowiki>[A key on a separate section of a computer keyboard that groups together numeric keys and those for mathematical or other special functions in an arrangement like that of a calculator.]</nowiki>
+******** <nowiki># {takesValue}[Value of keypad key.]</nowiki>
+****** Microphone <nowiki>[A device designed to convert sound to an electrical signal.]</nowiki>
+****** Push-button <nowiki>[A switch designed to be operated by pressing a button.]</nowiki>
+***** Network-device <nowiki>[A collection of two or more computers and/or associated devices that are linked together with communications equipment.]</nowiki>
+***** Output-device <nowiki>[Any piece of computer hardware equipment which converts information into human understandable form.]</nowiki>
+****** Display-device <nowiki>[An output device for presentation of information in visual or tactile form the latter used for example in tactile electronic displays for blind people.]</nowiki>
+******* Head-mounted-display <nowiki>[An instrument that functions as a display device, worn on the head or as part of a helmet, that has a small display optic in front of one (monocular HMD) or each eye (binocular HMD).]</nowiki>
+******* LED-display <nowiki>[A LED display is a flat panel display that uses an array of light-emitting diodes as pixels for a video display.]</nowiki>
+******* Screen <nowiki>[An electronic device designed as a display or a physical device designed to be a protective meshwork.]</nowiki>
+******** Computer-window <nowiki>[A part of a computer screen that contains a display different from the rest of the screen. A window is a graphical control element consisting of a visual area containing some of the graphical user interface of the program it belongs to and is framed by a window decoration.]</nowiki>
+****** Auditory-device <nowiki>[A device designed to produce sound.]</nowiki>
+******* Headphones <nowiki>[An instrument that consists of a pair of small loudspeakers, or less commonly a single speaker, held close to ears and connected to a signal source such as an audio amplifier, radio, CD player or portable media player.]</nowiki>
+******* Speaker-device <nowiki>[A device designed to convert electrical signals to sounds that can be heard.]</nowiki>
+***** Recording-device <nowiki>[A device that copies information in a signal into a persistent information bearer.]</nowiki>
+****** EEG-recording <nowiki>[A recording of electric currents developed in the brain by means of electrodes applied to the scalp, to the surface of the brain, or placed within the substance of the brain.]</nowiki>
+****** File-recording <nowiki>[A file is an information-bearing object that contains a physical embodiment of some information using a particular character encoding.]</nowiki>
+****** MEG-recording <nowiki>[The measurement of the magnetic fields produced by electrical activity in the brain, usually conducted externally, using extremely sensitive devices.]</nowiki>
+****** Motion-capture <nowiki>[A recording of the movement of objects or people.]</nowiki>
+****** Tape-recording <nowiki>[A sound recording and reproduction usually using magnetic tape for storage that can be saved and played back.]</nowiki>
+***** Touchscreen <nowiki>[A control component that operates an electronic device by pressing the display on the screen.]</nowiki>
+**** Machine <nowiki>[A human-made device that uses power to apply forces and control movement to perform an action.]</nowiki>
+***** Noisemaker <nowiki>[A device such as a horn or rattle used to make noise at parties.]</nowiki>
+**** Measurement-device <nowiki>[A device in which a measure function inheres.]</nowiki>
+***** Clock <nowiki>[A device designed to indicate the time of day or to measure the time duration of an event or action.]</nowiki>
+****** Clock-face <nowiki>[A location identifier based on clockface numbering or anatomic subregion.]</nowiki>
+**** Robot <nowiki>[A mechanical device that sometimes resembles a living animal and is capable of performing a variety of often complex human tasks on command or by being programmed in advance.]</nowiki>
+**** Tool <nowiki>[A component that is not part of a device but is designed to support its assemby or operation.]</nowiki>
+***	Document <nowiki>[A physical object, or electronic counterpart, that is characterized by containing writing which is meant to be human-readable.]</nowiki>
+**** Letter <nowiki>[A written message addressed to a person or organization.]</nowiki>
+**** Note <nowiki>[A brief written record.]</nowiki>
+**** Book <nowiki>[A volume made up of pages fastened along one edge and enclosed between protective covers.]</nowiki>
+**** Notebook <nowiki>[A book for notes or memoranda.]</nowiki>
+*** Furnishing <nowiki>[Furniture, fittings, and other decorative accessories, such as curtains and carpets, for a house or room.]</nowiki>
+*** Manufactured-material <nowiki>[Substances created or extracted from raw materials.]</nowiki>
+**** Ceramic <nowiki>[A hard, brittle, heat-resistant and corrosion-resistant material made by shaping and then firing a nonmetallic mineral, such as clay, at a high temperature.]</nowiki>
+**** Glass <nowiki>[A brittle transparent solid with irregular atomic structure.]</nowiki>
+**** Paper <nowiki>[A thin sheet material produced by mechanically or chemically processing cellulose fibres derived from wood, rags, grasses or other vegetable sources in water.]</nowiki>
+**** Plastic <nowiki>[Various high-molecular-weight thermoplastic or thermosetting polymers that are capable of being molded, extruded, drawn, or otherwise shaped and then hardened into a form.]</nowiki>
+**** Steel <nowiki>[An alloy made up of iron with typically a few tenths of a percent of carbon to improve its strength and fracture resistance compared to iron.]</nowiki>
+*** Media <nowiki>[Media are audo/visual/audiovisual modes of communicating information for mass consumption.]</nowiki>
+**** Media-clip <nowiki>[A short segment of media.]</nowiki>
+***** Audio-clip <nowiki>[A short segment of audio.]</nowiki>
+***** Video-clip <nowiki>[A short segment of video.]</nowiki>
+**** Visualization <nowiki>[An planned process that creates images, diagrams or animations from the input data.]</nowiki>
+***** Animation <nowiki>[A form of graphical illustration that changes with time to give a sense of motion or represent dynamic changes in the portrayal.]</nowiki>
+***** Art-installation <nowiki>[A large-scale, mixed-media constructions, often designed for a specific place or for a temporary period of time.]</nowiki>
+***** Braille <nowiki>[]</nowiki>
+***** Cutout <nowiki>[]</nowiki>
+***** Image <nowiki>[Any record of an imaging event whether physical or electronic.]</nowiki>
+****** Cartoon <nowiki>[A type of illustration, sometimes animated, typically in a non-realistic or semi-realistic style. The specific meaning has evolved over time, but the modern usage usually refers to either: an image or series of images intended for satire, caricature, or humor; or a motion picture that relies on a sequence of illustrations for its animation.]</nowiki>
+****** Drawing <nowiki>[A representation of an object or outlining a figure, plan, or sketch by means of lines.]</nowiki>
+****** Icon <nowiki>[A sign (such as a word or graphic symbol) whose form suggests its meaning.]</nowiki>
+****** Painting <nowiki>[A work produced through the art of painting.]</nowiki>
+****** Photograph <nowiki>[An image recorded by a camera.]</nowiki>
+***** Movie <nowiki>[A sequence of images displayed in succession giving the illusion of continuous movement.]</nowiki>
+***** Outline-visualization <nowiki>[A visualization consisting of a line or set of lines enclosing or indicating the shape of an object in a sketch or diagram.]</nowiki>
+***** Point-light-visualization <nowiki>[]</nowiki>
+***** Sculpture <nowiki>[A two- or three-dimensional representative or abstract forms, especially by carving stone or wood or by casting metal or plaster.]</nowiki>
+***** Stick-figure-visualization <nowiki>[A drawing showing the head of a human being or animal as a circle and all other parts as straight lines.]</nowiki>
+*** Navigational-object <nowiki>[An object whose purpose is to assist directed movement from one location to another.]</nowiki>
+**** Path <nowiki>[A trodden way. A way or track laid down for walking or made by continual treading.]</nowiki>
+**** Road <nowiki>[An open way for the passage of vehicles, persons, or animals on land.]</nowiki>
+***** Lane <nowiki>[A defined path with physical dimensions through which an object or substance may traverse.]</nowiki>
+**** Runway <nowiki>[A paved strip of ground on a landing field for the landing and takeoff of aircraft.]</nowiki>
+*** Vehicle <nowiki>[A mobile machine which transports people or cargo.]</nowiki>
+**** Aircraft <nowiki>[A vehicle which is able to travel through air in an atmosphere.]</nowiki>
+**** Bicycle <nowiki>[A human-powered, pedal-driven, single-track vehicle, having two wheels attached to a frame, one behind the other.]</nowiki>
+**** Boat <nowiki>[A watercraft of any size which is able to float or plane on water.]</nowiki>
+**** Car <nowiki>[A wheeled motor vehicle used primarily for the transportation of human passengers.]</nowiki>
+**** Cart <nowiki>[A cart is a vehicle which has two wheels and is designed to transport human passengers or cargo.]</nowiki>
+**** Tractor <nowiki>[A mobile machine specifically designed to deliver a high tractive effort at slow speeds, and mainly used for the purposes of hauling a trailer or machinery used in agriculture or construction.]</nowiki>
+**** Train <nowiki>[A connected line of railroad cars with or without a locomotive.]</nowiki>
+**** Truck <nowiki>[A motor vehicle which, as its primary funcion, transports cargo rather than human passangers.]</nowiki>
+** Natural-object <nowiki>[Something that exists in or is produced by nature, and is not artificial or man-made.]</nowiki>
+*** Mineral <nowiki>[A solid, homogeneous, inorganic substance occurring in nature and having a definite chemical composition.]</nowiki>
+*** Natural-feature <nowiki>[A feature that occurs in nature. A prominent or identifiable aspect, region, or site of interest.]</nowiki>
+**** Field <nowiki>[An unbroken expanse as of ice or grassland.]</nowiki>
+**** Hill <nowiki>[A rounded elevation of limited extent rising above the surrounding land with local relief of less than 300m.]</nowiki>
+**** Mountain <nowiki>[A landform that extends above the surrounding terrain in a limited area.]</nowiki>
+**** River <nowiki>[A natural freshwater surface stream of considerable volume and a permanent or seasonal flow, moving in a definite channel toward a sea, lake, or another river.]</nowiki>
+**** Waterfall <nowiki>[A sudden descent of water over a step or ledge in the bed of a river.]</nowiki>
+* Sound <nowiki>[Mechanical vibrations transmitted by an elastic medium; something that can be heard.]</nowiki>
+** Environmental-sound<nowiki>[Sounds occuring in the environment. An accumulation of noise pollution that occurs outside. This noise can be caused by transport, industrial, and recreational activities.]</nowiki>
+*** Crowd-sound <nowiki>[Noise produced by a mixture of sounds from a large group of people.]</nowiki>
+*** Signal-noise <nowiki>[Any part of a signal that is not the true or original signal but is introduced by the communication mechanism.]</nowiki>
+** Musical-sound <nowiki>[Sound produced by continuous and regular vibrations, as opposed to noise.]</nowiki>
+*** Tone <nowiki>[A musical note, warble, or other sound used as a particular signal on a telephone or answering machine.]</nowiki>
+*** Instrument-sound <nowiki>[Sound produced by a musical instrument.]</nowiki>
+*** Vocalized-sound <nowiki>[Musical sound produced by vocal cords in a biological agent.]</nowiki>
+** Named-animal-sound <nowiki>[]</nowiki>
+*** Barking <nowiki>[Sharp explosive cries like sounds made by certain animals, especially a dog, fox, or seal.]</nowiki>
+*** Bleating <nowiki>[Wavering cries like sounds made by a sheep, goat, or calf. ]</nowiki>
+*** Crowing <nowiki>[Loud shrill sounds characteristic of roosters.]</nowiki>
+*** Chirping <nowiki>[Short, sharp, high-pitched noises like sounds made by small birds or an insects.]</nowiki>
+*** Growling <nowiki>[Low guttural sounds like those that made in the throat by a hostile dog or other animal.]</nowiki>
+*** Meowing <nowiki>[Vocalizations like those made by as those cats. These sounds have diverse tones and are sometimes chattered, murmured or whispered. The purpose can be assertive.]</nowiki>
+*** Mooing <nowiki>[Deep vocal sounds like those made by a cow.]</nowiki>
+*** Purring <nowiki>[Low continuous vibratory sound such as those made by cats. The sound expresses contentment.]</nowiki>
+*** Roaring <nowiki>[Loud, deep, or harsh prolonged sounds such as those made by big cats and bears for long-distance communication and intimidation.]</nowiki>
+*** Squawking <nowiki>[Loud, harsh noises such as those made by geese.]</nowiki>
+** Named-object-sound <nowiki>[A sound identifiable as coming from a particular type of object.]</nowiki>
+*** Alarm-sound <nowiki>[A loud signal often loud continuous ringing to alert people to a problem or condition that requires urgent attention.]</nowiki>
+*** Beep <nowiki>[A short, single tone, that is typically high-pitched and generally made by a computer or other machine. ]</nowiki>
+*** Buzz <nowiki>[A persistent vibratory sound often made by a buzzer device and used to indicate something incorrect.]</nowiki>
+*** Ka-ching <nowiki>[The sound made by a mechanical cash register, often to designate a reward.]</nowiki>
+*** Click <nowiki>[The sound made by a mechanical cash register, often to designate a reward.]</nowiki>
+*** Ding <nowiki>[A short ringing sound such as that made by a bell, often to indicate a correct response or the expiration of time.]</nowiki>
+*** Horn-blow <nowiki>[A loud sound made by forcing air through a sound device that funnels air to create the sound, often used to sound an alert.]</nowiki>
+*** Siren <nowiki>[A loud, continuous sound often varying in frequency designed to indicate an emergency.]</nowiki>
+
+'''Agent-property''' <nowiki>{extensionAllowed}[Something that pertains to an agent.]</nowiki>
+* Cognitive-state <nowiki>[The state of the cognitive processes or state of mind of the agent.]</nowiki>
+** Alert <nowiki>[Condition of heightened watchfulness or preparation for action.]</nowiki>
+** Anesthetized <nowiki>[Having lost sensation to pain or having senses dulled due to the effects of an anesthetic.]</nowiki>
+** Asleep <nowiki>[Having entered a periodic, readily reversible state of reduced awareness and metabolic activity, usually accompanied by physical relaxation and brain activity.]</nowiki>
+** Attentive <nowiki>[Concentrating and focusing mental energy on the task or surroundings.]</nowiki>
+** Awake <nowiki>[In a non sleeping state.]</nowiki>
+** Brain-dead <nowiki>[Characterized by the irreversible absence of cortical and brain stem functioning.]</nowiki>
+** Comatose <nowiki>[In a state of profound unconsciousness associated with markedly depressed cerebral activity.]</nowiki>
+** Drowsy <nowiki>[In a state of near-sleep, a strong desire for sleep, or sleeping for unusually long periods.]</nowiki>
+** Intoxicated <nowiki>[In a state with disturbed psychophysiological functions and responses as a result of administration or ingestion of a psychoactive substance.]</nowiki>
+** Locked-in <nowiki>[In a state of complete paralysis of all voluntary muscles except for the ones that control the movements of the eyes.]</nowiki>
+** Passive <nowiki>[Not responding or initiating an action in response to a stimulus.]</nowiki>
+** Resting <nowiki>[A state in which the agent is not exhibiting any physical exertion.]</nowiki>
+** Vegetative <nowiki>[A state of wakefulness and conscience, but (in contrast to coma) with involuntary opening of the eyes and movements (such as teeth grinding, yawning, or thrashing of the extremities).]</nowiki>
+* Emotional-state <nowiki>[The status of the general temperament and outlook of an agent.]</nowiki>
+** Angry <nowiki>[Experiencing emotions characterized by marked annoyance or hostility.]</nowiki>
+** Aroused <nowiki>[In a state reactive to stimuli leading to increased heart rate and blood pressure, sensory alertness, mobility and readiness to respond.]</nowiki>
+** Awed <nowiki>[Filled with wonder. Feeling grand, sublime or powerful emotions characterized by a combination of joy, fear, admiration, reverence, and/or respect.]</nowiki>
+** Compassionate <nowiki>[Feeling or showing sympathy and concern for others often evoked for a person who is in distress and associated with altruistic motivation.]</nowiki>
+** Content <nowiki>[Feeling  satisfaction with things as they are.]</nowiki>
+** Disgusted <nowiki>[Feeling revulsion or profound disapproval aroused by something unpleasant or offensive.]</nowiki>
+** Emotionally-neutral <nowiki>[Feeling neither satisfied nor dissatisfied.]</nowiki>
+** Empathetic <nowiki>[Understanding and sharing the feelings of another. Being aware of, being sensitive to, and vicariously experiencing the feelings, thoughts, and experience of another.]</nowiki>
+** Excited <nowiki>[Feeling great enthusiasm and eagerness.]</nowiki>
+** Fearful <nowiki>[Feeling apprehension that one may be in danger.]</nowiki>
+** Frustrated <nowiki>[Feeling annoyed as a result of being blocked, thwarted, disappointed or defeated.]</nowiki>
+** Grieving <nowiki>[Feeling sorrow in response to loss, whether physical or abstract.]</nowiki>
+** Happy <nowiki>[Feeling pleased and content.]</nowiki>
+** Jealous <nowiki>[Feeling threatened by a rival in a relationship with another individual, in particular an intimate partner, usually involves feelings of threat, fear, suspicion, distrust, anxiety, anger, betrayal, and rejection.]</nowiki>
+** Joyful <nowiki>[Feeling delight or intense happiness.]</nowiki>
+** Loving <nowiki>[Feeling a strong positive emotion of affection and attraction.]</nowiki>
+** Relieved <nowiki>[No longer feeling pain, distress,  anxiety, or reassured.]</nowiki>
+** Sad <nowiki>[Feeling grief or unhappiness.]</nowiki>
+** Stressed <nowiki>[Experiencing mental or emotional strain or tension.]</nowiki>
+* Postural-state <nowiki>[Pertaining to the position in which agent holds their body.]</nowiki>
+** Crouching <nowiki>[Adopting a position where the knees are bent and the upper body is brought forward and down, sometimes to avoid detection or to defend oneself.]</nowiki>
+** Kneeling <nowiki>[Positioned where one or both knees are on the ground.]</nowiki>
+** On-treadmill <nowiki>[Ambulation on an exercise apparatus with an endless moving belt to support moving in place.]</nowiki>
+** Prone <nowiki>[Positioned in a recumbent body position whereby the person lies on its stomach and faces downward.]</nowiki>
+** Sitting <nowiki>[In a seated position.]</nowiki>
+** Standing <nowiki>[Assuming or maintaining an erect upright position. ]</nowiki>
+** Supported-by-chin-rest <nowiki>[Using a device that supports the chin and head.]</nowiki>
+* Agent-trait <nowiki>[A genetically, environmentally, or socially determined characteristic of an agent.]</nowiki>
+** Age <nowiki>[Length of time elapsed time since birth of the agent.]</nowiki>
+*** <nowiki># {takesValue}</nowiki>
+** Gender <nowiki>[Characteristics that are socially constructed, including norms, behaviors, and roles based on sex.]</nowiki>
+** Sex <nowiki>[Physical properties or qualities by which male is distinguished from female.]</nowiki>
+*** Female <nowiki>[Biological sex of an individual with female sexual organs such ova.]</nowiki>
+*** Male <nowiki>[Biological sex of an individual with male sexual organs producing sperm.]</nowiki>
+*** Intersex <nowiki>[Having genitalia and/or secondary sexual characteristics of indeterminate sex.]</nowiki>
+** Handedness <nowiki>[Individual preference for use of a hand, known as the dominant hand.]</nowiki>
+*** Left-handed <nowiki>[Preference for using the left hand or foot for tasks requiring the use of a single hand or foot.]</nowiki>
+*** Right-handed <nowiki>[Preference for using the right hand or foot for tasks requiring the use of a single hand or foot.]</nowiki>
+*** Ambidextrous <nowiki>[Having no overall dominance in the use of right or left hand or foot in the performance of tasks that require one hand or foot.]</nowiki>
+* Agent-social-role <nowiki>[The function or part that is ascribed to an individual agent with respect to in a community.]</nowiki>
+** Brother <nowiki>[Being a male sibling.]</nowiki>
+** Child <nowiki>[Having an age below the legal age of majority.]</nowiki>
+** Father <nowiki>[Being a male parent.]</nowiki>
+** Mother <nowiki>[Being a female parent.]</nowiki>
+** Sister <nowiki>[Being a female sibling.]</nowiki>
+* Agent-task-role <nowiki>[The function or part that is ascribed to an agent in performing the task.]</nowiki>
+** Experimental-controller <nowiki>[An agent acting to control the experiment.]</nowiki>
+** Experimental-participant <nowiki>[Someone who takes part in an activity related to an experiment.]</nowiki>
+** Experimenter <nowiki>[Person who is the owner of the experiment and has its responsibility.]</nowiki>
+** Follower <nowiki>[A person who follows the lead of another.]</nowiki>
+** Friend <nowiki>[A person whom an individual knows, likes, and trusts.]</nowiki>
+** Leader <nowiki>[A person who leads or commands an activity, project, group, organization, or country.]</nowiki>
+** Stranger <nowiki>[A person not known in a particular place or community.]</nowiki>
+** Student <nowiki>[A person who is enrolled in an educational institution. A person who acquires knowledge and skill from some educator during an education process.]</nowiki>
+** Teacher <nowiki>[An agent who instructs or educates others.]</nowiki>
+
+'''Data-property''' <nowiki>{extensionAllowed}[Something that pertains to data or information.]</nowiki>
+* Data-source-type <nowiki>[The type of place, person, or thing from which the data comes or can be obtained.]</nowiki>
+** Computed-feature<nowiki>[A feature computed from the data by a tool. This tag should be grouped with a label of the form Toolname_propertyName.]</nowiki>
+** Computed-prediction <nowiki>[A computed extrapolation of known data.]</nowiki>
+** Expert-annotation <nowiki>[An explanatory or critical comment or other in-context information provided by an authority.]</nowiki>
+** Instrument-measurement <nowiki>[Information obtained from a device that is used to measure material properties or make other observations.]</nowiki>
+** Observation <nowiki>[Active acquisition of information from a primary source. Should be grouped with a label of the form AgentID_featureName.]</nowiki>
+* Physical-property <nowiki>[A characteristic that defines the nature of matter or forces that act upon it.]</nowiki>
+** Electromagnetic-property <nowiki>[A characteristic of matter such as electrical conductivity that governs its interaction with electrical or magnetic forces.]</nowiki>
+** Mechanical-property <nowiki>[A physical quality that inheres in an bearer by virtue of how that bearer behaves when subjected to forces or displacements and the effect of their bodies on their environment.]</nowiki>
+*** Pressure <nowiki>[The force applied to a unit area of surface.]</nowiki>
+**** <nowiki># {takesValue, isNumeric}</nowiki>
+** Organic-property <nowiki>[Relating to or containing elemental carbon or carbon compounds.]</nowiki>
+** Thermodynamic-property <nowiki>[Property related to heat and other forms of energy (such as mechanical, electrical, or chemical energy), and, by extension, of the relationships between all forms of energy.]</nowiki>
+*** Energy  <nowiki>[The capacity of a physical system to do work.]</nowiki>
+**** <nowiki># {takesValue, isNumeric}</nowiki>
+*** Entropy  <nowiki>[A thermodynamic property which acts as a measure of the state of disorder of a system.]</nowiki>
+**** <nowiki># {takesValue, isNumeric}</nowiki>
+*** Temperature <nowiki>[A measure of the average kinetic energy of a system of particles. Temperature may be quantified, in the context of thermodynamics, as the potential of one system to transfer thermal energy to another system until both systems reach a state of thermal equilibrium.]</nowiki>
+**** <nowiki># {takesValue, isNumeric}</nowiki>
+* Quantitative-property <nowiki>[Something capable of being estimated or expressed with numeric values.] </nowiki>
+** Angle<nowiki>[The inclination of one line to another or the plane of one object to another. Angles are assumed clockwise from vertical unless grouped with axis.]</nowiki>
+*** <nowiki># {takesValue}</nowiki>
+** Fraction <nowiki>[A numerical value betwee 0 and 1.]</nowiki>
+*** <nowiki># {takesValue}</nowiki>
+** Interval <nowiki>[A period of time or the distance separating two instances, events, or occurrences.]</nowiki>
+*** <nowiki># {takesValue}</nowiki>
+** Item-count <nowiki>[An integer and represented the number of instances or occurences of an entity.]</nowiki>
+*** <nowiki># {takesValue}</nowiki>
+** Percentage <nowiki>[A fraction or ratio with 100 understood as the denominator.]</nowiki>
+*** <nowiki># {takesValue}</nowiki>
+** Ratio <nowiki>[A quotient of quantities of the same kind for different components within the same system.]</nowiki>
+*** <nowiki># {takesValue}</nowiki>
+** Repetition-interval <nowiki>[The amount of time between successive occurrences.]</nowiki>
+*** <nowiki># {takesValue}</nowiki>
+** Repetition-number <nowiki>[An integer that identifies the particular occurrence of a repeating activity or entity.]</nowiki>
+*** <nowiki># {takesValue}</nowiki>
+* Spatiotemporal-property <nowiki>[A property relating to space and/or time.]</nowiki>
+** Rate-of-change <nowiki>[The amount of change accumulated per unit time.]</nowiki>
+*** Acceleration <nowiki>[Magnitude of the rate of change in either speed or direction. The direction of change should be given separately.]</nowiki>
+**** <nowiki># {takesValue, isNumeric, unitClass=acceleration}</nowiki>
+*** Jerk-rate <nowiki>[Magnitude of the rate at which the acceleration of an object changes with respect to time. The direction of change should be given separately.]</nowiki>
+**** <nowiki># {takesValue, isNumeric, unitClass=jerk}</nowiki>
+*** Sampling-rate <nowiki>[The number of digital samples taken or recorded per unit of time.]</nowiki>
+**** <nowiki># {takesValue, unitClass=frequency}</nowiki>
+*** Refresh-rate <nowiki>[The frequency with which the image on a computer monitor or similar electronic display screen is refreshed, usually expressed in hertz.]</nowiki>
+**** <nowiki># {takesValue, isNumeric}</nowiki>
+*** Speed <nowiki>[A scalar measure of the rate of movement of the object expressed either as the distance travelled divided by the time taken (average speed) or the rate of change of position with respect to time at a particular point (instantaneous speed). The direction of change should be given separately.]</nowiki>
+**** <nowiki># {takesValue, isNumeric, unitClass=speed}</nowiki>
+*** Temporal-rate <nowiki>[The number of items per unit of time.]</nowiki>
+**** <nowiki># {takesValue, unitClass=frequency}</nowiki>
+** Resolution <nowiki>[The size of the smallest element that can be separated from neighboring elements.]</nowiki>
+*** IO-resolution <nowiki>[Smallest change in a quality being measured by an sensor that causes a perceptible change in the IO device.]</nowiki>
+**** Screen-resolution <nowiki>[Resolution of a screen, usually expressed as the of pixels in a dimension for a digital display device.]</nowiki>
+***** <nowiki># {takesValue} </nowiki>
+**** Printer-resolution <nowiki>[Resolution of a printer, usually expressed as the number of dots-per-inch for a printer.]</nowiki>
+***** <nowiki># {takesValue} </nowiki>
+*** Spatial-resolution <nowiki>[Linear spacing of a spatial measurement.]</nowiki>
+**** <nowiki># {takesValue}</nowiki>
+*** Spectral-resolution <nowiki>[Measures the ability of a sensor to  resolve features in the electromagnetic spectrum.]</nowiki>
+**** <nowiki># {takesValue}</nowiki>
+*** Temporal-resolution <nowiki>[Measures the ability of a sensor to  resolve features in time.]</nowiki>
+**** <nowiki># {takesValue} </nowiki>
+** Spatial-property <nowiki>[Property of an element involving space.]</nowiki>
+*** Direction <nowiki>[The spatial relation between something and the course along which it points or moves.]</nowiki>
+**** <nowiki># {takesValue, isNumeric}</nowiki>
+*** Distance <nowiki>[A measure of the space separating two objects or points.]</nowiki>
+**** <nowiki># {takesValue, isNumeric, unitClass=physicalLength}</nowiki>
+*** Orientation <nowiki>[The position or alignment of something relative to points of the compass, other specific directions, or some other indexing system.]</nowiki>
+**** <nowiki># {takesValue, isNumeric}</nowiki>
+*** Position <nowiki>[A reference to the alignment of an object, a particular situation or view of a situation, or the location of an object. Coordinates with respect a specified frame of reference or the default Screen-frame if no frame is given.] </nowiki>
+**** X-position <nowiki>[The position along the x-axis of the frame of reference.]</nowiki>
+***** <nowiki># {takesValue, isNumeric, unitClass=physicalLength}</nowiki>
+**** Y-position <nowiki>[The position along the y-axis of the frame of reference.]</nowiki>
+***** <nowiki># {takesValue, isNumeric, unitClass=physicalLength}</nowiki>
+**** Z-position <nowiki>[The position along the z-axis of the frame of reference.]</nowiki>
+***** <nowiki># {takesValue, isNumeric, unitClass=physicalLength}</nowiki>
+*** Size <nowiki>[The physical magnitude of something.]</nowiki>
+**** Area <nowiki>[The extent of a 2-dimensional surface enclosed within a boundary.]</nowiki>
+***** <nowiki># {takesValue, isNumeric, unitClass=area}</nowiki>
+**** Length <nowiki>[The linear extent in space from one end of something to the other end, or the extent of something from beginning to end.]</nowiki>
+***** <nowiki># {takesValue, isNumeric, unitClass=physicalLength}</nowiki>
+**** Width <nowiki>[The extent or measurement of something from side to side.]</nowiki>
+***** <nowiki># {takesValue, isNumeric, unitClass=physicalLength}</nowiki>
+**** Height <nowiki>[The vertical measurement or distance from the base to the top of an object; the vertical dimension of extension.]</nowiki>
+***** <nowiki># {takesValue, isNumeric, unitClass=physicalLength}</nowiki>
+**** Volume <nowiki>[The amount of three dimensional space occupied by an object or the capacity of a space or container.]</nowiki>
+***** <nowiki># {takesValue, isNumeric, unitClass=volume}</nowiki>
+*** Surface-properties <nowiki>[Property of the outer boundary of a three-dimensional object.]</nowiki>
+**** Rough <nowiki>[A texture quality inhering in a bearer by virtue of the irregular surface of the bearer.]</nowiki>
+**** Smooth <nowiki>[Having a surface free from roughness or bumps or ridges or irregularities.]</nowiki>
+** Temporal-property <nowiki>[A characteristic of or relating to time or limited by time.]</nowiki>
+*** Delay <nowiki>[Time during which some action is awaited; inactivity resulting in something being put off until a later time.]</nowiki>
+**** <nowiki># {takesValue, isNumeric, unitClass=time}</nowiki>
+*** Duration <nowiki>[The period of time during which something occurs or continues.]</nowiki>
+**** <nowiki># {takesValue, isNumeric, unitClass=time}</nowiki>
+*** Frequency <nowiki>[Frequency is the number of occurrences of a repeating event per unit time.]</nowiki>
+**** <nowiki># {takesValue, isNumeric, unitClass=frequency}</nowiki>
+*** Onset <nowiki>{topLevelTagGroup}[Labels the start or beginning of something, usually an event.]</nowiki>
+*** Offset <nowiki>{topLevelTagGroup}[Labels the time at which something stops.]</nowiki>
+*** Pause <nowiki>[Indicates the temporary interruption of  the operation a process and subsequently wait for a signal to continue.]</nowiki>
+*** Time-value <nowiki>{unitClass=time}[A value with units of time. Usually grouped with tags identifying what the value represents.]</nowiki>
+**** <nowiki># {takesValue, isNumeric, unitClass=time}</nowiki>
+*** Time-out <nowiki>[A cancellation or cessation that automatically occurs when a predefined interval of time has passed without a certain event occurring.]</nowiki>
+*** Time-sync <nowiki>[A synchronization signal whose purpose to help synchronize different signals or processes. Often used to indicate a marker inserted into the recorded data to allow post hoc synchronization of concurrently recorded data streams.]</nowiki>
+* Statistical-property <nowiki>{extensionAllowed}[A property relating to, based on, or employing the principles of statistics.]</nowiki>
+** Accuracy <nowiki>[A measure of closeness to true value expressed as a number between 0 and 1.]</nowiki>
+*** <nowiki># {takesValue, isNumeric}</nowiki>
+** Data-mean <nowiki>[The sum of a set of values divided by the number of values in the set.]</nowiki>
+*** <nowiki># {takesValue, isNumeric}</nowiki>
+** Data-median <nowiki>[The value which has an equal number of values greater and less than it.]</nowiki>
+*** <nowiki># {takesValue, isNumeric}</nowiki>
+** Data-minimum <nowiki>[The smallest possible quantity.]</nowiki>
+*** <nowiki># {takesValue, isNumeric}</nowiki>
+** Data-maximum <nowiki>[The largest possible quantity or degree.]</nowiki>
+*** <nowiki># {takesValue, isNumeric}[]</nowiki>
+** Probability <nowiki> [A measure of the expectation of the occurrence of a particular event.]</nowiki>
+*** <nowiki># {takesValue, isNumeric}</nowiki>
+** Statistical-precision <nowiki>[A quantitative representation of the degree of accuracy necessary for or associated with a particular action.]</nowiki>
+*** <nowiki># {takesValue, isNumeric}</nowiki>
+** Statistical-recall <nowiki>[Sensitivity is a measurement datum qualifying a binary classification test and is computed by substracting the false negative rate to the integral numeral 1.]</nowiki>
+*** <nowiki># {takesValue, isNumeric}</nowiki>
+** Standard-deviation <nowiki>[A measure of the range of values in a set of numbers. Standard deviation is a statistic used as a measure of the dispersion or variation in a distribution, equal to the square root of the arithmetic mean of the squares of the deviations from the arithmetic mean.]</nowiki>
+*** <nowiki># {takesValue, isNumeric}</nowiki>
+** Uncertainty <nowiki> [A measure of the inherent variability of repeated observation measurements of a quantity including quantities evaluated by statistical methods and by other means.]</nowiki>
+*** <nowiki># {takesValue, isNumeric}</nowiki>
+
+'''Task-property''' <nowiki>{extensionAllowed}[Something that pertains to a task.]</nowiki>
+* Task-attentional-strategy <nowiki>[Strategy for allocating attention toward goal-relevant information.]</nowiki>
+** Bottom-up-attention <nowiki>[Attentional guidance purely by externally driven factors to stimuli that are salient because of their inherent properties relative to the background. Sometimes this is referred to as stimulus driven.]</nowiki>
+** Covert-attention <nowiki>[Paying attention without moving the eyes.]</nowiki>
+** Divided-attention <nowiki>[Integrating parallel multiple stimuli. Behavior involving responding simultaneously to multiple tasks or multiple task demands.]</nowiki>
+** Focused-attention <nowiki>[Responding discretely to specific visual, auditory, or tactile stimuli.]</nowiki>
+** Orienting-attention <nowiki>[Directing attention to a target stimulus.]</nowiki>
+** Overt-attention <nowiki>[Selectively processing one location over others by moving the eyes to point at that location.]</nowiki>
+** Selective-attention <nowiki>[Maintaining a behavioral or cognitive set in the face of distracting or competing stimuli. Ability to pay attention to a limited array of all available sensory information.]</nowiki>
+** Sustained-attention <nowiki>[Maintaining a consistent behavioral response during continuous and repetitive activity.]</nowiki>
+** Top-down-attention <nowiki>[Voluntary allocation of attention to certain features. Sometimes this is referred to goal-oriented attention.]</nowiki>
+* Task-effect-evidence <nowiki>[The evidence supporting the conclusion that the event had the specified effect.]</nowiki>
+** Computational-evidence <nowiki>[A type of evidence in which data are produced, and/or generated, and/or analyzed on a computer.]</nowiki>
+** External-evidence <nowiki>[A phenomenon that follows and is caused by some previous phenomenon.]</nowiki>
+** Intended-effect <nowiki>[A phenomenon that is intended to follow and be caused by some previous phenomenon.]</nowiki>
+** Behavioral-evidence <nowiki>[An indication or conclusion based on the behavior of an agent.]</nowiki>
+* Task-event-role <nowiki>[The purpose of an event with respect to the task.]</nowiki>
+** Activity <nowiki> [Something that is part of the overall task or is necessary to the overall experiment but is not directly part of a stimulus-response cycle. Examples would be taking a survey or provided providing a silva sample.]</nowiki>
+** Background-subtask <nowiki>[A part of the task which should be performed in the background as for example inhibiting blinks due to instruction while performing the primary task.]</nowiki>
+** Experimental-stimulus <nowiki>[Part of something designed to elicit a response in the experiment.]</nowiki>
+** Failure <nowiki>[A descriptor indicating a failure.]</nowiki>
+** Incidental <nowiki> [Usually associated with a sensory event intended to give instructions to the participant about the task or behavior.]</nowiki>
+** Instructional <nowiki> [Usually associated with a sensory event intended to give instructions to the participant about the task or behavior.]</nowiki>
+** Mishap <nowiki> [Unplanned disruption such as an equipment or experiment control abnormality or experimenter error.]</nowiki>
+** Participant-response <nowiki> [Something related to a participant actions in performing the task.]</nowiki>
+** Primary-subtask <nowiki>[A part of the task which should be the primary focus of the participant.]</nowiki>
+** Warning <nowiki>[Something that should warn the participant that the parameters of the task have been or are about to be exceeded such as a warning message about getting too close to the shoulder of the road in a driving task.]</nowiki>
+* Task-response-type <nowiki>[How the participant response should be interpreted in terms of the task specification.]</nowiki>
+** Appropriate <nowiki>{relatedTag=Inappropriate}[Suitable or proper in the circumstances.]</nowiki>
+** Correction <nowiki>{relatedTag=Successful}[Offering an improvement to replace a mistake; setting right; something substituted for an error.]</nowiki>
+** Erroneous <nowiki>[Something wrong or incorrect.]</nowiki>
+** Imagined <nowiki>[Form a mental image or concept of something. This is used to identity something that only happened in the imagination of the participant as in imagined movements in motor imagery paradigms.]</nowiki>
+** Inappropriate <nowiki>{relatedTag=Appropriate}[Not in keeping with what is correct or proper.]</nowiki>
+** Indeterminate <nowiki>{relatedTag=Missed,relatedTag=Near-miss}[Cannot distinguish between two or more possible values in the current context.]</nowiki>
+** Missed <nowiki>{relatedTag=Indeterminate,relatedTag=Near-miss}[Not existing; not able to be found.]</nowiki>
+** Near-miss <nowiki>{relatedTag=Indeterminate,relatedTag=Miss}[A narrowly avoided collision or other accident.]</nowiki>
+** Successful <nowiki>{relatedTag=Correction}[Something that accomplishes its intended purpose.]</nowiki>
+* Task-stimulus-role <nowiki>[The role the stimulus plays in the task.]</nowiki>
+** Cue <nowiki>[A signal for an action, a pattern of stimuli indicating a particular response.]</nowiki>
+** Distractor <nowiki>[A person or thing that distracts or a plausible but incorrect option in a multiple-choice question.]</nowiki>
+** Expected <nowiki>[Considered likely or probable; anticipated. Something of low information value as in frequent non-targets in an RSVP paradigm.]</nowiki>
+** Extraneous <nowiki>[Irrelevant or unrelated to the subject being dealt with.]</nowiki>
+** Feedback <nowiki>[An evaluative response to an inquiry, process, event, or activity.]</nowiki>
+** Go-signal <nowiki>{relatedTag=Stop-signal}[An indicator to proceed with a planned action.]</nowiki>
+** Meaningful <nowiki>[Conveying significant or relevant information.]</nowiki>
+** Newly-learned <nowiki>[Representing recently acquired information or understanding.]</nowiki>
+** Non-informative <nowiki>[Something that is not useful in forming an opinion or judging an outcome.]</nowiki>
+** Non-target <nowiki>{suggestedTag=Expected}[Something other than that done or looked for. Also tag Expected if the Non-target is frequent.] </nowiki>
+** Not-meaningful <nowiki>[Not having a serious, important, or useful quality or purpose.]</nowiki>
+** Novel <nowiki>[Having no previous example or precedent or parallel; of a kind not seen before.]</nowiki>
+** Oddball <nowiki> [Something strange, bizarre, unusal, or infrequent.]</nowiki>
+** Planned <nowiki>[Something that was decided on or arranged in advance.]</nowiki>
+** Penalty <nowiki>[A disadvantage, loss, or hardship due to some action.]</nowiki>
+** Priming <nowiki>[An implicit memory effect in which exposure to a stimulus influences response to a later stimulus.]</nowiki>
+** Query <nowiki>[A sentence of inquiry that asks for a reply; a request for information (as in a formal request to a database or search engine or in interrogating a subject for an answer).]</nowiki>
+** Reward <nowiki>[A positive reinforcement for a desired action, behavior or response.]</nowiki>
+** Stop-signal <nowiki>{relatedTag=Go-signal}[An indicator that the agent should stop the current activity.]</nowiki>
+** Target <nowiki>[Something fixed as a goal or point of examination; something to point at; a destination. Something an agent is looking for.]</nowiki>
+** Threat <nowiki>[An indicator that signifies hostility and predicts an increased probability of attack.]</nowiki>
+** Timed <nowiki>[Something planned or scheduled to be done at a particular time or lasting for a specified amount of time.]</nowiki>
+** Unexpected <nowiki>[Something that is not planned or anticipated.]</nowiki>
+
+'''Attribute''' <nowiki>{extensionAllowed} [A characteristic of some entity. A quality or feature regarded as a characteristic or inherent part of someone or something. HED attributes are adjectives or adverbs.]</nowiki>
+* Informational <nowiki>[A quality that pertains to information.]</nowiki>
+** Def <nowiki>{requireChild} [A HED-specific utility tag used with a defined name to represent the tags associated with that definition.]</nowiki>
+*** <nowiki># {takesValue}</nowiki>
+** Def-expand <nowiki>{requireChild, tagGroup} [A HED specific utility tag that is grouped with an expanded definition. The child value of the Def-expand is the name of the expanded definition.]</nowiki>
+*** <nowiki># {takesValue}</nowiki>   creation date
+** Definition <nowiki>{requireChild, topLevelTagGroup}[A HED-specific utility tag whose child value is the name of the concept and the tag group associated with the tag is an English language explanation of a concept.]</nowiki>
+*** <nowiki># {takesValue}</nowiki>
+** Description <nowiki>{requireChild} [An explanation of what the tag group it is in means. If the description is at the top-level of an event string, the description applies to the event.]</nowiki>
+*** <nowiki># {takesValue}</nowiki>
+** Experimental-note <nowiki>[A brief written record about the experiment.]</nowiki>
+*** <nowiki># {takesValue}</nowiki>
+** ID <nowiki>{requireChild} [An alphanumeric name that identifies either a unique object or a unique class of objects. Here the object or class may be an idea, physical countable object (or class), or physical uncountable substance (or class).]</nowiki>
+*** <nowiki># {takesValue}</nowiki>
+** Label <nowiki>{requireChild} [A string of 20 or fewer characters identifying something. Labels usually refer to general classes of things while IDs refer to specific instances. A term that is associated with some entity. A brief description given for purposes of identification; an identifying or descriptive marker that is attached to an object.]</nowiki>
+*** <nowiki># {takesValue}</nowiki>
+** Metadata <nowiki>[Data about data; information that describes another set of data.]</nowiki>
+*** CogAtlas <nowiki>[The Cognitive Atlas ID number of somthing.]</nowiki>
+**** <nowiki># {takesValue}</nowiki>
+*** CogPo <nowiki>[The CogPO ID number of something.]</nowiki>
+**** <nowiki># {takesValue}</nowiki>
+*** Creation-date <nowiki>{requireChild}[The date on which data creation of this element began.]</nowiki>
+**** <nowiki># {takesValue, unitClass=datetime}</nowiki>
+*** Library-name <nowiki>[Official name of a HED library.]</nowiki>
+**** <nowiki># {takesValue}</nowiki>
+*** Pathname <nowiki>[The specification of a node (file or directory) in a hierarchical file system, usually specified by listing the nodes top-down.]</nowiki>
+**** <nowiki># {takesValue}</nowiki>
+*** Subject-identifier <nowiki>[A sequence of characters used to identify, name, or characterize a trial or study subject.]</nowiki>
+**** <nowiki># {takesValue}</nowiki>
+*** Version-identifier <nowiki>[An alphanumeric character string that identifies a form or variant of a type or original.]</nowiki>
+**** <nowiki># {takesValue}[Usually is a semantic version.]</nowiki>
+** Parameter <nowiki>[Any factor that defines a system and determines or limits its performance. A variable whose value changes the characteristics of a system or a function.]</nowiki>
+*** <nowiki># {takesValue}</nowiki>
+** Value <nowiki>[A numerical quantity measured or assigned or computed. Non-numeric values are specified with the Label tag.]</nowiki>
+*** <nowiki># {takesValue}</nowiki>
+* Organizational <nowiki>[Relating to an organization or the action of organizing something.]</nowiki>
+** Collection <nowiki>[A tag designating a grouping of items such as in a set or list.]</nowiki>
+** Condition-variable <nowiki>[An aspect of the experiment or task that is to be varied during the experiment. Task-conditions are sometimes called independent variables or contrasts.]</nowiki>
+** Control-variable <nowiki>[An aspect of the experiment that is fixed throughout the study and usually is explicitly controlled.]</nowiki>
+** Event-context <nowiki>{topLevelTagGroup}[A special HED tag inserted as part of a top-level tag group to contain information about the interrelated conditions under which the event occurs. The event context includes information about other events that are ongoing when this event happens.]</nowiki>
+** Event-stream <nowiki>[A special HED tag indicating that this event is a member of an ordered succession of events.]</nowiki>
+** Experimental-intertrial <nowiki>[A tag used to indicate a part of the experiment between trials usually where nothing is happening.]</nowiki>
+** Experimental-trial <nowiki>[Designates a run or execution of an activity, for example, one execution of a script. A tag used to indicate a particular organizational part in the experimental design often containing a stimulus-response pair or stimulus-response-feedback triad.]</nowiki>
+** Indicator-variable <nowiki>[An aspect of the experiment or task that is measured as task conditions are varied during the experiment. Experiment indicators are sometimes called dependent variables.]</nowiki>
+** Permutation <nowiki>[A set of elements are rearranged or reindexed in various and different orders. In the rearrangement process, none of the elements are lost, added, or changed.]</nowiki>
+** Recording <nowiki>[The process of copying the information in a signal into a persistent information bearer. Indicates an uninterrupted block of time during which data was acquired using a fixed scanning protocol or sensor positioning. Recording tags are usually have temporal scope which is the entire recording.]</nowiki>
+** Task <nowiki>[An assigned piece of work, usually with a time allotment. A tag used to indicate a linkage the structured activities performed as part of the experiment.]</nowiki>
+** Time-block <nowiki>[A tag used to indicate a contiguous time block in the experiment during which something is fixed or noted.]</nowiki>
+* Relational <nowiki>[Concerns the way in which two or more people or things are connected.]</nowiki>
+** Comparative-relation <nowiki>[Something considered in comparison to something else.]</nowiki>
+*** Less-than <nowiki>[(A (Less-than B)) indicates that the relative size or order of A is smaller than that of B.]</nowiki>
+*** Less-than-or-equal-to <nowiki>[(A (Less-than-or-equal-to B)) indicates that the relative size or order of A is smaller than or equal to B.]</nowiki>
+*** Greater-than <nowiki>[(A (Greater-than B)) indicates that the relative size or order of A is bigger than that of B.]</nowiki>
+*** Greater-than-or-equal-to <nowiki>[(A (Greater-than-or-equal-to B)) indicates that the relative size or order of A is bigger than or the same as that of B.]</nowiki>
+*** Equal-to <nowiki>[(A (Equal-to B)) indicates that the size or order of A is the same as that of B.]</nowiki>
+*** Not-equal-to <nowiki>[(A (Not-equal-to B)) indicates that the size or order of A is not the same as that of B.]</nowiki>
+** Connective-relation <nowiki>[Indicates two items are related in some way.]</nowiki>
+*** Belongs-to <nowiki>[(A (Belongs-to B)) indicates that A is a member of B.]</nowiki>
+*** Connected-to <nowiki>[(A (Connected-to) B) indicates that A is related to B in some respect, usually through a direct link.]</nowiki>
+*** Contained-in <nowiki>[(A (Contained-in B)) indicates that A is completely inside of B.]</nowiki>
+*** Described-by <nowiki>[(A (Described-by B)) indicates that B provides information about A.]</nowiki>
+*** From-to <nowiki>[(A (From-to B)) indicates a directional relation from A to B. A is considered the source.]</nowiki>
+*** Group-of <nowiki>[(A (Group-of B)) indicates A is a group of items of type B.]</nowiki>
+*** Implied-by <nowiki>[(A (Implied-by B)) indicates B is suggested by A.]</nowiki>
+*** Interacts-with <nowiki>[(A (Interacts-with B)) indicates A and B interact, possibly reciprocally.]</nowiki>
+*** Member-of <nowiki>[(A (Member-of B)) indicates A is a member of group B.]</nowiki>
+*** Part-of <nowiki>[(A (Part-of B)) indicates A is a part of the whole B.]</nowiki>
+*** Performed-by <nowiki>[(A (Performed-by B)) Indicates that ction or procedure A was carried out by agent B.]</nowiki>
+*** Related-to <nowiki>[(A (Relative-to B)) indicates A is a part of the whole B.]</nowiki>
+** Ordering-relation <nowiki>[A relation describing the systematic arrangement of data items.]</nowiki>
+*** Early-item <nowiki>[An item near the beginning of a course, process, or series.]</nowiki>
+*** First-item <nowiki>[A first item at the beginning of a course, process, or series.]</nowiki>
+*** Next-item <nowiki>[A subsequent or immediately following item in the order.]</nowiki>
+*** Later-item <nowiki>[An item occurring near the end of a group of ordered items.]</nowiki>
+*** Last-item <nowiki>[An item occurring at the end of a group of ordered items.]</nowiki>
+** Quantitative-relation <nowiki>[A quantitative or numerical relationship.]</nowiki>
+*** Estimated <nowiki>[Calculated approximately.]</nowiki>
+*** Approximated <nowiki>[Not quite exact or correct; almost exact or correct.]</nowiki>
+*** Exact <nowiki>[Marked by strict and particular and complete accordance with fact.]</nowiki>
+** Spatiotemporal-relation <nowiki>[A space and or temporal relationship.]</nowiki>
+*** Directional-relation <nowiki>[A relationship indicating direction.]</nowiki>
+**** Away-from <nowiki>[Go away from (a place).]</nowiki>
+**** Backward <nowiki>[Directed behind or to the rear.]</nowiki>
+**** Closing <nowiki>[Not affording passage or access; blocked against entry.]</nowiki>
+**** Decreasing <nowiki>[Becoming smaller or fewer in size, amount, intensity, or degree.]</nowiki>
+**** Downward <nowiki>[Moving or leading toward a lower place or level.]</nowiki>
+**** Forward <nowiki>[At or near or directed toward the front.]</nowiki>
+**** Increasing <nowiki>[Becoming greater in size, amount, or degree; growing.]</nowiki>
+**** Leftward <nowiki>[Going toward or facing the left.]</nowiki>
+**** Rightward <nowiki>[Going toward or situated on the right.]</nowiki>
+**** Opening <nowiki>[Widening an aperture, door, or gap, especially one allowing access.]</nowiki>
+**** Towards <nowiki>[Moving in the direction of.]</nowiki>
+**** Upward <nowiki>[Moving, pointing, or leading to a higher place, point, or level.]</nowiki>
+*** Orientational-relation <nowiki>[Indicating relative physical position or direction of something.]</nowiki>
+**** Horizontally-oriented <nowiki>[Oriented parallel to or in the plane of the horizon.]</nowiki>
+**** Oblique <nowiki>[Slanting or inclined in direction or course or position; neither parallel nor perpendicular nor right-angular.]</nowiki>
+**** Rotated <nowiki>[Move or cause to move in a circle around an axis or center.]</nowiki>
+**** Vertically-oriented <nowiki>[Oriented in an upright in position or posture.]</nowiki>
+*** Positional-relation <nowiki>[Indicating information about position.]</nowiki>
+**** Above <nowiki>[(A (Adjacent-to B)) means A is in a place or position that is higher than B.]</nowiki>
+**** Across-from <nowiki>[(A (Across-from B)) means A is on the opposite side of something from B.]</nowiki>
+**** Adjacent-to <nowiki>[(A (Adjacent-to B)) indicates that A is next to B in time or space.]</nowiki>
+**** Ahead-of <nowiki>[(A (Ahead-of B)) indicates that A is further forward in time or space in B.]</nowiki>
+**** Around <nowiki>[(A (Around B)) means A is in or near the present place or situation of B.]</nowiki>
+**** Behind <nowiki>[(A (Behind B)) means A is at or to the far side of B, typically so as to be hidden by it.]</nowiki>
+**** Below <nowiki>[(A (Below B)) means A is in a place or position that is lower than the position of B.]</nowiki>
+**** Between <nowiki>[(A (Between, (B, C))) means A is in the space or interval separating B and C.]</nowiki>
+**** Bilateral <nowiki>[(A (Bilateral B)) means A is on both sides of B or affects both sides of B.]</nowiki>
+**** Bottom-of <nowiki>[(A (Bottom-of B)) means A is on the lowest part, side, or surface of B.]</nowiki>
+**** Boundary-of <nowiki>[(A (Boundary-of B)) means A is on or part of the edge or boundary of B.]</nowiki>
+**** Center-of <nowiki>[(A (Center-of B)) means A is at a point or or in an area that is approximately central within B.]</nowiki>
+**** Close-to <nowiki>[(A (Close-to B)) means A is at a small distance from or is located near in space to B.]</nowiki>
+**** Far-from <nowiki>[(A (Far-from B)) means A is at a large distance from or is not located near in space to B.]</nowiki>
+**** In-front-of <nowiki>[(A (In-front-of B)) means A is in a position just ahead or at the front part of B, potentially partially blocking B from view.]</nowiki>
+**** Left-of <nowiki>[(A (Left-of B)) means A is located on or directed toward the side to the west of B when B is facing north. This term is used when A is not part of B.]</nowiki>
+**** Left-side <nowiki>[(A (Left-side B)) means A is located on the left side of B usually as part of B.]</nowiki>
+**** Outside-of <nowiki>[(A (Outside-of B)) means A is located in the space around but not including B.]</nowiki>
+**** Over <nowiki>[(A (over B)) means A above is above B so as to cover or protect or A extends over the a general area as from a from a vantage point.]</nowiki>
+**** Right-of <nowiki>[(A (Right-of B)) means A is located on or directed toward the side to the east of B when B is facing north. This term is used when A is not part of B.]</nowiki>
+**** Right-side <nowiki>[(A (Right-side B)) means A is located on the right side of B usually as part of B.]</nowiki>
+**** Top-of <nowiki>[(A (Top-of B)) means A is on the uppermost part, side, or surface of B.]</nowiki>
+**** Underneath <nowiki>[(A (Underneath B)) means A is situated directly below and may be concealed by B.]</nowiki>
+**** Within <nowiki>[(A (Within B)) means A is on the inside of or contained in B.]</nowiki>
+*** Temporal-relation <nowiki>[Any relationship which includes a temporal or time-based component.]</nowiki>
+**** After <nowiki>[(A After B) means A happens at a time subsequent to a reference time related to B.]</nowiki>
+**** Asynchronous-with <nowiki>[(A Asynchronous-with B) means A happens at times not occurring at the same time or having the same period or phase as B.]</nowiki>
+**** Before <nowiki>[(A Before B) means A happens at a time earlier in time or order than B.]</nowiki>
+**** During <nowiki>[(A During B) means A happens at some point in a given period of time in which B is ongoing.]</nowiki>
+**** Synchronous-with <nowiki>[(A Synchronous-with B) means A happens at occurs at the same time or rate as B.]</nowiki>
+**** Waiting-for <nowiki>[(A Waiting-for B) means A pauses for something to happen in B.]</nowiki>
+*** Variability-relation <nowiki>[An attribute describing how something changes or varies.]</nowiki>
+**** Abrupt <nowiki>[Marked by sudden change.]</nowiki>
+**** Constant <nowiki>[Continually recurring or continuing without interruption. Not changing in time or space.]</nowiki>
+**** Continuous <nowiki>[Uninterrupted in time, sequence, substance, or extent.]</nowiki>
+**** Deterministic <nowiki>{relatedTag=Random,relatedTag=Stochastic}[No randomness is involved in the development of the future states of the element.]</nowiki>
+**** Discrete <nowiki>[Constituting a separate entities or parts.]</nowiki>
+**** Flickering <nowiki>[Moving irregularly or unsteadily or burning or shining fitfully or with a fluctuating light.]</nowiki>
+**** Fractal <nowiki>[Having extremely irregular curves or shapes for which any suitably chosen part is similar in shape to a given larger or smaller part when magnified or reduced to the same size.]</nowiki>
+**** Random <nowiki>{relatedTag=Deterministic,relatedTag=Stochastic}[Governed by or depending on chance; lacking any definite plan or order or purpose.]</nowiki>
+**** Repetitive <nowiki>[A recurring action that is often non-purposeful.]</nowiki>
+**** Stochastic <nowiki>{relatedTag=Deterministic,relatedTag=Random}[Uses  a random probability distribution or pattern that may be analysed statistically but may not be predicted precisely to determine future states.]</nowiki>
+**** Varying <nowiki>[Differing in size, amount, degree, or nature.]</nowiki>
+** Thermal-relation <nowiki>[A relationship related to temperature.]</nowiki>
+*** Cold <nowiki>[Characterized by an absence of heat.]</nowiki>
+*** Colder-than <nowiki>[(A (Colder-than B)) means A has less heat energy than the object against which it is compared; the absence of heat.]</nowiki>
+*** Hot <nowiki>[Characterized by an excess of heat.]</nowiki>
+*** Hotter-than <nowiki>[(A (Hotter-than B)) means A has more heat energy than the object against which it is compared; the absence of heat.]</nowiki>
+* Categorical <nowiki>[Indicates that something can take on a limited and usually fixed number of possible values.]</nowiki>
+** Categorical-class <nowiki>[Categorical values that fall into discrete classes such as true or false. The grouping is absolute in the sense that it is the same for all participants.]</nowiki>
+*** All <nowiki>{relatedTag=Some, relatedTag=None}[To a complete degree or to the full or entire extent.]</nowiki>
+*** Correct <nowiki>{relatedTag=Incorrect}[Free from error; especially conforming to fact or truth.]</nowiki>
+*** Explicit <nowiki>{relatedTag=Implicit}[Stated clearly and in detail, leaving no room for confusion or doubt.]</nowiki>
+*** False <nowiki>{relatedTag=True}[Not in accordance with facts, reality or definitive criteria.]</nowiki>
+*** Implicit <nowiki>{relatedTag=Explicit}[Implied though not plainly expressed.]</nowiki>
+*** Invalid <nowiki>{relatedTag=Valid}[Not true because based on erroneous information or unsound reasoning or not conforming to the correct format or specifications.]</nowiki>
+*** None <nowiki>{relatedTag=All, relatedTag=Some}[No person or thing, nobody, not any.]</nowiki>
+*** Some <nowiki>{relatedTag=All, relatedTag=None}[At least a small amount or number of, but not a large amount of, or often.]</nowiki>
+*** True <nowiki>{relatedTag=False}[Conforming to facts, reality or definitive criteria.]</nowiki>
+*** Valid <nowiki>{relatedTag=Invalid}[Allowable, usable, or acceptable.]</nowiki>
+*** Wrong <nowiki>{relatedTag=Correct}[Not accurate, correct, or appropriate.]</nowiki>
+** Categorical-judgment <nowiki>[Categorical values that are based on the judgment or perception of the participant such familiar and famous.]</nowiki>
+*** Abnormal <nowiki>{relatedTag=Normal}[Deviating in any way from the state, position, structure, condition, behavior, or rule which is considered a norm.]</nowiki>
+*** Asymmetrical <nowiki>{relatedTag=Symmetrical}[Lacking symmetry or having parts that fail to correspond to one another in shape, size, or arrangement; lacking symmetry.]</nowiki>
+*** Congruent <nowiki>{relatedTag=Incongruent}[Concordance of multiple evidence lines. In agreement or harmony.]</nowiki>
+*** Constrained <nowiki>{relatedTag=Unconstrained}[Keeping something within particular limits or bounds.]</nowiki>
+*** Disordered <nowiki>{relatedTag=Ordered}[Not neatly arranged; confused and untidy. A structural quality in which the parts of an object are non-rigid.]</nowiki>
+*** Familiar <nowiki>{relatedTag=Unfamiliar, relatedTag=Famous}[Recognized, familiar, or within the scope of knowledge.]</nowiki>
+*** Famous <nowiki>{relatedTag=Familiar,relatedTag=Unfamiliar}{relatedTag=Familiar, relatedTag=Unfamiliar}[A person who has a high degree of recognition by the general population for his or her success or accomplishments; a famous person.]</nowiki>
+*** Incongruent <nowiki>{relatedTag=Congruent}[Not in agreement or harmony.]</nowiki>
+*** Involuntary <nowiki>{relatedTag=Voluntary}[An action that is not made by choice. In the body, involuntary actions (such as blushing) occur automatically, and cannot be controlled by choice.]</nowiki>
+*** Masked <nowiki>{relatedTag=Unmasked}[Information exists but is not provided or is partially obscured due to security,  privacy, or other concerns.]</nowiki>
+*** Normal <nowiki>{relatedTag=Abnormal}[Being approximately average or within certain limits; conforming with or constituting a norm or standard or level or type or social norm.]</nowiki>
+*** Ordered <nowiki>{relatedTag=Disordered}[Conforming to a logical or comprehensible arrangement of separate elements; a condition of regular or proper arrangement.]</nowiki>
+*** Symmetrical <nowiki>{relatedTag=Asymmetrical}[Made up of exactly similar parts facing each other or around an axis; showing symmetry.]</nowiki>
+*** Unconstrained <nowiki>{relatedTag=Constrained}[Moving without restriction.]</nowiki>
+*** Unfamiliar <nowiki>{relatedTag=Familiar,relatedTag=Famous}[Not having knowledge or experience of.]</nowiki>
+*** Unmasked <nowiki>{relatedTag=Masked}[Information is revealed.]</nowiki>
+*** Voluntary <nowiki>{relatedTag=Involuntary}[Using free will or design; not forced or compelled; controlled by individual volition.]</nowiki>
+** Categorical-level <nowiki>[Categorical values based on dividing a continuous variable into levels such as high and low.]</nowiki>
+*** Deep <nowiki>{relatedTag=Shallow}[Extending relatively far inward or downward.]</nowiki>
+*** High <nowiki>{relatedTag=Low, relatedTag=Medium}[Having an elevated level or position or degree; having a greater than normal in degree or intensity or amount.]</nowiki>
+*** Liminal <nowiki>{relatedTag=Subliminal, relatedTag=Supraliminal}[Situated at a sensory threshold; barely perceptible or capable of eliciting a response.]</nowiki>
+*** Low <nowiki>{relatedTag=High}[A minimum level or position or degree; less than normal in degree, intensity or amount.]</nowiki>
+*** Medium <nowiki>{relatedTag=Low, relatedTag=High}[Mid-way between small and large in number, quantity, magnitude or extent.]</nowiki>
+*** Negative <nowiki>{relatedTag=Positive}[Involving disadvantage or harm.]</nowiki>
+*** Positive <nowiki>{relatedTag=Negative}[Involving advantage or good.]</nowiki>
+*** Shallow <nowiki>{relatedTag=Deep}[Having a depth which is relatively low.]</nowiki>
+*** Subliminal <nowiki>{relatedTag=Liminal, relatedTag=Supraliminal}[Situated below a sensory threshold; imperceptible or not capable of eliciting a response.]</nowiki>
+*** Supraliminal <nowiki>{relatedTag=Liminal, relatedTag=Subliminal}[Situated above a sensory threshold; perceptible or capable of eliciting a response.]</nowiki>
+*** Thick <nowiki>{relatedTag=Thin}[Wide in width, extent or cross-section.]</nowiki>
+*** Thin <nowiki>{relatedTag=Thick}[Narrow in width, extent or cross-section.]</nowiki>
+* Descriptive <nowiki>[Involving a written or verbal account, representation, statement, or explanation of something.]</nowiki>
+** Abstract <nowiki>[A concept or idea not associated with any specific instance.]</nowiki>
+** Clinical <nowiki>[Relating to the examination and treatment of patients dependent on direct observation.]</nowiki>
+** Complex <nowiki>[Hard, involved or complicated, elaborate, having many parts.]</nowiki>
+** Composite <nowiki>[Consisting of separate interconnected parts.]</nowiki>
+** Numerical <nowiki>[A numeral or string of numerals expressing value, quantity, or identification.]</nowiki>
+** Symbolic <nowiki>[A representation such as a tattoo with a specific meaning. Significant purely in terms of what is being represented or implied.]</nowiki>
+* Sensory <nowiki>[Relating to sensation or the physical senses; transmitted or perceived by the senses.]</nowiki>
+** Auditory <nowiki>[Of or relating to the process of hearing.]</nowiki>
+*** Audible <nowiki>[Any action or condition designed to cause the registration or perception of a stimulus by organs and receptors involved in the sense of hearing.]</nowiki>
+*** Loudness <nowiki>[A physical quality inhering in a sound wave by virtue of the maximum magnitude (value without regard to sign) of its disturbance.]</nowiki>
+**** <nowiki># {takesValue, isNumeric}</nowiki>
+*** Monophonic <nowiki> [Relating to sound transmission, recording, or reproduction involving a single transmission path.]</nowiki>
+*** Silent <nowiki>[The absence of ambient audible sound, the emission of sounds of such low intensity that they do not draw attention to themselves, or the state of having ceased to produce sounds.]</nowiki>
+*** Stereophonic <nowiki> [Relating to, or constituting sound reproduction involving the use of separated microphones and two transmission channels to achieve the sound separation of a live hearing.]</nowiki>
+*** Timbre <nowiki>[The quality of tone distinctive of a particular singing voice or musical instrument.]</nowiki>
+** Gustatory <nowiki>[Concerned with tasting or the sense of taste.]</nowiki>
+*** Bitter <nowiki>[Having a sharp, pungent taste.]</nowiki>
+*** Salty <nowiki>[Tasting of or like salt.]</nowiki>
+*** Savory <nowiki>[Belonging to a taste that is salty or spicy rather than sweet.]</nowiki>
+*** Sour <nowiki>[Having a sharp, acidic taste.]</nowiki>
+*** Sweet <nowiki>[Having or resembling the taste of sugar.]</nowiki>
+** Tactile <nowiki>[Of or connected with the sense of touch.]</nowiki>
+*** Tactile-pressure <nowiki>[Having a feeling of heaviness.]</nowiki>
+*** Tactile-texture <nowiki>[Having a feeling of roughness.]</nowiki>
+*** Tactile-vibration <nowiki>[Having a feeling of mechanical oscillation.]</nowiki>
+** Olfactory <nowiki>[Having to do with the faculty of smell.]</nowiki>
+** Somatic <nowiki>[Having to do with feelings in the body.]</nowiki>
+*** Pain <nowiki>[The sensation of discomfort, distress, or agony, resulting from the stimulation of specialized nerve endings.]</nowiki>
+*** Stress <nowiki>[The negative mental, emotional, and physical reactions that occur when environmental stressors are perceived as exceeding the adaptive capacities of the individual.]</nowiki>
+** Vestibular <nowiki>[Relating to or affecting the perception of body position and movement.]</nowiki>
+** Visual <nowiki>[Relating to or using sight; able to be seen.]</nowiki>
+*** Luminance <nowiki>[A quality that exists by virtue of the luminous intensity per unit area projected in a given direction.]</nowiki>
+*** Color <nowiki>[The appearance of objects (or light sources) described in terms of perception of their hue and lightness (or brightness) and saturation.]</nowiki>
+**** Color-shade <nowiki>[A slight degree of difference between colors, especially with regard to how light or dark it is or as distinguished from one nearly like it.]</nowiki>
+***** Dark-shade <nowiki>[A color tone not reflecting much light.]</nowiki>
+***** Light-shade <nowiki>[A color tone reflecting more light.]</nowiki>
+**** HSV-color <nowiki>[A color representation that models how colors appear under light.]</nowiki>
+***** Hue <nowiki>[Attribute of a visual sensation according to which an area appears to be similar to one of the perceived colors.]</nowiki>
+****** <nowiki># {takesValue, isNumeric} [Angular value between 0 and 360]</nowiki>
+***** Saturation <nowiki>[Colorfulness of a stimulus relative to its own brightness.]</nowiki>
+****** <nowiki># {takesValue, isNumeric} [B value of RGB between 0 and 1]</nowiki>
+***** HSV-value <nowiki>[AAttribute of a visual sensation according to which an area appears to emit more or less light.]</nowiki>
+****** <nowiki># {takesValue, isNumeric}</nowiki>
+**** RGB-color <nowiki>[A color from the RGB schema.]</nowiki>
+***** RGB-red <nowiki>[The red component.]</nowiki>
+****** <nowiki># {takesValue, isNumeric} [R value of RGB between 0 and 1]</nowiki>
+***** RGB-blue <nowiki>[The blue component.]</nowiki>
+****** <nowiki># {takesValue, isNumeric} [B value of RGB between 0 and 1]</nowiki>
+***** RGB-green <nowiki>[The green component.]</nowiki>
+****** <nowiki># {takesValue, isNumeric} [G value of RGB between 0 and 1]</nowiki>
+**** Grayscale <nowiki>[Using a color map composed of shades of gray, varying from black at the weakest intensity to white at the strongest.]</nowiki>
+***** <nowiki># {takesValue, isNumeric} [White intensity between 0 and 1]</nowiki>
+**** CSS-color <nowiki>[One of 140 colors supported by all browsers. For more details such as the color RGB or HEX values,  check:  https://www.w3schools.com/colors/colors_groups.asp]</nowiki>
+***** Blue-color <nowiki>[CSS color group]</nowiki>
+****** CadetBlue <nowiki>[CSS-color 0x5F9EA0]</nowiki>
+****** SteelBlue <nowiki>[CSS-color 0x4682B4]</nowiki>
+****** LightSteelBlue <nowiki>[CSS-color 0xB0C4DE]</nowiki>
+****** LightBlue <nowiki>[CSS-color 0xADD8E6]</nowiki>
+****** PowderBlue <nowiki>[CSS-color 0xB0E0E6]</nowiki>
+****** LightSkyBlue <nowiki>[CSS-color 0x87CEFA]</nowiki>
+****** SkyBlue <nowiki>[CSS-color 0x87CEEB]</nowiki>
+****** CornflowerBlue <nowiki>[CSS-color 0x6495ED]</nowiki>
+****** DeepSkyBlue <nowiki>[CSS-color 0x00BFFF]</nowiki>
+****** DodgerBlue <nowiki>[CSS-color 0x1E90FF]</nowiki>
+****** RoyalBlue <nowiki>[CSS-color 0x4169E1]</nowiki>
+****** Blue <nowiki>[CSS-color 0x0000FF]</nowiki>
+****** MediumBlue <nowiki>[CSS-color 0x0000CD]</nowiki>
+****** DarkBlue <nowiki>[CSS-color 0x00008B]</nowiki>
+****** Navy <nowiki>[CSS-color 0x000080]</nowiki>
+****** MidnightBlue <nowiki>[CSS-color 0x191970]</nowiki>
+***** Brown-color <nowiki>[CSS color group]</nowiki>
+****** Cornsilk <nowiki>[CSS-color 0xFFF8DC]</nowiki>
+****** BlanchedAlmond <nowiki>[CSS-color 0xFFEBCD]</nowiki>
+****** Bisque <nowiki>[CSS-color 0xFFE4C4]</nowiki>
+****** NavajoWhite <nowiki>[CSS-color 0xFFDEAD]</nowiki>
+****** Wheat <nowiki>[CSS-color 0xF5DEB3]</nowiki>
+****** BurlyWood <nowiki>[CSS-color 0xDEB887]</nowiki>
+****** Tan <nowiki>[CSS-color 0xD2B48C]</nowiki>
+****** RosyBrown <nowiki>[CSS-color 0xBC8F8F]</nowiki>
+****** SandyBrown <nowiki>[CSS-color 0xF4A460]</nowiki>
+****** GoldenRod <nowiki>[CSS-color 0xDAA520]</nowiki>
+****** DarkGoldenRod <nowiki>[CSS-color 0xB8860B]</nowiki>
+****** Peru <nowiki>[CSS-color 0xCD853F]</nowiki>
+****** Chocolate <nowiki>[CSS-color 0xD2691E]</nowiki>
+****** Olive <nowiki>[CSS-color 0x808000]</nowiki>
+****** SaddleBrown <nowiki>[CSS-color 0x8B4513]</nowiki>
+****** Sienna <nowiki>[CSS-color 0xA0522D]</nowiki>
+****** Brown <nowiki>[CSS-color 0xA52A2A]</nowiki>
+****** Maroon <nowiki>[CSS-color 0x800000]</nowiki>
+***** Cyan-color <nowiki>[CSS color group]</nowiki>
+****** Aqua <nowiki>[CSS-color 0x00FFFF]</nowiki>
+****** Cyan <nowiki>[CSS-color 0x00FFFF]</nowiki>
+****** LightCyan <nowiki>[CSS-color 0xE0FFFF]</nowiki>
+****** PaleTurquoise <nowiki>[CSS-color 0xAFEEEE]</nowiki>
+****** Aquamarine <nowiki>[CSS-color 0x7FFFD4]</nowiki>
+****** Turquoise <nowiki>[CSS-color 0x40E0D0]</nowiki>
+****** MediumTurquoise <nowiki>[CSS-color 0x48D1CC]</nowiki>
+****** DarkTurquoise <nowiki>[CSS-color 0x00CED1]</nowiki>
+***** Green-color <nowiki>[CSS color group]</nowiki>
+****** GreenYellow <nowiki>[CSS-color 0xADFF2F]</nowiki>
+****** Chartreuse <nowiki>[CSS-color 0x7FFF00]</nowiki>
+****** LawnGreen <nowiki>[CSS-color 0x7CFC00]</nowiki>
+****** Lime <nowiki>[CSS-color 0x00FF00]</nowiki>
+****** LimeGreen <nowiki>[CSS-color 0x32CD32]</nowiki>
+****** PaleGreen <nowiki>[CSS-color 0x98FB98]</nowiki>
+****** LightGreen <nowiki>[CSS-color 0x90EE90]</nowiki>
+****** MediumSpringGreen <nowiki>[CSS-color 0x00FA9A]</nowiki>
+****** SpringGreen <nowiki>[CSS-color 0x00FF7F]</nowiki>
+****** MediumSeaGreen <nowiki>[CSS-color 0x3CB371]</nowiki>
+****** SeaGreen <nowiki>[CSS-color 0x2E8B57]</nowiki>
+****** ForestGreen <nowiki>[CSS-color 0x228B22]</nowiki>
+****** Green <nowiki>[CSS-color 0x008000]</nowiki>
+****** DarkGreen <nowiki>[CSS-color 0x006400]</nowiki>
+****** YellowGreen <nowiki>[CSS-color 0x9ACD32]</nowiki>
+****** OliveDrab <nowiki>[CSS-color 0x6B8E23]</nowiki>
+****** DarkOliveGreen <nowiki>[CSS-color 0x556B2F]</nowiki>
+****** MediumAquaMarine <nowiki>[CSS-color 0x66CDAA]</nowiki>
+****** DarkSeaGreen <nowiki>[CSS-color 0x8FBC8F]</nowiki>
+****** LightSeaGreen <nowiki>[CSS-color 0x20B2AA]</nowiki>
+****** DarkCyan <nowiki>[CSS-color 0x008B8B]</nowiki>
+****** Teal <nowiki>[CSS-color 0x008080]</nowiki>
+***** Gray-color <nowiki>[CSS color group]</nowiki>
+****** Gainsboro <nowiki>[CSS-color 0xDCDCDC]</nowiki>
+****** LightGray <nowiki>[CSS-color 0xD3D3D3]</nowiki>
+****** Silver <nowiki>[CSS-color 0xC0C0C0]</nowiki>
+****** DarkGray <nowiki>[CSS-color 0xA9A9A9]</nowiki>
+****** DimGray <nowiki>[CSS-color 0x696969]</nowiki>
+****** Gray <nowiki>[CSS-color 0x808080]</nowiki>
+****** LightSlateGray <nowiki>[CSS-color 0x778899]</nowiki>
+****** SlateGray <nowiki>[CSS-color 0x708090]</nowiki>
+****** DarkSlateGray <nowiki>[CSS-color 0x2F4F4F]</nowiki>
+****** Black <nowiki>[CSS-color 0x000000]</nowiki>
+***** Orange-color <nowiki>[CSS color group]</nowiki>
+****** Orange <nowiki>[CSS-color 0xFFA500]</nowiki>
+****** DarkOrange <nowiki>[CSS-color 0xFF8C00]</nowiki>
+****** Coral <nowiki>[CSS-color 0xFF7F50]</nowiki>
+****** Tomato <nowiki>[CSS-color 0xFF6347]</nowiki>
+****** OrangeRed <nowiki>[CSS-color 0xFF4500]</nowiki>
+***** Pink-color <nowiki>[CSS color group]</nowiki>
+****** Pink <nowiki>[CSS-color 0xFFC0CB]</nowiki>
+****** LightPink <nowiki>[CSS-color 0xFFB6C1]</nowiki>
+****** HotPink <nowiki>[CSS-color 0xFF69B4]</nowiki>
+****** DeepPink <nowiki>[CSS-color 0xFF1493]</nowiki>
+****** PaleVioletRed <nowiki>[CSS-color 0xDB7093]</nowiki>
+****** MediumVioletRed <nowiki>[CSS-color 0xC71585]</nowiki>
+***** Purple-color <nowiki>[CSS color group]</nowiki>
+****** Lavender <nowiki>[CSS-color 0xE6E6FA]</nowiki>
+****** Thistle <nowiki>[CSS-color 0xD8BFD8]</nowiki>
+****** Plum <nowiki>[CSS-color 0xDDA0DD]</nowiki>
+****** Orchid <nowiki>[CSS-color 0xDA70D6]</nowiki>
+****** Violet <nowiki>[CSS-color 0xEE82EE]</nowiki>
+****** Fuchsia <nowiki>[CSS-color 0xFF00FF]</nowiki>
+****** Magenta <nowiki>[CSS-color 0xFF00FF]</nowiki>
+****** MediumOrchid <nowiki>[CSS-color 0xBA55D3]</nowiki>
+****** DarkOrchid <nowiki>[CSS-color 0x9932CC]</nowiki>
+****** DarkViolet <nowiki>[CSS-color 0x9400D3]</nowiki>
+****** BlueViolet <nowiki>[CSS-color 0x8A2BE2]</nowiki>
+****** DarkMagenta <nowiki>[CSS-color 0x8B008B]</nowiki>
+****** Purple <nowiki>[CSS-color 0x800080]</nowiki>
+****** MediumPurple <nowiki>[CSS-color 0x9370DB]</nowiki>
+****** MediumSlateBlue <nowiki>[CSS-color 0x7B68EE]</nowiki>
+****** SlateBlue <nowiki>[CSS-color 0x6A5ACD]</nowiki>
+****** DarkSlateBlue <nowiki>[CSS-color 0x483D8B]</nowiki>
+****** RebeccaPurple <nowiki>[CSS-color 0x663399]</nowiki>
+****** Indigo <nowiki>[CSS-color 0x4B0082]</nowiki>
+***** Red-color <nowiki>[CSS color group]</nowiki>
+****** LightSalmon <nowiki>[CSS-color 0xFFA07A]</nowiki>
+****** Salmon <nowiki>[CSS-color 0xFA8072]</nowiki>
+****** DarkSalmon <nowiki>[CSS-color 0xE9967A]</nowiki>
+****** LightCoral <nowiki>[CSS-color 0xF08080]</nowiki>
+****** IndianRed <nowiki>[CSS-color 0xCD5C5C]</nowiki>
+****** Crimson <nowiki>[CSS-color 0xDC143C]</nowiki>
+****** Red <nowiki>[CSS-color 0xFF0000]</nowiki>
+****** FireBrick <nowiki>[CSS-color 0xB22222]</nowiki>
+****** DarkRed <nowiki>[CSS-color 0x8B0000]</nowiki>
+***** Yellow-color <nowiki>[CSS color group]</nowiki>
+****** Gold <nowiki>[CSS-color 0xFFD700]</nowiki>
+****** Yellow <nowiki>[CSS-color 0xFFFF00]</nowiki>
+****** LightYellow <nowiki>[CSS-color 0xFFFFE0]</nowiki>
+****** LemonChiffon <nowiki>[CSS-color 0xFFFACD]</nowiki>
+****** LightGoldenRodYellow <nowiki>[CSS-color 0xFAFAD2]</nowiki>
+****** PapayaWhip <nowiki>[CSS-color 0xFFEFD5]</nowiki>
+****** Moccasin <nowiki>[CSS-color 0xFFE4B5]</nowiki>
+****** PeachPuff <nowiki>[CSS-color 0xFFDAB9]</nowiki>
+****** PaleGoldenRod <nowiki>[CSS-color 0xEEE8AA]</nowiki>
+****** Khaki <nowiki>[CSS-color 0xF0E68C]</nowiki>
+****** DarkKhaki <nowiki>[CSS-color 0xBDB76B]</nowiki>
+***** White-color <nowiki>[CSS color group]</nowiki>
+****** White <nowiki>[CSS-color 0xFFFFFF]</nowiki>
+****** Snow <nowiki>[CSS-color 0xFFFAFA]</nowiki>
+****** HoneyDew <nowiki>[CSS-color 0xF0FFF0]</nowiki>
+****** MintCream <nowiki>[CSS-color 0xF5FFFA]</nowiki>
+****** Azure <nowiki>[CSS-color 0xF0FFFF]</nowiki>
+****** AliceBlue <nowiki>[CSS-color 0xF0F8FF]</nowiki>
+****** GhostWhite <nowiki>[CSS-color 0xF8F8FF]</nowiki>
+****** WhiteSmoke <nowiki>[CSS-color 0xF5F5F5]</nowiki>
+****** SeaShell <nowiki>[CSS-color 0xFFF5EE]</nowiki>
+****** Beige <nowiki>[CSS-color 0xF5F5DC]</nowiki>
+****** OldLace <nowiki>[CSS-color 0xFDF5E6]</nowiki>
+****** FloralWhite <nowiki>[CSS-color 0xFFFAF0]</nowiki>
+****** Ivory <nowiki>[CSS-color 0xFFFFF0]</nowiki>
+****** AntiqueWhite <nowiki>[CSS-color 0xFAEBD7]</nowiki>
+****** Linen <nowiki>[CSS-color 0xFAF0E6]</nowiki>
+****** LavenderBlush <nowiki>[CSS-color 0xFFF0F5]</nowiki>
+****** MistyRose <nowiki>[CSS-color 0xFFE4E1]</nowiki>
+*** View <nowiki>[A specific visual representation of data, situations, topics, etc.]</nowiki>
+**** 2D-view <nowiki>[A view showing only two dimensions.]</nowiki>
+**** 3D-view <nowiki>[A view showing three dimensions.]</nowiki>
+**** Background-view <nowiki>[Parts of the view that are farthest from the viewer and usually the not part of the visual focus.]</nowiki>
+**** Bistable-view <nowiki>[Something having two stable visual forms that have two distinguishable stable forms as in optical illusions.]</nowiki>
+**** Foreground-view <nowiki>[Parts of the view that are closest to the viewer and usually the most important part of the visual focus.]</nowiki>
+**** Foveal-view <nowiki>[Visual presentation directly on the fovea. A view projected on the small depression in the retina containing only cones and where vision is most acute.]</nowiki>
+**** Map-view <nowiki>[A diagrammatic representation of an area of land or sea showing physical features, cities, roads.]</nowiki>
+***** Aerial-view <nowiki>[Elevated view of an object from above, with a perspective as though the observer were a bird.]</nowiki>
+***** Satellite-view <nowiki>[A representation as captured by technology such as a satellite.]</nowiki>
+***** Street-view <nowiki>[A 360-degrees panoramic view from a position on the ground.]</nowiki>
+**** Peripheral-view <nowiki>[Indirect vision as it occurs outside the point of fixation.]</nowiki>
+* Environmental <nowiki>[Relating to or arising from the surroundings of an agent.]</nowiki>
+** Indoors <nowiki>[Located inside a building or enclosure.]</nowiki>
+** Outdoors <nowiki>[Any area outside a building or shelter.]</nowiki>
+** Real-world <nowiki>[Located in a place that exists in real space and time under realistic conditions.]</nowiki>
+** Virtual-world <nowiki>[Using technology that creates immersive, computer-generated experiences that a person can interact with and navigate through. The digital content is generally delivered to the user through some type of headset and responds to changes in head position or through interaction with other types of sensors. Existing in a virtual setting such as a simulation or game environment.]</nowiki>
+** Augmented-reality <nowiki>[Using technology that enhances real-world experiences with computer-derived digital overlays to change some aspects of perception of the natural environment. The digital content is shown to the user through a smart device or glasses and responds to changes in the environment.]</nowiki>
+** Motion-platform <nowiki>[A mechanism that creates the feelings of being in a real motion environment.]</nowiki>
+** Urban <nowiki>[Relating to, located in, or characteristic of a city or densely populated area.]</nowiki>
+** Rural <nowiki>[Of or pertaining to the country as opposed to the city.]</nowiki>
+*** Wooden-walkway <nowiki>[A path made out of wood.]</nowiki>
+** Terrain <nowiki>[Characterization of the physical features of a tract of land.]</nowiki>
+*** Composite-terrain <nowiki>[Tracts of land characterized by a mixure of physical features.]</nowiki>
+*** Dirt-terrain <nowiki>[Tracts of land characterized by a soil surface and lack of vegetation.]</nowiki>
+*** Grassy-terrain <nowiki>[Tracts of land covered by grass.]</nowiki>
+*** Gravel-terrain <nowiki>[Tracts of land covered by a surface consisting a loose aggregation of small water-worn or pounded stones.]</nowiki>
+*** Leaf-covered-terrain <nowiki>[Tracts of land covered by leaves and composited organic material.]</nowiki>
+*** Muddy-terrain <nowiki>[Tracts of land covered by a liquid or semi-liquid mixture of water and some combination of soil, silt, and clay.]</nowiki>
+*** Paved-terrain <nowiki>[Tracts of land covered  with concrete, asphalt, stones, or bricks.]</nowiki>
+*** Rocky-terrain <nowiki>[Tracts of land consisting or full of rock or rocks.]</nowiki>
+*** Sloped-terrain <nowiki>[Tracts of land arranged in a sloping position; inclined.]</nowiki>
+*** Uneven-terrain <nowiki>[Tracts of land that are not level, smooth, or regular.]</nowiki>
+* Anatomical <nowiki>[Relating to bodily structure.]</nowiki>
+
+!# end schema
+
+'''Unit classes''' <nowiki>[Unit classes and the units for the nodes.]</nowiki>
+* acceleration <nowiki>{defaultUnits=m-per-s^2}</nowiki>
+** m-per-s^2 <nowiki>{SIUnit, unitSymbol}</nowiki>
+* angle <nowiki>{defaultUnits=radian}</nowiki>
+** radian <nowiki>{SIUnit}</nowiki>
+** rad <nowiki>{SIUnit, unitSymbol}</nowiki>
+** degree
+* area <nowiki>{defaultUnits=m^2}</nowiki>
+** m^2 <nowiki>{SIUnit, unitSymbol}</nowiki>
+** px^2 <nowiki>{unitSymbol}</nowiki>
+** pixel^2
+* currency <nowiki>{defaultUnits=$, allowedCharacter=$}</nowiki>
+** dollar
+** $ <nowiki>{unitPrefix, unitSymbol}</nowiki>
+** point
+* dateTime <nowiki>{defaultUnits=YYYY-MM-DDThh:mm:ss, allowedCharacter=:,allowedCharacter=-}</nowiki>
+** YYYY-MM-DDThh:mm:ss <nowiki>[Date-times should conform to ISO8601 date-time format. Any variation on the full form is allowed.]</nowiki>
+* frequency <nowiki>{defaultUnits=Hz}</nowiki>
+** hertz  <nowiki>{SIUnit}</nowiki>
+** Hz <nowiki>{SIUnit, unitSymbol}</nowiki>
+* intensity <nowiki>{defaultUnits=dB}</nowiki>
+** dB <nowiki>{unitSymbol}</nowiki>
+* jerk <nowiki>{defaultUnits=m-per-s^3}</nowiki>
+** m-per-s^3 <nowiki>{unitSymbol}</nowiki>
+* luminousIntensity <nowiki>{defaultUnits=cd}</nowiki>
+** candela <nowiki>{SIUnit}</nowiki>
+** cd <nowiki>{SIUnit, unitSymbol}</nowiki>
+* memorySize <nowiki>{defaultUnits=B}</nowiki>
+** byte <nowiki>{SIUnit}</nowiki>
+** B <nowiki>{SIUnit, unitSymbol}</nowiki>
+* posixPath <nowiki>{allowedCharacter=/,allowedCharacter=:}[Posix path specification.]</nowiki>
+* physicalLength <nowiki>{defaultUnits=m}</nowiki>
+** metre <nowiki>{SIUnit}</nowiki>
+** m <nowiki>{SIUnit, unitSymbol}</nowiki>
+** foot
+** mile
+* pixels <nowiki>{defaultUnits=px}</nowiki>
+** pixel
+** px <nowiki>{unitSymbol}</nowiki>
+* speed <nowiki>{defaultUnits=m-per-s}</nowiki>
+** m-per-s <nowiki>{SIUnit, unitSymbol}</nowiki>
+** mph <nowiki>{unitSymbol}</nowiki>
+** kph <nowiki>{unitSymbol}</nowiki>
+* time <nowiki>{defaultUnits=s}</nowiki>
+** second <nowiki>{SIUnit}</nowiki>
+** s <nowiki>{SIUnit, unitSymbol}</nowiki>
+** day
+** minute
+** hour <nowiki>[Should be in 24-hour format.]</nowiki>
+* volume <nowiki>{defaultUnits=m^3}</nowiki>
+** m^3 <nowiki>{SIUnit, unitSymbol}</nowiki>
+
+
+'''Unit modifiers''' <nowiki>[Unit multiples and submultiples.]</nowiki>
+* deca <nowiki>{SIUnitModifier} [SI unit multiple representing 10^1]</nowiki>
+* da <nowiki>{SIUnitSymbolModifier} [SI unit multiple representing 10^1]</nowiki>
+* hecto <nowiki>{SIUnitModifier} [SI unit multiple representing 10^2]</nowiki>
+* h <nowiki>{SIUnitSymbolModifier} [SI unit multiple representing 10^2]</nowiki>
+* kilo <nowiki>{SIUnitModifier} [SI unit multiple representing 10^3]</nowiki>
+* k <nowiki>{SIUnitSymbolModifier} [SI unit multiple representing 10^3]</nowiki>
+* mega <nowiki>{SIUnitModifier} [SI unit multiple representing 10^6]</nowiki>
+* M <nowiki>{SIUnitSymbolModifier} [SI unit multiple representing 10^6]</nowiki>
+* giga <nowiki>{SIUnitModifier} [SI unit multiple representing 10^9]</nowiki>
+* G <nowiki>{SIUnitSymbolModifier} [SI unit multiple representing 10^9]</nowiki>
+* tera <nowiki>{SIUnitModifier} [SI unit multiple representing 10^12]</nowiki>
+* T <nowiki>{SIUnitSymbolModifier} [SI unit multiple representing 10^12]</nowiki>
+* peta <nowiki>{SIUnitModifier} [SI unit multiple representing 10^15]</nowiki>
+* P <nowiki>{SIUnitSymbolModifier} [SI unit multiple representing 10^15]</nowiki>
+* exa <nowiki>{SIUnitModifier} [SI unit multiple representing 10^18]</nowiki>
+* E <nowiki>{SIUnitSymbolModifier} [SI unit multiple representing 10^18]</nowiki>
+* zetta <nowiki>{SIUnitModifier} [SI unit multiple representing 10^21]</nowiki>
+* Z <nowiki>{SIUnitSymbolModifier} [SI unit multiple representing 10^21]</nowiki>
+* yotta <nowiki>{SIUnitModifier} [SI unit multiple representing 10^24]</nowiki>
+* Y <nowiki>{SIUnitSymbolModifier} [SI unit multiple representing 10^24]</nowiki>
+* deci <nowiki>{SIUnitModifier} [SI unit submultiple representing 10^-1]</nowiki>
+* d <nowiki>{SIUnitSymbolModifier} [SI unit submultiple representing 10^-1]</nowiki>
+* centi <nowiki>{SIUnitModifier} [SI unit submultiple representing 10^-2]</nowiki>
+* c <nowiki>{SIUnitSymbolModifier} [SI unit submultiple representing 10^-2]</nowiki>
+* milli <nowiki>{SIUnitModifier} [SI unit submultiple representing 10^-3]</nowiki>
+* m <nowiki>{SIUnitSymbolModifier} [SI unit submultiple representing 10^-3]</nowiki>
+* micro <nowiki>{SIUnitModifier} [SI unit submultiple representing 10^-6]</nowiki>
+* u <nowiki>{SIUnitSymbolModifier} [SI unit submultiple representing 10^-6]</nowiki>
+* nano <nowiki>{SIUnitModifier} [SI unit submultiple representing 10^-9]</nowiki>
+* n <nowiki>{SIUnitSymbolModifier} [SI unit submultiple representing 10^-9]</nowiki>
+* pico <nowiki>{SIUnitModifier} [SI unit submultiple representing 10^-12]</nowiki>
+* p <nowiki>{SIUnitSymbolModifier} [SI unit submultiple representing 10^-12]</nowiki>
+* femto <nowiki>{SIUnitModifier} [SI unit submultiple representing 10^-15]</nowiki>
+* f <nowiki>{SIUnitSymbolModifier} [SI unit submultiple representing 10^-15]</nowiki>
+* atto <nowiki>{SIUnitModifier} [SI unit submultiple representing 10^-18]</nowiki>
+* a <nowiki>{SIUnitSymbolModifier} [SI unit submultiple representing 10^-18]</nowiki>
+* zepto <nowiki>{SIUnitModifier} [SI unit submultiple representing 10^-21]</nowiki>
+* z <nowiki>{SIUnitSymbolModifier} [SI unit submultiple representing 10^-21]</nowiki>
+* yocto <nowiki>{SIUnitModifier} [SI unit submultiple representing 10^-24]</nowiki>
+* y <nowiki>{SIUnitSymbolModifier} [SI unit submultiple representing 10^-24]</nowiki>
+
+
+'''Schema attributes''' <nowiki>[Allowed node attributes.]</nowiki>
+* allowedCharacter <nowiki>{unitClassProperty}[A schema attribute of unit classes specifying a special character that is allowed in expressing the value of a placeholder with those units.]</nowiki>
+* defaultUnits <nowiki>{unitClassProperty}[A schema attribute of unit classes specifying the default units for a tag.]</nowiki>
+* extensionAllowed <nowiki>{boolProperty}[A schema attribute indicating that users can add unlimited levels of child nodes under this tag.]</nowiki>
+* isNumeric <nowiki>{boolProperty}[A schema attribute indicating that the tag hashtag placeholder must be replaced by a numerical value.]</nowiki>
+* recommended  <nowiki>{boolProperty}[A schema attribute indicating that the event-level HED string should include this tag.]</nowiki>
+* relatedTag <nowiki>[A schema attribute suggesting HED tags that are closely related to this tag. This attribute is used by tagging tools.]</nowiki>
+* requireChild  <nowiki>{boolProperty}[A schema attribute indicating that one of the node elements descendants must be included when using this tag.]</nowiki>
+* required <nowiki>{boolProperty}[A schema attribute indicating that every event-level HED string should include this tag.]</nowiki>
+* SIUnit  <nowiki>{boolProperty, unitProperty}[A schema attribute indicating that this unit element is an SI unit and can be modified by multiple and submultiple names. Note that some units such as byte are designated as SI units although they are not part of the standard.]</nowiki>
+* SIUnitModifier <nowiki>{boolProperty, unitModifierProperty}[A schema attribute indicating that this SI unit modifier represents a multiple or submultiple of a base unit rather than a unit symbol.]</nowiki>
+* SIUnitSymbolModifier <nowiki>{boolProperty, unitModifierProperty}[A schema attribute indicating that this SI unit modifier represents a multiple or submultiple of a unit symbol rather than a base symbol.]</nowiki>
+* suggestedTag <nowiki>[A schema attribute that indicates another tag  that is often associated with this tag. This attribute is used by tagging tools to provide tagging suggestions.]</nowiki>
+* tagGroup <nowiki>{boolProperty}[A schema attribute indicating the tag can only appear inside a tag group.] </nowiki>
+* takesValue <nowiki>{boolProperty}[A schema attribute indicating the tag is a hashtag placeholder which is expected to be replaced with a user-defined value.] </nowiki>
+* topLevelTagGroup <nowiki>{boolProperty}[A schema attribute indicating that this tag (or its descendants) can only appear in a top-level tag group.] </nowiki>
+* unique <nowiki>{boolProperty}[A schema attribute indicating that only one of this tag or its descendants can be used  in the event-level HED string.]</nowiki>
+* unitClass <nowiki>[A schema attribute specifying which unit class this value tag belongs to.]</nowiki>
+* unitPrefix <nowiki>{boolProperty, unitProperty}[A schema attribute applied specifically to unit elements to designate that the unit indicator is a prefix (e.g., dollar sign in the currency units).]</nowiki>
+* unitSymbol <nowiki>{boolProperty, unitProperty}[A schema attribute indicating this tag is an abbreviation or symbol representing a type of unit. Unit symbols represent both the singular and the plural and thus cannot be pluralized.]</nowiki>
+
+'''Properties'''
+* boolProperty <nowiki>[Indicates that the schema attribute represents something that is either true or false and does not have a value. Attributes without this value are assumed to have string values.]</nowiki>
+* unitClassProperty <nowiki>[Indicates that the schema attribute is meant to be applied to unit classes.]</nowiki>
+* unitModifierProperty <nowiki>[Indicates that the schema attribute is meant to be applied to unit modifier classes.]</nowiki>
+* unitProperty <nowiki>[Indicates that the schema attribute is meant to be applied to units within a unit class.]</nowiki>
+* testingNewProperty <nowiki>[New Test Property]</nowiki>
+
+'''Epilogue'''
+This is the new format for the mediawiki schema. The schema attributes are designed to be checked in software rather than hard-coded. The schema attributes, themselves have properties.
+
+!# end hed
\ No newline at end of file
diff --git a/hedtools/tests/data/hed_pairs/unknown_attribute.xml b/hedtools/tests/data/hed_pairs/unknown_attribute.xml
new file mode 100644
index 000000000..6ba55c113
--- /dev/null
+++ b/hedtools/tests/data/hed_pairs/unknown_attribute.xml
@@ -0,0 +1,5678 @@
+<?xml version="1.0" ?>
+<HED version="8.0.0-beta.1">
+   <schema>
+      <node>
+         <name>Event</name>
+         <description>Something that happens at a given place and time. Elements of this subtree designate the general category in which an event falls.</description>
+         <attribute>
+            <name>suggestedTag</name>
+            <value>Task-property</value>
+         </attribute>
+         <attribute>
+            <name>unknownAttribute</name>
+         </attribute>
+         <node>
+            <name>Sensory-event</name>
+            <description>Something perceivable by an agent. An event meant to be an experimental stimulus should also be tagged with Task-event-role/Experiment-stimulus.</description>
+            <attribute>
+               <name>suggestedTag</name>
+               <value>Task-event-role</value>
+            </attribute>
+         </node>
+         <node>
+            <name>Agent-action</name>
+            <description>Any action engaged in by an agent. An event that is a participant response to an experiment stimulus should also be tagged with Agent-property/Agent-task-role/Participant-response.</description>
+            <attribute>
+               <name>suggestedTag</name>
+               <value>Task-role</value>
+            </attribute>
+         </node>
+         <node>
+            <name>Data-feature</name>
+            <description>An event derived from the data itself or possibly inserted in a post-hoc fashion. Examples are markers for interictal spikes or alpha bursts.</description>
+            <attribute>
+               <name>suggestedTag</name>
+               <value>Data-property</value>
+            </attribute>
+         </node>
+         <node>
+            <name>Experiment-control</name>
+            <description>An event pertaining to the control of the experiment during its operation.</description>
+         </node>
+         <node>
+            <name>Experiment-procedure</name>
+            <description>An event indicating an experimental procedure as in doing a saliva swab on a participant during the experiment or administering a survey.</description>
+         </node>
+         <node>
+            <name>Experiment-structure</name>
+            <description>An event specifying the structure of the experiment.</description>
+         </node>
+         <node>
+            <name>Measurement-event</name>
+            <description>Something that is measured or detected by an instrument such as a patch-clamp or a probe.</description>
+            <attribute>
+               <name>suggestedTag</name>
+               <value>Data-property</value>
+            </attribute>
+         </node>
+      </node>
+      <node>
+         <name>Agent</name>
+         <description>Something in the experiment that takes an active role or produces an effect. The role or effect may be implicit. Being alive or performing an activity such as a computation may qualify something to be an agent. An agent may also be something that simulates something else.</description>
+         <attribute>
+            <name>suggestedTag</name>
+            <value>Agent-property</value>
+         </attribute>
+         <node>
+            <name>Animal-agent</name>
+            <description>An animal that is present and acting to produce an effect.</description>
+         </node>
+         <node>
+            <name>Avatar-agent</name>
+            <description>An agent associated with an icon or figure representing a particular person in venues such as video games or internet forums.</description>
+         </node>
+         <node>
+            <name>Computational-agent</name>
+            <description>An agent whose decisions about its actions can be explained in terms of computation.</description>
+         </node>
+         <node>
+            <name>Controller-agent</name>
+            <description>An outside controller such as the experimental control software or hardware.</description>
+         </node>
+         <node>
+            <name>Human-agent</name>
+            <description>A person who takes an active role or produces a specified effect.</description>
+         </node>
+         <node>
+            <name>Robotic-agent</name>
+            <description>An agent that is a mechanical device capable of performing a variety of often complex tasks on command or by being programmed in advance.</description>
+         </node>
+         <node>
+            <name>Software-agent</name>
+            <description>A computer program that acts for a user or other program in a relationship of agency.</description>
+         </node>
+      </node>
+      <node>
+         <name>Action</name>
+         <description>Do something.</description>
+         <attribute>
+            <name>extensionAllowed</name>
+         </attribute>
+         <node>
+            <name>Move</name>
+            <description>Go in a specified direction or manner; change position.</description>
+            <node>
+               <name>Breathe</name>
+               <description>Inhale and exhale air into the body during respiration.</description>
+               <node>
+                  <name>Cough</name>
+                  <description>Suddenly and audibly expel air from the lungs through a partially closed glottis, preceded by inhalation.</description>
+               </node>
+               <node>
+                  <name>Exhale</name>
+                  <description>Blow out or expel breath.</description>
+               </node>
+               <node>
+                  <name>Hiccup</name>
+                  <description>Involuntarily spasm  the diaphragm and respiratory organs, with a sudden closure of the glottis and a characteristic sound like that of a cough.</description>
+               </node>
+               <node>
+                  <name>Hold-breath</name>
+                  <description>Interrupt normal breathing by ceasing to inhale or exhale.</description>
+               </node>
+               <node>
+                  <name>Inhale</name>
+                  <description>Draw in with the breath through the nose or mouth.</description>
+               </node>
+               <node>
+                  <name>Sneeze</name>
+                  <description>Suddenly and violently expel breath through the nose and mouth.</description>
+               </node>
+               <node>
+                  <name>Sniffle</name>
+                  <description>Inhale through nose slightly or repeatedly, typically because of a cold or fit of crying.</description>
+               </node>
+            </node>
+            <node>
+               <name>Move-full-body</name>
+               <description>Move entire body.</description>
+               <node>
+                  <name>Bend</name>
+                  <description>Move body in a bowed or curved manner.</description>
+               </node>
+               <node>
+                  <name>Dance</name>
+                  <description>Perform a purposefully selected sequences of human movement often with aesthetic or symbolic value. Move rhythmically to music, typically following a set sequence of steps.</description>
+               </node>
+               <node>
+                  <name>Fall-down</name>
+                  <description>Lose balance and collapse.</description>
+               </node>
+               <node>
+                  <name>Flex</name>
+                  <description>Cause a muscle to stand out by contracting or tensing it. Bend a limb or joint.</description>
+               </node>
+               <node>
+                  <name>Jerk</name>
+                  <description>Make a quick, sharp, sudden movement.</description>
+               </node>
+               <node>
+                  <name>Recover-balance</name>
+                  <description>Return to a stable, upright body position.</description>
+               </node>
+               <node>
+                  <name>Stretch</name>
+                  <description>Straighten or extend body or a part of body to its full length, typically so as to tighten muscles or in order to reach something.</description>
+               </node>
+               <node>
+                  <name>Shudder</name>
+                  <description>Tremble convulsively, sometimes as a result of fear or revulsion.</description>
+               </node>
+               <node>
+                  <name>Stumble</name>
+                  <description>Trip or momentarily lose balance and almost fall.</description>
+               </node>
+               <node>
+                  <name>Turn</name>
+                  <description>Change or cause to change direction.</description>
+               </node>
+            </node>
+            <node>
+               <name>Move-body-part</name>
+               <description>Move one part of a body.</description>
+               <node>
+                  <name>Move-head</name>
+                  <description>Move head.</description>
+                  <node>
+                     <name>Move-eyes</name>
+                     <description>Move eyes.</description>
+                     <node>
+                        <name>Blink</name>
+                        <description>Shut and open the eyes quickly.</description>
+                     </node>
+                     <node>
+                        <name>Close-eyes</name>
+                        <description>Lower and keep eyelids in a closed position.</description>
+                     </node>
+                     <node>
+                        <name>Fixate</name>
+                        <description>Direct eyes to a specific point or target.</description>
+                     </node>
+                     <node>
+                        <name>Inhibit-blinks</name>
+                        <description>Purposely prevent blinking.</description>
+                     </node>
+                     <node>
+                        <name>Lift-eyebrows</name>
+                        <description>Move eyebrows upward.</description>
+                     </node>
+                     <node>
+                        <name>Open-eyes</name>
+                        <description>Raise eyelids to expose pupil.</description>
+                     </node>
+                     <node>
+                        <name>Saccade</name>
+                        <description>Move eyes rapidly between fixation points.</description>
+                     </node>
+                     <node>
+                        <name>Stare</name>
+                        <description>Look fixedly or vacantly at someone or something with eyes wide open.</description>
+                     </node>
+                     <node>
+                        <name>Widen-eyes</name>
+                        <description>Open eyes and possibly with eyebrows lifted especially to express surprise or fear.</description>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Move-jaw</name>
+                     <description>Move lower part of the jaw and head.</description>
+                     <node>
+                        <name>Bite</name>
+                        <description>Seize with teeth or jaws an object or organism so as to grip or break the surface covering.</description>
+                     </node>
+                     <node>
+                        <name>Burp</name>
+                        <description>Noisily release air from the stomach through the mouth; belch.</description>
+                     </node>
+                     <node>
+                        <name>Chew</name>
+                        <description>Repeatedly grinding, tearing, and or crushing with teeth or jaws.</description>
+                     </node>
+                     <node>
+                        <name>Clear-throat</name>
+                        <description>Cough slightly so as to speak more clearly, attract attention, or to express hesitancy before saying something awkward.</description>
+                     </node>
+                     <node>
+                        <name>Frown</name>
+                        <description>Express disapproval, displeasure, or concentration, typically by turning down the corners of the mouth.</description>
+                     </node>
+                     <node>
+                        <name>Gurgle</name>
+                        <description>Make a hollow bubbling sound like that made by water running out of a bottle.</description>
+                     </node>
+                     <node>
+                        <name>Smile</name>
+                        <description>Form facial features into a pleased, kind, or amused expression, typically with the corners of the mouth turned up and the front teeth exposed.</description>
+                     </node>
+                     <node>
+                        <name>Swallow</name>
+                        <description>Cause or allow something, especially food or drink to pass down the throat.</description>
+                     </node>
+                     <node>
+                        <name>Yawn</name>
+                        <description>Take a deep involuntary  inhalation with the mouth open often as a sign of drowsiness or boredom.</description>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Nod-head</name>
+                     <description>Tilt head in alternating up and down arcs along the sagittal plane. It is most commonly, but not universally, used to indicate agreement, acceptance, or acknowledgement.</description>
+                  </node>
+                  <node>
+                     <name>Shake-head</name>
+                     <description>Turn head from side to side as a way of showing disagreement or refusal.</description>
+                  </node>
+               </node>
+               <node>
+                  <name>Move-arm-hand</name>
+                  <description>Move some part of arm, shoulder and or arm.</description>
+                  <node>
+                     <name>Clap-hands</name>
+                     <description>Strike the palms of against one another resoundingly, and usually repeatedly, especially to express approval.</description>
+                  </node>
+                  <node>
+                     <name>Drop</name>
+                     <description>Let or cause to fall vertically.</description>
+                  </node>
+                  <node>
+                     <name>Grab</name>
+                     <description>Seize suddenly or quickly; snatch; clutch.</description>
+                  </node>
+                  <node>
+                     <name>Grasp</name>
+                     <description>Seize and hold firmly.</description>
+                  </node>
+                  <node>
+                     <name>Hold-down</name>
+                     <description>Prevent someone or something from moving by holding them firmly.</description>
+                  </node>
+                  <node>
+                     <name>Lift</name>
+                     <description>Raising something to higher position.</description>
+                  </node>
+                  <node>
+                     <name>Make-fist</name>
+                     <description>Close hand tightly with the fingers bent against the palm.</description>
+                  </node>
+                  <node>
+                     <name>Point</name>
+                     <description>Draw attention to something by extending a finger or arm.</description>
+                  </node>
+                  <node>
+                     <name>Press</name>
+                     <description>Apply pressure to something to flatten, shape, smooth or depress it. This action tag should be used to indicate key presses and mouse clicks.</description>
+                     <attribute>
+                        <name>relatedTag</name>
+                        <value>Push</value>
+                     </attribute>
+                  </node>
+                  <node>
+                     <name>Push</name>
+                     <description>Apply force in order to move something away. Use Press to indicate a key press or mouse click.</description>
+                     <attribute>
+                        <name>relatedTag</name>
+                        <value>Press</value>
+                     </attribute>
+                  </node>
+                  <node>
+                     <name>Reach</name>
+                     <description>Stretch out your arm in order to get or touch something.</description>
+                  </node>
+                  <node>
+                     <name>Release</name>
+                     <description>Make available; set free.</description>
+                  </node>
+                  <node>
+                     <name>Retract</name>
+                     <description>Draw or pull back.</description>
+                  </node>
+                  <node>
+                     <name>Scratch</name>
+                     <description>Drag claws or nails over a surface or on skin.</description>
+                  </node>
+                  <node>
+                     <name>Snap-fingers</name>
+                     <description>Make a noise by pushing second finger hard against thumb and then releasing it suddenly so that it hits the base of the thumb.</description>
+                  </node>
+                  <node>
+                     <name>Touch</name>
+                     <description>Come into or be in contact with.</description>
+                  </node>
+               </node>
+               <node>
+                  <name>Move-leg-foot</name>
+                  <description>Move some part of leg or foot.</description>
+                  <node>
+                     <name>Curl-toes</name>
+                     <description>Bend toes sometimes to grip.</description>
+                  </node>
+                  <node>
+                     <name>Jog</name>
+                     <description>Run at a trot to exercise.</description>
+                  </node>
+                  <node>
+                     <name>Jump</name>
+                     <description>Move off the ground or other surface through sudden muscular effort in the legs.</description>
+                  </node>
+                  <node>
+                     <name>Kick</name>
+                     <description>Strike out or flail with the foot or feet.  Strike using the leg, in unison usually with an area of the knee or lower using the foot.</description>
+                  </node>
+                  <node>
+                     <name>Pedal</name>
+                     <description>Move by working the pedals of a bicycle or other machine.</description>
+                  </node>
+                  <node>
+                     <name>Run</name>
+                     <description>Travel on foot at a fast pace.</description>
+                  </node>
+                  <node>
+                     <name>Step</name>
+                     <description>Put one leg in front of the other and shift weight onto it.</description>
+                     <node>
+                        <name>Heel-strike</name>
+                        <description>Strike the ground with the heel during a step.</description>
+                     </node>
+                     <node>
+                        <name>Toe-off</name>
+                        <description>Push with toe as part of a stride.</description>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Trot</name>
+                     <description>Run at a moderate pace, typically with short steps.</description>
+                  </node>
+                  <node>
+                     <name>Walk</name>
+                     <description>Move at a regular pace by lifting and setting down each foot in turn never having both feet off the ground at once.</description>
+                  </node>
+               </node>
+            </node>
+         </node>
+         <node>
+            <name>Communicate</name>
+            <description>Convey knowledge of or information about something.</description>
+            <node>
+               <name>Communicate-vocally</name>
+               <description>Communicate using mouth or vocal cords.</description>
+               <node>
+                  <name>Cry</name>
+                  <description>Shed tears associated with emotions, usually sadness but also joy or frustration.</description>
+               </node>
+               <node>
+                  <name>Groan</name>
+                  <description>Make a deep inarticulate sound in response to pain or despair.</description>
+               </node>
+               <node>
+                  <name>Gulp</name>
+                  <description>Swallow quickly or in large mouthfuls, often audibly, sometimes to indicate apprehension.</description>
+               </node>
+               <node>
+                  <name>Laugh</name>
+                  <description>Make the spontaneous sounds and movements of the face and body that are the instinctive expressions of lively amusement and sometimes also of contempt or derision.</description>
+               </node>
+               <node>
+                  <name>Scream</name>
+                  <description>Make loud, vociferous cries or yells to express pain, excitement, or fear.</description>
+               </node>
+               <node>
+                  <name>Sigh</name>
+                  <description>Emit a long, deep, audible breath expressing sadness, relief, tiredness, or a similar feeling.</description>
+               </node>
+               <node>
+                  <name>Speak</name>
+                  <description>Communicate using spoken language.</description>
+               </node>
+            </node>
+            <node>
+               <name>Gesture</name>
+               <description>Communicate nonverbally using visible bodily actions, either in place of speech or together and in parallel with spoken words. Gestures include movement of the hands, face, or other parts of the body.</description>
+               <node>
+                  <name>Index-up</name>
+                  <description>Raise with fist clenched in triumph or affirmation.</description>
+               </node>
+               <node>
+                  <name>Pump-fist</name>
+                  <description>Raise with fist clenched in triumph or affirmation.</description>
+               </node>
+               <node>
+                  <name>Spread-hands</name>
+                  <description>Spread hands apart to indicate ignorance.</description>
+               </node>
+               <node>
+                  <name>Shhh</name>
+                  <description>Place finger over lips and possibly uttering the syllable shhh to indicate the need to be quiet.</description>
+               </node>
+               <node>
+                  <name>Shrug</name>
+                  <description>Lift shoulders up towards head to indicate a lack of knowledge about a particular topic.</description>
+               </node>
+               <node>
+                  <name>Thumbs-down</name>
+                  <description>Extend the thumb downward to indicate disapproval.</description>
+               </node>
+               <node>
+                  <name>Thumb-up</name>
+                  <description>Extend the thumb upward to indicate approval.</description>
+               </node>
+               <node>
+                  <name>Wave</name>
+                  <description>Raise hand and move left and right, as a greeting or sign of departure.</description>
+               </node>
+            </node>
+            <node>
+               <name>Communicate-musically</name>
+               <description>Communicate using music.</description>
+               <node>
+                  <name>Hum</name>
+                  <description>Make a low, steady continuous sound like that of a bee. Sing with the lips closed and without uttering speech.</description>
+               </node>
+               <node>
+                  <name>Sing</name>
+                  <description>Produce musical tones by means of the voice.</description>
+               </node>
+               <node>
+                  <name>Vocalize</name>
+                  <description>Utter vocal sounds.</description>
+               </node>
+               <node>
+                  <name>Whistle</name>
+                  <description>Produce a shrill clear sound by forcing breath out or air in through the puckered lips.</description>
+               </node>
+            </node>
+         </node>
+         <node>
+            <name>Perform</name>
+            <description>Carry out or accomplish an action, task, or function.</description>
+            <node>
+               <name>Collide</name>
+               <description>Hit with force when moving.</description>
+            </node>
+            <node>
+               <name>Halt</name>
+               <description>Bring or come to an abrupt stop.</description>
+            </node>
+            <node>
+               <name>Modify</name>
+               <description>Change something.</description>
+            </node>
+            <node>
+               <name>Operate</name>
+               <description>Control the functioning of a machine, process, or system.</description>
+            </node>
+            <node>
+               <name>Play</name>
+               <description>Engage in activity for enjoyment and recreation rather than a serious or practical purpose.</description>
+            </node>
+            <node>
+               <name>Read</name>
+               <description>Interpret something that is written or printed.</description>
+            </node>
+            <node>
+               <name>Repeat</name>
+               <description>Make, do, or perform again.</description>
+            </node>
+            <node>
+               <name>Rest</name>
+               <description>Be inactive in order to regain strength, health, or energy.</description>
+            </node>
+            <node>
+               <name>Write</name>
+               <description>Communicate or express by means of letters or symbols written or imprinted on a surface.</description>
+            </node>
+         </node>
+         <node>
+            <name>Think</name>
+            <description>Direct the mind toward someone or something or use the mind actively to form connected ideas.</description>
+            <node>
+               <name>Allow</name>
+               <description>Allow access to something such as allowing a car to pass.</description>
+            </node>
+            <node>
+               <name>Attend-to</name>
+               <description>Focus mental experience on specific targets.</description>
+            </node>
+            <node>
+               <name>Count</name>
+               <description>Tally items either silently or aloud.</description>
+            </node>
+            <node>
+               <name>Deny</name>
+               <description>Refuse to give or grant something requested or desired by someone.</description>
+            </node>
+            <node>
+               <name>Detect</name>
+               <description>Discover or identify the presence or existence of something.</description>
+            </node>
+            <node>
+               <name>Discriminate</name>
+               <description>Recognize a distinction.</description>
+            </node>
+            <node>
+               <name>Encode</name>
+               <description>Convert information or an instruction into a particular form.</description>
+            </node>
+            <node>
+               <name>Evade</name>
+               <description>Escape or avoid, especially by cleverness or trickery.</description>
+            </node>
+            <node>
+               <name>Generate</name>
+               <description>Cause something, especially an emotion or situation to arise or come about.</description>
+            </node>
+            <node>
+               <name>Identify</name>
+               <description>Establish or indicate who or what someone or something is.</description>
+            </node>
+            <node>
+               <name>Imagine</name>
+               <description>Form a mental image or concept of something.</description>
+            </node>
+            <node>
+               <name>Judge</name>
+               <description>Evaluate evidence to make a decision or form a belief.</description>
+            </node>
+            <node>
+               <name>Learn</name>
+               <description>Adaptively change behavior as the result of experience.</description>
+            </node>
+            <node>
+               <name>Memorize</name>
+               <description>Adaptively change behavior as the result of experience.</description>
+            </node>
+            <node>
+               <name>Perceive</name>
+               <description>Produce an internal, conscious image through stimulating a sensory system.</description>
+               <node>
+                  <name>Listen</name>
+                  <description>Give attention to a sound.</description>
+               </node>
+               <node>
+                  <name>Look</name>
+                  <description>Direct gaze toward someone or something or in a specified direction.</description>
+               </node>
+               <node>
+                  <name>Smell</name>
+                  <description>Inhale in order to ascertain an odor or scent.</description>
+               </node>
+               <node>
+                  <name>Taste</name>
+                  <description>Sense of flavor perceived in the mouth and throat on contact with a substance.</description>
+               </node>
+            </node>
+            <node>
+               <name>Plan</name>
+               <description>Think about the activities required to achieve a desired goal.</description>
+            </node>
+            <node>
+               <name>Predict</name>
+               <description>Say or estimate that something will happen or will be a consequence of something without having exact informaton.</description>
+            </node>
+            <node>
+               <name>Recognize</name>
+               <description>Identify someone or something from having encountered them before.</description>
+            </node>
+            <node>
+               <name>Respond</name>
+               <description>React to something such as a treatment or a stimulus.</description>
+            </node>
+            <node>
+               <name>Recall</name>
+               <description>Remember information by mental effort.</description>
+            </node>
+            <node>
+               <name>Switch-attention</name>
+               <description>Transfer attention from one focus to another.</description>
+            </node>
+            <node>
+               <name>Track</name>
+               <description>Follow a person, animal, or object through space or time.</description>
+            </node>
+         </node>
+      </node>
+      <node>
+         <name>Item</name>
+         <description>An independently existing thing (living or nonliving).</description>
+         <attribute>
+            <name>extensionAllowed</name>
+         </attribute>
+         <node>
+            <name>Biological-item</name>
+            <description>An entity that is biological, that is related to living organisms.</description>
+            <node>
+               <name>Organism</name>
+               <description>A living entity, more specifically a biological entity that consists of one or more cells and is capable of genomic replication (independently or not).</description>
+               <node>
+                  <name>Animal</name>
+                  <description>A living organism that has membranous cell walls, requires oxygen and organic foods, and is capable of voluntary movement.</description>
+                  <node>
+                     <name>Human</name>
+                     <description>The bipedal primate mammal Homo sapiens.</description>
+                  </node>
+               </node>
+               <node>
+                  <name>Plant</name>
+                  <description>Any living organism that typically synthesizes its food from inorganic substances and possesses cellulose cell walls.</description>
+               </node>
+            </node>
+            <node>
+               <name>Anatomical-item</name>
+               <description>A biological structure, system, fluid or other substance excluding single molecular entities.</description>
+               <node>
+                  <name>Body-part</name>
+                  <description>Any part of an organism.</description>
+                  <node>
+                     <name>Head</name>
+                     <description>The upper part of the human body, or the front or upper part of the body of an animal, typically separated from the rest of the body by a neck, and containing the brain, mouth, and sense organs.</description>
+                     <node>
+                        <name>Hair</name>
+                        <description>The filamentous outgrowth of the epidermis.</description>
+                     </node>
+                     <node>
+                        <name>Ear</name>
+                        <description>A sense organ needed for the detection of sound and for establishing balance.</description>
+                     </node>
+                     <node>
+                        <name>Face</name>
+                        <description>The anterior portion of the head extending from the forehead to the chin and ear to ear. The facial structures contain the eyes, nose and mouth, cheeks and jaws.</description>
+                        <node>
+                           <name>Cheek</name>
+                           <description>The fleshy part of the face bounded by the eyes, nose, ear, and jaw line.</description>
+                        </node>
+                        <node>
+                           <name>Chin</name>
+                           <description>The part of the face below the lower lip and including the protruding part of the lower jaw.</description>
+                        </node>
+                        <node>
+                           <name>Eye</name>
+                           <description>The organ of sight or vision.</description>
+                        </node>
+                        <node>
+                           <name>Eyebrow</name>
+                           <description>The arched strip of hair on the bony ridge above each eye socket.</description>
+                        </node>
+                        <node>
+                           <name>Forehead</name>
+                           <description>The part of the face between the eyebrows and the normal hairline.</description>
+                        </node>
+                        <node>
+                           <name>Lip</name>
+                           <description>Fleshy fold which surrounds the opening of the mouth.</description>
+                        </node>
+                        <node>
+                           <name>Nose</name>
+                           <description>A structure of special sense serving as an organ of the sense of smell and as an entrance to the respiratory tract.</description>
+                        </node>
+                        <node>
+                           <name>Mouth</name>
+                           <description>The proximal portion of the digestive tract, containing the oral cavity and bounded by the oral opening.</description>
+                        </node>
+                        <node>
+                           <name>Teeth</name>
+                           <description>The hard bonelike structures in the jaws. A collection of teeth arranged in some pattern in the mouth or other part of the body.</description>
+                        </node>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Arm</name>
+                     <description>The portion of the upper extremity between the shoulder and the elbow. For clinical purposes this term is also used to refer to the whole superior limb.</description>
+                     <node>
+                        <name>Elbow</name>
+                        <description>A type of hinge joint located between the forearm and upper arm.</description>
+                     </node>
+                     <node>
+                        <name>Hand</name>
+                        <description>The distal portion of the upper extremity. It consists of the carpus, metacarpus, and digits.</description>
+                        <node>
+                           <name>Finger</name>
+                           <description>Any of the digits of the hand.</description>
+                           <node>
+                              <name>Index-finger</name>
+                              <description>The second finger from the radial side of the hand, next to the thumb.</description>
+                           </node>
+                           <node>
+                              <name>Little-finger</name>
+                              <description>The fifth and smallest finger from the radial side of the hand.</description>
+                           </node>
+                           <node>
+                              <name>Middle-finger</name>
+                              <description>The middle or third finger from the radial side of the hand.</description>
+                           </node>
+                           <node>
+                              <name>Ring-finger</name>
+                              <description>The fourth finger from the radial side of the hand.</description>
+                           </node>
+                           <node>
+                              <name>Thumb</name>
+                              <description>The thick and short hand digit which is next to the index finger in humans.</description>
+                           </node>
+                        </node>
+                     </node>
+                     <node>
+                        <name>Wrist</name>
+                        <description>A joint between the distal end of the radius and the proximal row of carpal bones.</description>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Leg</name>
+                     <description>The portion of the lower extremity between the knee and the ankle. For clinical purposes this term is also used to refer to the whole inferior limb.</description>
+                     <node>
+                        <name>Ankle</name>
+                        <description>A gliding joint between the distal ends of the tibia and fibula and the proximal end of the talus.</description>
+                     </node>
+                     <node>
+                        <name>Foot</name>
+                        <description>The structure found below the ankle joint required for locomotion.</description>
+                        <node>
+                           <name>Toe</name>
+                           <description>One of the terminal digits of the foot.</description>
+                        </node>
+                     </node>
+                     <node>
+                        <name>Knee</name>
+                        <description>A joint connecting the lower part of the femur with the upper part of the tibia.</description>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Torso</name>
+                     <description>The body excluding the head and neck and limbs.</description>
+                     <node>
+                        <name>Chest</name>
+                        <description>The anterior side of the thorax from the neck to the abdomen.</description>
+                     </node>
+                     <node>
+                        <name>Hip</name>
+                        <description>The lateral prominence of the pelvis from the waist to the thigh.</description>
+                     </node>
+                     <node>
+                        <name>Waist</name>
+                        <description>The abdominal circumference at the navel.</description>
+                     </node>
+                  </node>
+               </node>
+               <node>
+                  <name>Organ</name>
+                  <description>A unique macroscopic anatomic structure that is composed of various tissues and performs specific functions as for example heart or liver.</description>
+               </node>
+               <node>
+                  <name>Tissue</name>
+                  <description>An anatomical structure consisting of similarly specialized cells and intercellular matrix, aggregated according to genetically determined spatial relationships, performing a specific function.</description>
+               </node>
+            </node>
+         </node>
+         <node>
+            <name>Language-item</name>
+            <description>An entity related to a systematic means of communicating by the use of sounds, symbols, or gestures.</description>
+            <attribute>
+               <name>suggestedTag</name>
+               <value>Attribute/Sensory</value>
+            </attribute>
+            <node>
+               <name>Character</name>
+               <description>A hieroglyphic character or symbol; a pictograph.</description>
+            </node>
+            <node>
+               <name>Glyph</name>
+               <description>A hieroglyphic character or symbol; a pictograph.</description>
+            </node>
+            <node>
+               <name>Nonword</name>
+               <description>A group of letters or speech sounds that looks or sounds like a word but that is not accepted as such by native speakers.</description>
+            </node>
+            <node>
+               <name>Phoneme</name>
+               <description>A speech sound that is distinguished by the speakers of a particular language.</description>
+            </node>
+            <node>
+               <name>Phrase</name>
+               <description>A phrase is a group of words functioning as a single unit in the syntax of a sentence.</description>
+            </node>
+            <node>
+               <name>Sentence</name>
+               <description>A set of words that is complete in itself, conveying a statement, question, exclamation, or command and typically containing an explicit or implied subject and a predicate containing a finite verb.</description>
+            </node>
+            <node>
+               <name>Syllable</name>
+               <description>A unit of spoken language larger than a phoneme.</description>
+            </node>
+            <node>
+               <name>Textblock</name>
+               <description>A block of text.</description>
+            </node>
+            <node>
+               <name>Word</name>
+               <description>A word is the smallest free form (an item that may be expressed in isolation with semantic or pragmatic content) in a language.</description>
+            </node>
+         </node>
+         <node>
+            <name>Object</name>
+            <description>Something perceptible by one or more of the senses, especially by vision or touch; a material thing.</description>
+            <attribute>
+               <name>suggestedTag</name>
+               <value>Attribute/Sensory</value>
+            </attribute>
+            <node>
+               <name>Geometric-object</name>
+               <description>An object or a representation that has structure and topology in space.</description>
+               <node>
+                  <name>Pattern</name>
+                  <description>An arrangement of objects, facts, behaviors, or other things which have scientific, mathematical, geometric, statistical, or other meaning.</description>
+                  <node>
+                     <name>Dots</name>
+                     <description>A small round mark or spot.</description>
+                  </node>
+                  <node>
+                     <name>Led-pattern</name>
+                     <description>A pattern created by lighting selected members of a fixed light emitting diode array.</description>
+                  </node>
+               </node>
+               <node>
+                  <name>2D-shape</name>
+                  <description>A planar, two-dimensional shape.</description>
+                  <node>
+                     <name>Clockface</name>
+                     <description>The dial face of a clock. A location identifier based on clockface numbering or anatomic subregion.</description>
+                  </node>
+                  <node>
+                     <name>Cross</name>
+                     <description>A figure or mark formed by two intersecting lines crossing at their midpoints.</description>
+                  </node>
+                  <node>
+                     <name>Dash</name>
+                     <description>A horizontal stroke in writing or printing to mark a pause or break in sense or to represent omitted letters or words.</description>
+                  </node>
+                  <node>
+                     <name>Ellipse</name>
+                     <description>A closed plane curve resulting from the intersection of a circular cone and a plane cutting completely through it, especially a plane not parallel to the base.</description>
+                     <node>
+                        <name>Circle</name>
+                        <description>A ring-shaped structure with every point equidistant from the center.</description>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Rectangle</name>
+                     <description>A parallelogram with four right angles.</description>
+                     <node>
+                        <name>Square</name>
+                        <description>A square is a special rectangle with four equal sides.</description>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Single-point</name>
+                     <description>A point is a geometric entity that is located in a zero-dimensional spatial region and whose position is defined by its coordinates in some coordinate system.</description>
+                  </node>
+                  <node>
+                     <name>Star</name>
+                     <description>A conventional or stylized representation of a star, typically one having five or more points.</description>
+                  </node>
+                  <node>
+                     <name>Triangle</name>
+                     <description>A three-sided polygon.</description>
+                  </node>
+               </node>
+               <node>
+                  <name>3D-shape</name>
+                  <description>A geometric three-dimensional shape.</description>
+                  <node>
+                     <name>Box</name>
+                     <description>A square or rectangular vessel, usually made of cardboard or plastic.</description>
+                     <node>
+                        <name>Cube</name>
+                        <description>A solid or semi-solid in the shape of a three dimensional square.</description>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Cone</name>
+                     <description>A shape whose base is a circle and whose sides taper up to a point.</description>
+                  </node>
+                  <node>
+                     <name>Cylinder</name>
+                     <description>A surface formed by circles of a given radius that are contained in a plane perpendicular to a given axis, whose centers align on the axis.</description>
+                  </node>
+                  <node>
+                     <name>Ellipsoid</name>
+                     <description>A closed plane curve resulting from the intersection of a circular cone and a plane cutting completely through it, especially a plane not parallel to the base.</description>
+                     <node>
+                        <name>Sphere</name>
+                        <description>A solid or hollow three-dimensional object bounded by a closed surface such that every point on the surface is equidistant from the center.</description>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Pyramid</name>
+                     <description>A polyhedron of which one face is a polygon of any number of sides, and the other faces are triangles with a common vertex.</description>
+                  </node>
+               </node>
+            </node>
+            <node>
+               <name>Ingestible-object</name>
+               <description>Something that can be taken into the body by the mouth for digestion or absorption.</description>
+            </node>
+            <node>
+               <name>Man-made-object</name>
+               <description>Something constructed by human means.</description>
+               <node>
+                  <name>Building</name>
+                  <description>A structure that has a roof and walls and stands more or less permanently in one place.</description>
+                  <node>
+                     <name>Room</name>
+                     <description>An area within a building enclosed by walls and floor and ceiling.</description>
+                  </node>
+                  <node>
+                     <name>Roof</name>
+                     <description>A roof is the covering on the uppermost part of a building which provides protection from animals and weather, notably rain, but also heat, wind and sunlight.</description>
+                  </node>
+                  <node>
+                     <name>Entrance</name>
+                     <description>The means or place of entry.</description>
+                  </node>
+                  <node>
+                     <name>Attic</name>
+                     <description>A room or a space immediately below the roof of a building.</description>
+                  </node>
+                  <node>
+                     <name>Basement</name>
+                     <description>The part of a building that is wholly or partly below ground level.</description>
+                  </node>
+               </node>
+               <node>
+                  <name>Clothing</name>
+                  <description>A covering designed to be worn on the body.</description>
+               </node>
+               <node>
+                  <name>Device</name>
+                  <description>An object contrived for a specific purpose.</description>
+                  <node>
+                     <name>Assistive-device</name>
+                     <description>A device that help an individual accomplish a task.</description>
+                     <node>
+                        <name>Glasses</name>
+                        <description>Frames with lenses worn in front of the eye for vision correction, eye protection, or protection from UV rays.</description>
+                     </node>
+                     <node>
+                        <name>Writing-device</name>
+                        <description>A device used for writing.</description>
+                        <node>
+                           <name>Pen</name>
+                           <description>A common writing instrument used to apply ink to a surface, usually paper, for writing or drawing.</description>
+                        </node>
+                        <node>
+                           <name>Pencil</name>
+                           <description>An implement for writing or drawing, constructed of a narrow, solid pigment core in a protective casing that prevents the core from being broken or marking the hand.</description>
+                        </node>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Computing-device</name>
+                     <description>An electronic device which take inputs, process the inputs and then calculate results from the inputs.</description>
+                  </node>
+                  <node>
+                     <name>Engine</name>
+                     <description>A motor is a machine designed to convert one or more forms of energy into mechanical energy.</description>
+                  </node>
+                  <node>
+                     <name>IO-device</name>
+                     <description>Hardware used by a human (or other system) to communicate with a computer.</description>
+                     <node>
+                        <name>Input-device</name>
+                        <description>A piece of equipment used to provide data and control signals to an information processing system such as a computer or information appliance.</description>
+                        <node>
+                           <name>Computer-mouse</name>
+                           <description>A hand-held pointing device that detects two-dimensional motion relative to a surface.</description>
+                           <node>
+                              <name>Mouse-button</name>
+                              <description>An electric switch on a computer mouse which can be pressed or clicked to select or interact with an element of a graphical user interface.</description>
+                           </node>
+                           <node>
+                              <name>Scroll-wheel</name>
+                              <description>A scroll wheel or mouse wheel is a wheel used for scrolling made of hard plastic with a rubbery surface usually located between the left and right mouse buttons and is positioned perpendicular to the mouse surface.</description>
+                           </node>
+                        </node>
+                        <node>
+                           <name>Joystick</name>
+                           <description>A control device that uses a movable handle to create two-axis input for a computer device.</description>
+                        </node>
+                        <node>
+                           <name>Keyboard</name>
+                           <description>A device consisting of mechanical keys that are pressed to create input to a computer.</description>
+                           <node>
+                              <name>Keyboard-key</name>
+                              <description>A button on a keyboard usually representing letters, numbers, functions, or symbols.</description>
+                              <node>
+                                 <name>#</name>
+                                 <description>Value of a keyboard key.</description>
+                                 <attribute>
+                                    <name>takesValue</name>
+                                 </attribute>
+                              </node>
+                           </node>
+                        </node>
+                        <node>
+                           <name>Keypad</name>
+                           <description>A device consisting of keys, usually in a block arrangement, that provides limited input to a system.</description>
+                           <node>
+                              <name>Keypad-key</name>
+                              <description>A key on a separate section of a computer keyboard that groups together numeric keys and those for mathematical or other special functions in an arrangement like that of a calculator.</description>
+                              <node>
+                                 <name>#</name>
+                                 <description>Value of keypad key.</description>
+                                 <attribute>
+                                    <name>takesValue</name>
+                                 </attribute>
+                              </node>
+                           </node>
+                        </node>
+                        <node>
+                           <name>Microphone</name>
+                           <description>A device designed to convert sound to an electrical signal.</description>
+                        </node>
+                        <node>
+                           <name>Push-button</name>
+                           <description>A switch designed to be operated by pressing a button.</description>
+                        </node>
+                     </node>
+                     <node>
+                        <name>Network-device</name>
+                        <description>A collection of two or more computers and/or associated devices that are linked together with communications equipment.</description>
+                     </node>
+                     <node>
+                        <name>Output-device</name>
+                        <description>Any piece of computer hardware equipment which converts information into human understandable form.</description>
+                        <node>
+                           <name>Display-device</name>
+                           <description>An output device for presentation of information in visual or tactile form the latter used for example in tactile electronic displays for blind people.</description>
+                           <node>
+                              <name>Head-mounted-display</name>
+                              <description>An instrument that functions as a display device, worn on the head or as part of a helmet, that has a small display optic in front of one (monocular HMD) or each eye (binocular HMD).</description>
+                           </node>
+                           <node>
+                              <name>LED-display</name>
+                              <description>A LED display is a flat panel display that uses an array of light-emitting diodes as pixels for a video display.</description>
+                           </node>
+                           <node>
+                              <name>Screen</name>
+                              <description>An electronic device designed as a display or a physical device designed to be a protective meshwork.</description>
+                              <node>
+                                 <name>Computer-window</name>
+                                 <description>A part of a computer screen that contains a display different from the rest of the screen. A window is a graphical control element consisting of a visual area containing some of the graphical user interface of the program it belongs to and is framed by a window decoration.</description>
+                              </node>
+                           </node>
+                        </node>
+                        <node>
+                           <name>Auditory-device</name>
+                           <description>A device designed to produce sound.</description>
+                           <node>
+                              <name>Headphones</name>
+                              <description>An instrument that consists of a pair of small loudspeakers, or less commonly a single speaker, held close to ears and connected to a signal source such as an audio amplifier, radio, CD player or portable media player.</description>
+                           </node>
+                           <node>
+                              <name>Speaker-device</name>
+                              <description>A device designed to convert electrical signals to sounds that can be heard.</description>
+                           </node>
+                        </node>
+                     </node>
+                     <node>
+                        <name>Recording-device</name>
+                        <description>A device that copies information in a signal into a persistent information bearer.</description>
+                        <node>
+                           <name>EEG-recording</name>
+                           <description>A recording of electric currents developed in the brain by means of electrodes applied to the scalp, to the surface of the brain, or placed within the substance of the brain.</description>
+                        </node>
+                        <node>
+                           <name>File-recording</name>
+                           <description>A file is an information-bearing object that contains a physical embodiment of some information using a particular character encoding.</description>
+                        </node>
+                        <node>
+                           <name>MEG-recording</name>
+                           <description>The measurement of the magnetic fields produced by electrical activity in the brain, usually conducted externally, using extremely sensitive devices.</description>
+                        </node>
+                        <node>
+                           <name>Motion-capture</name>
+                           <description>A recording of the movement of objects or people.</description>
+                        </node>
+                        <node>
+                           <name>Tape-recording</name>
+                           <description>A sound recording and reproduction usually using magnetic tape for storage that can be saved and played back.</description>
+                        </node>
+                     </node>
+                     <node>
+                        <name>Touchscreen</name>
+                        <description>A control component that operates an electronic device by pressing the display on the screen.</description>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Machine</name>
+                     <description>A human-made device that uses power to apply forces and control movement to perform an action.</description>
+                     <node>
+                        <name>Noisemaker</name>
+                        <description>A device such as a horn or rattle used to make noise at parties.</description>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Measurement-device</name>
+                     <description>A device in which a measure function inheres.</description>
+                     <node>
+                        <name>Clock</name>
+                        <description>A device designed to indicate the time of day or to measure the time duration of an event or action.</description>
+                        <node>
+                           <name>Clock-face</name>
+                           <description>A location identifier based on clockface numbering or anatomic subregion.</description>
+                        </node>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Robot</name>
+                     <description>A mechanical device that sometimes resembles a living animal and is capable of performing a variety of often complex human tasks on command or by being programmed in advance.</description>
+                  </node>
+                  <node>
+                     <name>Tool</name>
+                     <description>A component that is not part of a device but is designed to support its assemby or operation.</description>
+                  </node>
+               </node>
+               <node>
+                  <name>Document</name>
+                  <description>A physical object, or electronic counterpart, that is characterized by containing writing which is meant to be human-readable.</description>
+                  <node>
+                     <name>Letter</name>
+                     <description>A written message addressed to a person or organization.</description>
+                  </node>
+                  <node>
+                     <name>Note</name>
+                     <description>A brief written record.</description>
+                  </node>
+                  <node>
+                     <name>Book</name>
+                     <description>A volume made up of pages fastened along one edge and enclosed between protective covers.</description>
+                  </node>
+                  <node>
+                     <name>Notebook</name>
+                     <description>A book for notes or memoranda.</description>
+                  </node>
+               </node>
+               <node>
+                  <name>Furnishing</name>
+                  <description>Furniture, fittings, and other decorative accessories, such as curtains and carpets, for a house or room.</description>
+               </node>
+               <node>
+                  <name>Manufactured-material</name>
+                  <description>Substances created or extracted from raw materials.</description>
+                  <node>
+                     <name>Ceramic</name>
+                     <description>A hard, brittle, heat-resistant and corrosion-resistant material made by shaping and then firing a nonmetallic mineral, such as clay, at a high temperature.</description>
+                  </node>
+                  <node>
+                     <name>Glass</name>
+                     <description>A brittle transparent solid with irregular atomic structure.</description>
+                  </node>
+                  <node>
+                     <name>Paper</name>
+                     <description>A thin sheet material produced by mechanically or chemically processing cellulose fibres derived from wood, rags, grasses or other vegetable sources in water.</description>
+                  </node>
+                  <node>
+                     <name>Plastic</name>
+                     <description>Various high-molecular-weight thermoplastic or thermosetting polymers that are capable of being molded, extruded, drawn, or otherwise shaped and then hardened into a form.</description>
+                  </node>
+                  <node>
+                     <name>Steel</name>
+                     <description>An alloy made up of iron with typically a few tenths of a percent of carbon to improve its strength and fracture resistance compared to iron.</description>
+                  </node>
+               </node>
+               <node>
+                  <name>Media</name>
+                  <description>Media are audo/visual/audiovisual modes of communicating information for mass consumption.</description>
+                  <node>
+                     <name>Media-clip</name>
+                     <description>A short segment of media.</description>
+                     <node>
+                        <name>Audio-clip</name>
+                        <description>A short segment of audio.</description>
+                     </node>
+                     <node>
+                        <name>Video-clip</name>
+                        <description>A short segment of video.</description>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Visualization</name>
+                     <description>An planned process that creates images, diagrams or animations from the input data.</description>
+                     <node>
+                        <name>Animation</name>
+                        <description>A form of graphical illustration that changes with time to give a sense of motion or represent dynamic changes in the portrayal.</description>
+                     </node>
+                     <node>
+                        <name>Art-installation</name>
+                        <description>A large-scale, mixed-media constructions, often designed for a specific place or for a temporary period of time.</description>
+                     </node>
+                     <node>
+                        <name>Braille</name>
+                     </node>
+                     <node>
+                        <name>Cutout</name>
+                     </node>
+                     <node>
+                        <name>Image</name>
+                        <description>Any record of an imaging event whether physical or electronic.</description>
+                        <node>
+                           <name>Cartoon</name>
+                           <description>A type of illustration, sometimes animated, typically in a non-realistic or semi-realistic style. The specific meaning has evolved over time, but the modern usage usually refers to either: an image or series of images intended for satire, caricature, or humor; or a motion picture that relies on a sequence of illustrations for its animation.</description>
+                        </node>
+                        <node>
+                           <name>Drawing</name>
+                           <description>A representation of an object or outlining a figure, plan, or sketch by means of lines.</description>
+                        </node>
+                        <node>
+                           <name>Icon</name>
+                           <description>A sign (such as a word or graphic symbol) whose form suggests its meaning.</description>
+                        </node>
+                        <node>
+                           <name>Painting</name>
+                           <description>A work produced through the art of painting.</description>
+                        </node>
+                        <node>
+                           <name>Photograph</name>
+                           <description>An image recorded by a camera.</description>
+                        </node>
+                     </node>
+                     <node>
+                        <name>Movie</name>
+                        <description>A sequence of images displayed in succession giving the illusion of continuous movement.</description>
+                     </node>
+                     <node>
+                        <name>Outline-visualization</name>
+                        <description>A visualization consisting of a line or set of lines enclosing or indicating the shape of an object in a sketch or diagram.</description>
+                     </node>
+                     <node>
+                        <name>Point-light-visualization</name>
+                     </node>
+                     <node>
+                        <name>Sculpture</name>
+                        <description>A two- or three-dimensional representative or abstract forms, especially by carving stone or wood or by casting metal or plaster.</description>
+                     </node>
+                     <node>
+                        <name>Stick-figure-visualization</name>
+                        <description>A drawing showing the head of a human being or animal as a circle and all other parts as straight lines.</description>
+                     </node>
+                  </node>
+               </node>
+               <node>
+                  <name>Navigational-object</name>
+                  <description>An object whose purpose is to assist directed movement from one location to another.</description>
+                  <node>
+                     <name>Path</name>
+                     <description>A trodden way. A way or track laid down for walking or made by continual treading.</description>
+                  </node>
+                  <node>
+                     <name>Road</name>
+                     <description>An open way for the passage of vehicles, persons, or animals on land.</description>
+                     <node>
+                        <name>Lane</name>
+                        <description>A defined path with physical dimensions through which an object or substance may traverse.</description>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Runway</name>
+                     <description>A paved strip of ground on a landing field for the landing and takeoff of aircraft.</description>
+                  </node>
+               </node>
+               <node>
+                  <name>Vehicle</name>
+                  <description>A mobile machine which transports people or cargo.</description>
+                  <node>
+                     <name>Aircraft</name>
+                     <description>A vehicle which is able to travel through air in an atmosphere.</description>
+                  </node>
+                  <node>
+                     <name>Bicycle</name>
+                     <description>A human-powered, pedal-driven, single-track vehicle, having two wheels attached to a frame, one behind the other.</description>
+                  </node>
+                  <node>
+                     <name>Boat</name>
+                     <description>A watercraft of any size which is able to float or plane on water.</description>
+                  </node>
+                  <node>
+                     <name>Car</name>
+                     <description>A wheeled motor vehicle used primarily for the transportation of human passengers.</description>
+                  </node>
+                  <node>
+                     <name>Cart</name>
+                     <description>A cart is a vehicle which has two wheels and is designed to transport human passengers or cargo.</description>
+                  </node>
+                  <node>
+                     <name>Tractor</name>
+                     <description>A mobile machine specifically designed to deliver a high tractive effort at slow speeds, and mainly used for the purposes of hauling a trailer or machinery used in agriculture or construction.</description>
+                  </node>
+                  <node>
+                     <name>Train</name>
+                     <description>A connected line of railroad cars with or without a locomotive.</description>
+                  </node>
+                  <node>
+                     <name>Truck</name>
+                     <description>A motor vehicle which, as its primary funcion, transports cargo rather than human passangers.</description>
+                  </node>
+               </node>
+            </node>
+            <node>
+               <name>Natural-object</name>
+               <description>Something that exists in or is produced by nature, and is not artificial or man-made.</description>
+               <node>
+                  <name>Mineral</name>
+                  <description>A solid, homogeneous, inorganic substance occurring in nature and having a definite chemical composition.</description>
+               </node>
+               <node>
+                  <name>Natural-feature</name>
+                  <description>A feature that occurs in nature. A prominent or identifiable aspect, region, or site of interest.</description>
+                  <node>
+                     <name>Field</name>
+                     <description>An unbroken expanse as of ice or grassland.</description>
+                  </node>
+                  <node>
+                     <name>Hill</name>
+                     <description>A rounded elevation of limited extent rising above the surrounding land with local relief of less than 300m.</description>
+                  </node>
+                  <node>
+                     <name>Mountain</name>
+                     <description>A landform that extends above the surrounding terrain in a limited area.</description>
+                  </node>
+                  <node>
+                     <name>River</name>
+                     <description>A natural freshwater surface stream of considerable volume and a permanent or seasonal flow, moving in a definite channel toward a sea, lake, or another river.</description>
+                  </node>
+                  <node>
+                     <name>Waterfall</name>
+                     <description>A sudden descent of water over a step or ledge in the bed of a river.</description>
+                  </node>
+               </node>
+            </node>
+         </node>
+         <node>
+            <name>Sound</name>
+            <description>Mechanical vibrations transmitted by an elastic medium; something that can be heard.</description>
+            <node>
+               <name>Environmental-sound</name>
+               <description>Sounds occuring in the environment. An accumulation of noise pollution that occurs outside. This noise can be caused by transport, industrial, and recreational activities.</description>
+               <node>
+                  <name>Crowd-sound</name>
+                  <description>Noise produced by a mixture of sounds from a large group of people.</description>
+               </node>
+               <node>
+                  <name>Signal-noise</name>
+                  <description>Any part of a signal that is not the true or original signal but is introduced by the communication mechanism.</description>
+               </node>
+            </node>
+            <node>
+               <name>Musical-sound</name>
+               <description>Sound produced by continuous and regular vibrations, as opposed to noise.</description>
+               <node>
+                  <name>Tone</name>
+                  <description>A musical note, warble, or other sound used as a particular signal on a telephone or answering machine.</description>
+               </node>
+               <node>
+                  <name>Instrument-sound</name>
+                  <description>Sound produced by a musical instrument.</description>
+               </node>
+               <node>
+                  <name>Vocalized-sound</name>
+                  <description>Musical sound produced by vocal cords in a biological agent.</description>
+               </node>
+            </node>
+            <node>
+               <name>Named-animal-sound</name>
+               <node>
+                  <name>Barking</name>
+                  <description>Sharp explosive cries like sounds made by certain animals, especially a dog, fox, or seal.</description>
+               </node>
+               <node>
+                  <name>Bleating</name>
+                  <description>Wavering cries like sounds made by a sheep, goat, or calf.</description>
+               </node>
+               <node>
+                  <name>Crowing</name>
+                  <description>Loud shrill sounds characteristic of roosters.</description>
+               </node>
+               <node>
+                  <name>Chirping</name>
+                  <description>Short, sharp, high-pitched noises like sounds made by small birds or an insects.</description>
+               </node>
+               <node>
+                  <name>Growling</name>
+                  <description>Low guttural sounds like those that made in the throat by a hostile dog or other animal.</description>
+               </node>
+               <node>
+                  <name>Meowing</name>
+                  <description>Vocalizations like those made by as those cats. These sounds have diverse tones and are sometimes chattered, murmured or whispered. The purpose can be assertive.</description>
+               </node>
+               <node>
+                  <name>Mooing</name>
+                  <description>Deep vocal sounds like those made by a cow.</description>
+               </node>
+               <node>
+                  <name>Purring</name>
+                  <description>Low continuous vibratory sound such as those made by cats. The sound expresses contentment.</description>
+               </node>
+               <node>
+                  <name>Roaring</name>
+                  <description>Loud, deep, or harsh prolonged sounds such as those made by big cats and bears for long-distance communication and intimidation.</description>
+               </node>
+               <node>
+                  <name>Squawking</name>
+                  <description>Loud, harsh noises such as those made by geese.</description>
+               </node>
+            </node>
+            <node>
+               <name>Named-object-sound</name>
+               <description>A sound identifiable as coming from a particular type of object.</description>
+               <node>
+                  <name>Alarm-sound</name>
+                  <description>A loud signal often loud continuous ringing to alert people to a problem or condition that requires urgent attention.</description>
+               </node>
+               <node>
+                  <name>Beep</name>
+                  <description>A short, single tone, that is typically high-pitched and generally made by a computer or other machine.</description>
+               </node>
+               <node>
+                  <name>Buzz</name>
+                  <description>A persistent vibratory sound often made by a buzzer device and used to indicate something incorrect.</description>
+               </node>
+               <node>
+                  <name>Ka-ching</name>
+                  <description>The sound made by a mechanical cash register, often to designate a reward.</description>
+               </node>
+               <node>
+                  <name>Click</name>
+                  <description>The sound made by a mechanical cash register, often to designate a reward.</description>
+               </node>
+               <node>
+                  <name>Ding</name>
+                  <description>A short ringing sound such as that made by a bell, often to indicate a correct response or the expiration of time.</description>
+               </node>
+               <node>
+                  <name>Horn-blow</name>
+                  <description>A loud sound made by forcing air through a sound device that funnels air to create the sound, often used to sound an alert.</description>
+               </node>
+               <node>
+                  <name>Siren</name>
+                  <description>A loud, continuous sound often varying in frequency designed to indicate an emergency.</description>
+               </node>
+            </node>
+         </node>
+      </node>
+      <node>
+         <name>Agent-property</name>
+         <description>Something that pertains to an agent.</description>
+         <attribute>
+            <name>extensionAllowed</name>
+         </attribute>
+         <node>
+            <name>Cognitive-state</name>
+            <description>The state of the cognitive processes or state of mind of the agent.</description>
+            <node>
+               <name>Alert</name>
+               <description>Condition of heightened watchfulness or preparation for action.</description>
+            </node>
+            <node>
+               <name>Anesthetized</name>
+               <description>Having lost sensation to pain or having senses dulled due to the effects of an anesthetic.</description>
+            </node>
+            <node>
+               <name>Asleep</name>
+               <description>Having entered a periodic, readily reversible state of reduced awareness and metabolic activity, usually accompanied by physical relaxation and brain activity.</description>
+            </node>
+            <node>
+               <name>Attentive</name>
+               <description>Concentrating and focusing mental energy on the task or surroundings.</description>
+            </node>
+            <node>
+               <name>Awake</name>
+               <description>In a non sleeping state.</description>
+            </node>
+            <node>
+               <name>Brain-dead</name>
+               <description>Characterized by the irreversible absence of cortical and brain stem functioning.</description>
+            </node>
+            <node>
+               <name>Comatose</name>
+               <description>In a state of profound unconsciousness associated with markedly depressed cerebral activity.</description>
+            </node>
+            <node>
+               <name>Drowsy</name>
+               <description>In a state of near-sleep, a strong desire for sleep, or sleeping for unusually long periods.</description>
+            </node>
+            <node>
+               <name>Intoxicated</name>
+               <description>In a state with disturbed psychophysiological functions and responses as a result of administration or ingestion of a psychoactive substance.</description>
+            </node>
+            <node>
+               <name>Locked-in</name>
+               <description>In a state of complete paralysis of all voluntary muscles except for the ones that control the movements of the eyes.</description>
+            </node>
+            <node>
+               <name>Passive</name>
+               <description>Not responding or initiating an action in response to a stimulus.</description>
+            </node>
+            <node>
+               <name>Resting</name>
+               <description>A state in which the agent is not exhibiting any physical exertion.</description>
+            </node>
+            <node>
+               <name>Vegetative</name>
+               <description>A state of wakefulness and conscience, but (in contrast to coma) with involuntary opening of the eyes and movements (such as teeth grinding, yawning, or thrashing of the extremities).</description>
+            </node>
+         </node>
+         <node>
+            <name>Emotional-state</name>
+            <description>The status of the general temperament and outlook of an agent.</description>
+            <node>
+               <name>Angry</name>
+               <description>Experiencing emotions characterized by marked annoyance or hostility.</description>
+            </node>
+            <node>
+               <name>Aroused</name>
+               <description>In a state reactive to stimuli leading to increased heart rate and blood pressure, sensory alertness, mobility and readiness to respond.</description>
+            </node>
+            <node>
+               <name>Awed</name>
+               <description>Filled with wonder. Feeling grand, sublime or powerful emotions characterized by a combination of joy, fear, admiration, reverence, and/or respect.</description>
+            </node>
+            <node>
+               <name>Compassionate</name>
+               <description>Feeling or showing sympathy and concern for others often evoked for a person who is in distress and associated with altruistic motivation.</description>
+            </node>
+            <node>
+               <name>Content</name>
+               <description>Feeling  satisfaction with things as they are.</description>
+            </node>
+            <node>
+               <name>Disgusted</name>
+               <description>Feeling revulsion or profound disapproval aroused by something unpleasant or offensive.</description>
+            </node>
+            <node>
+               <name>Emotionally-neutral</name>
+               <description>Feeling neither satisfied nor dissatisfied.</description>
+            </node>
+            <node>
+               <name>Empathetic</name>
+               <description>Understanding and sharing the feelings of another. Being aware of, being sensitive to, and vicariously experiencing the feelings, thoughts, and experience of another.</description>
+            </node>
+            <node>
+               <name>Excited</name>
+               <description>Feeling great enthusiasm and eagerness.</description>
+            </node>
+            <node>
+               <name>Fearful</name>
+               <description>Feeling apprehension that one may be in danger.</description>
+            </node>
+            <node>
+               <name>Frustrated</name>
+               <description>Feeling annoyed as a result of being blocked, thwarted, disappointed or defeated.</description>
+            </node>
+            <node>
+               <name>Grieving</name>
+               <description>Feeling sorrow in response to loss, whether physical or abstract.</description>
+            </node>
+            <node>
+               <name>Happy</name>
+               <description>Feeling pleased and content.</description>
+            </node>
+            <node>
+               <name>Jealous</name>
+               <description>Feeling threatened by a rival in a relationship with another individual, in particular an intimate partner, usually involves feelings of threat, fear, suspicion, distrust, anxiety, anger, betrayal, and rejection.</description>
+            </node>
+            <node>
+               <name>Joyful</name>
+               <description>Feeling delight or intense happiness.</description>
+            </node>
+            <node>
+               <name>Loving</name>
+               <description>Feeling a strong positive emotion of affection and attraction.</description>
+            </node>
+            <node>
+               <name>Relieved</name>
+               <description>No longer feeling pain, distress,  anxiety, or reassured.</description>
+            </node>
+            <node>
+               <name>Sad</name>
+               <description>Feeling grief or unhappiness.</description>
+            </node>
+            <node>
+               <name>Stressed</name>
+               <description>Experiencing mental or emotional strain or tension.</description>
+            </node>
+         </node>
+         <node>
+            <name>Postural-state</name>
+            <description>Pertaining to the position in which agent holds their body.</description>
+            <node>
+               <name>Crouching</name>
+               <description>Adopting a position where the knees are bent and the upper body is brought forward and down, sometimes to avoid detection or to defend oneself.</description>
+            </node>
+            <node>
+               <name>Kneeling</name>
+               <description>Positioned where one or both knees are on the ground.</description>
+            </node>
+            <node>
+               <name>On-treadmill</name>
+               <description>Ambulation on an exercise apparatus with an endless moving belt to support moving in place.</description>
+            </node>
+            <node>
+               <name>Prone</name>
+               <description>Positioned in a recumbent body position whereby the person lies on its stomach and faces downward.</description>
+            </node>
+            <node>
+               <name>Sitting</name>
+               <description>In a seated position.</description>
+            </node>
+            <node>
+               <name>Standing</name>
+               <description>Assuming or maintaining an erect upright position.</description>
+            </node>
+            <node>
+               <name>Supported-by-chin-rest</name>
+               <description>Using a device that supports the chin and head.</description>
+            </node>
+         </node>
+         <node>
+            <name>Agent-trait</name>
+            <description>A genetically, environmentally, or socially determined characteristic of an agent.</description>
+            <node>
+               <name>Age</name>
+               <description>Length of time elapsed time since birth of the agent.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Gender</name>
+               <description>Characteristics that are socially constructed, including norms, behaviors, and roles based on sex.</description>
+            </node>
+            <node>
+               <name>Sex</name>
+               <description>Physical properties or qualities by which male is distinguished from female.</description>
+               <node>
+                  <name>Female</name>
+                  <description>Biological sex of an individual with female sexual organs such ova.</description>
+               </node>
+               <node>
+                  <name>Male</name>
+                  <description>Biological sex of an individual with male sexual organs producing sperm.</description>
+               </node>
+               <node>
+                  <name>Intersex</name>
+                  <description>Having genitalia and/or secondary sexual characteristics of indeterminate sex.</description>
+               </node>
+            </node>
+            <node>
+               <name>Handedness</name>
+               <description>Individual preference for use of a hand, known as the dominant hand.</description>
+               <node>
+                  <name>Left-handed</name>
+                  <description>Preference for using the left hand or foot for tasks requiring the use of a single hand or foot.</description>
+               </node>
+               <node>
+                  <name>Right-handed</name>
+                  <description>Preference for using the right hand or foot for tasks requiring the use of a single hand or foot.</description>
+               </node>
+               <node>
+                  <name>Ambidextrous</name>
+                  <description>Having no overall dominance in the use of right or left hand or foot in the performance of tasks that require one hand or foot.</description>
+               </node>
+            </node>
+         </node>
+         <node>
+            <name>Agent-social-role</name>
+            <description>The function or part that is ascribed to an individual agent with respect to in a community.</description>
+            <node>
+               <name>Brother</name>
+               <description>Being a male sibling.</description>
+            </node>
+            <node>
+               <name>Child</name>
+               <description>Having an age below the legal age of majority.</description>
+            </node>
+            <node>
+               <name>Father</name>
+               <description>Being a male parent.</description>
+            </node>
+            <node>
+               <name>Mother</name>
+               <description>Being a female parent.</description>
+            </node>
+            <node>
+               <name>Sister</name>
+               <description>Being a female sibling.</description>
+            </node>
+         </node>
+         <node>
+            <name>Agent-task-role</name>
+            <description>The function or part that is ascribed to an agent in performing the task.</description>
+            <node>
+               <name>Experimental-controller</name>
+               <description>An agent acting to control the experiment.</description>
+            </node>
+            <node>
+               <name>Experimental-participant</name>
+               <description>Someone who takes part in an activity related to an experiment.</description>
+            </node>
+            <node>
+               <name>Experimenter</name>
+               <description>Person who is the owner of the experiment and has its responsibility.</description>
+            </node>
+            <node>
+               <name>Follower</name>
+               <description>A person who follows the lead of another.</description>
+            </node>
+            <node>
+               <name>Friend</name>
+               <description>A person whom an individual knows, likes, and trusts.</description>
+            </node>
+            <node>
+               <name>Leader</name>
+               <description>A person who leads or commands an activity, project, group, organization, or country.</description>
+            </node>
+            <node>
+               <name>Stranger</name>
+               <description>A person not known in a particular place or community.</description>
+            </node>
+            <node>
+               <name>Student</name>
+               <description>A person who is enrolled in an educational institution. A person who acquires knowledge and skill from some educator during an education process.</description>
+            </node>
+            <node>
+               <name>Teacher</name>
+               <description>An agent who instructs or educates others.</description>
+            </node>
+         </node>
+      </node>
+      <node>
+         <name>Data-property</name>
+         <description>Something that pertains to data or information.</description>
+         <attribute>
+            <name>extensionAllowed</name>
+         </attribute>
+         <node>
+            <name>Data-source-type</name>
+            <description>The type of place, person, or thing from which the data comes or can be obtained.</description>
+            <node>
+               <name>Computed-feature</name>
+               <description>A feature computed from the data by a tool. This tag should be grouped with a label of the form Toolname_propertyName.</description>
+            </node>
+            <node>
+               <name>Computed-prediction</name>
+               <description>A computed extrapolation of known data.</description>
+            </node>
+            <node>
+               <name>Expert-annotation</name>
+               <description>An explanatory or critical comment or other in-context information provided by an authority.</description>
+            </node>
+            <node>
+               <name>Instrument-measurement</name>
+               <description>Information obtained from a device that is used to measure material properties or make other observations.</description>
+            </node>
+            <node>
+               <name>Observation</name>
+               <description>Active acquisition of information from a primary source. Should be grouped with a label of the form AgentID_featureName.</description>
+            </node>
+         </node>
+         <node>
+            <name>Physical-property</name>
+            <description>A characteristic that defines the nature of matter or forces that act upon it.</description>
+            <node>
+               <name>Electromagnetic-property</name>
+               <description>A characteristic of matter such as electrical conductivity that governs its interaction with electrical or magnetic forces.</description>
+            </node>
+            <node>
+               <name>Mechanical-property</name>
+               <description>A physical quality that inheres in an bearer by virtue of how that bearer behaves when subjected to forces or displacements and the effect of their bodies on their environment.</description>
+               <node>
+                  <name>Pressure</name>
+                  <description>The force applied to a unit area of surface.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>isNumeric</name>
+                     </attribute>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                  </node>
+               </node>
+            </node>
+            <node>
+               <name>Organic-property</name>
+               <description>Relating to or containing elemental carbon or carbon compounds.</description>
+            </node>
+            <node>
+               <name>Thermodynamic-property</name>
+               <description>Property related to heat and other forms of energy (such as mechanical, electrical, or chemical energy), and, by extension, of the relationships between all forms of energy.</description>
+               <node>
+                  <name>Energy</name>
+                  <description>The capacity of a physical system to do work.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>isNumeric</name>
+                     </attribute>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Entropy</name>
+                  <description>A thermodynamic property which acts as a measure of the state of disorder of a system.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>isNumeric</name>
+                     </attribute>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Temperature</name>
+                  <description>A measure of the average kinetic energy of a system of particles. Temperature may be quantified, in the context of thermodynamics, as the potential of one system to transfer thermal energy to another system until both systems reach a state of thermal equilibrium.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>isNumeric</name>
+                     </attribute>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                  </node>
+               </node>
+            </node>
+         </node>
+         <node>
+            <name>Quantitative-property</name>
+            <description>Something capable of being estimated or expressed with numeric values.</description>
+            <node>
+               <name>Angle</name>
+               <description>The inclination of one line to another or the plane of one object to another. Angles are assumed clockwise from vertical unless grouped with axis.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Fraction</name>
+               <description>A numerical value betwee 0 and 1.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Interval</name>
+               <description>A period of time or the distance separating two instances, events, or occurrences.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Item-count</name>
+               <description>An integer and represented the number of instances or occurences of an entity.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Percentage</name>
+               <description>A fraction or ratio with 100 understood as the denominator.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Ratio</name>
+               <description>A quotient of quantities of the same kind for different components within the same system.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Repetition-interval</name>
+               <description>The amount of time between successive occurrences.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Repetition-number</name>
+               <description>An integer that identifies the particular occurrence of a repeating activity or entity.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+         </node>
+         <node>
+            <name>Spatiotemporal-property</name>
+            <description>A property relating to space and/or time.</description>
+            <node>
+               <name>Rate-of-change</name>
+               <description>The amount of change accumulated per unit time.</description>
+               <node>
+                  <name>Acceleration</name>
+                  <description>Magnitude of the rate of change in either speed or direction. The direction of change should be given separately.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>isNumeric</name>
+                     </attribute>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                     <attribute>
+                        <name>unitClass</name>
+                        <value>acceleration</value>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Jerk-rate</name>
+                  <description>Magnitude of the rate at which the acceleration of an object changes with respect to time. The direction of change should be given separately.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>isNumeric</name>
+                     </attribute>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                     <attribute>
+                        <name>unitClass</name>
+                        <value>jerk</value>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Sampling-rate</name>
+                  <description>The number of digital samples taken or recorded per unit of time.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                     <attribute>
+                        <name>unitClass</name>
+                        <value>frequency</value>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Refresh-rate</name>
+                  <description>The frequency with which the image on a computer monitor or similar electronic display screen is refreshed, usually expressed in hertz.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>isNumeric</name>
+                     </attribute>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Speed</name>
+                  <description>A scalar measure of the rate of movement of the object expressed either as the distance travelled divided by the time taken (average speed) or the rate of change of position with respect to time at a particular point (instantaneous speed). The direction of change should be given separately.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>isNumeric</name>
+                     </attribute>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                     <attribute>
+                        <name>unitClass</name>
+                        <value>speed</value>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Temporal-rate</name>
+                  <description>The number of items per unit of time.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                     <attribute>
+                        <name>unitClass</name>
+                        <value>frequency</value>
+                     </attribute>
+                  </node>
+               </node>
+            </node>
+            <node>
+               <name>Resolution</name>
+               <description>The size of the smallest element that can be separated from neighboring elements.</description>
+               <node>
+                  <name>IO-resolution</name>
+                  <description>Smallest change in a quality being measured by an sensor that causes a perceptible change in the IO device.</description>
+                  <node>
+                     <name>Screen-resolution</name>
+                     <description>Resolution of a screen, usually expressed as the of pixels in a dimension for a digital display device.</description>
+                     <node>
+                        <name>#</name>
+                        <attribute>
+                           <name>takesValue</name>
+                        </attribute>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Printer-resolution</name>
+                     <description>Resolution of a printer, usually expressed as the number of dots-per-inch for a printer.</description>
+                     <node>
+                        <name>#</name>
+                        <attribute>
+                           <name>takesValue</name>
+                        </attribute>
+                     </node>
+                  </node>
+               </node>
+               <node>
+                  <name>Spatial-resolution</name>
+                  <description>Linear spacing of a spatial measurement.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Spectral-resolution</name>
+                  <description>Measures the ability of a sensor to  resolve features in the electromagnetic spectrum.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Temporal-resolution</name>
+                  <description>Measures the ability of a sensor to  resolve features in time.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                  </node>
+               </node>
+            </node>
+            <node>
+               <name>Spatial-property</name>
+               <description>Property of an element involving space.</description>
+               <node>
+                  <name>Direction</name>
+                  <description>The spatial relation between something and the course along which it points or moves.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>isNumeric</name>
+                     </attribute>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Distance</name>
+                  <description>A measure of the space separating two objects or points.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>isNumeric</name>
+                     </attribute>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                     <attribute>
+                        <name>unitClass</name>
+                        <value>physicalLength</value>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Orientation</name>
+                  <description>The position or alignment of something relative to points of the compass, other specific directions, or some other indexing system.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>isNumeric</name>
+                     </attribute>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Position</name>
+                  <description>A reference to the alignment of an object, a particular situation or view of a situation, or the location of an object. Coordinates with respect a specified frame of reference or the default Screen-frame if no frame is given.</description>
+                  <node>
+                     <name>X-position</name>
+                     <description>The position along the x-axis of the frame of reference.</description>
+                     <node>
+                        <name>#</name>
+                        <attribute>
+                           <name>isNumeric</name>
+                        </attribute>
+                        <attribute>
+                           <name>takesValue</name>
+                        </attribute>
+                        <attribute>
+                           <name>unitClass</name>
+                           <value>physicalLength</value>
+                        </attribute>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Y-position</name>
+                     <description>The position along the y-axis of the frame of reference.</description>
+                     <node>
+                        <name>#</name>
+                        <attribute>
+                           <name>isNumeric</name>
+                        </attribute>
+                        <attribute>
+                           <name>takesValue</name>
+                        </attribute>
+                        <attribute>
+                           <name>unitClass</name>
+                           <value>physicalLength</value>
+                        </attribute>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Z-position</name>
+                     <description>The position along the z-axis of the frame of reference.</description>
+                     <node>
+                        <name>#</name>
+                        <attribute>
+                           <name>isNumeric</name>
+                        </attribute>
+                        <attribute>
+                           <name>takesValue</name>
+                        </attribute>
+                        <attribute>
+                           <name>unitClass</name>
+                           <value>physicalLength</value>
+                        </attribute>
+                     </node>
+                  </node>
+               </node>
+               <node>
+                  <name>Size</name>
+                  <description>The physical magnitude of something.</description>
+                  <node>
+                     <name>Area</name>
+                     <description>The extent of a 2-dimensional surface enclosed within a boundary.</description>
+                     <node>
+                        <name>#</name>
+                        <attribute>
+                           <name>isNumeric</name>
+                        </attribute>
+                        <attribute>
+                           <name>takesValue</name>
+                        </attribute>
+                        <attribute>
+                           <name>unitClass</name>
+                           <value>area</value>
+                        </attribute>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Length</name>
+                     <description>The linear extent in space from one end of something to the other end, or the extent of something from beginning to end.</description>
+                     <node>
+                        <name>#</name>
+                        <attribute>
+                           <name>isNumeric</name>
+                        </attribute>
+                        <attribute>
+                           <name>takesValue</name>
+                        </attribute>
+                        <attribute>
+                           <name>unitClass</name>
+                           <value>physicalLength</value>
+                        </attribute>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Width</name>
+                     <description>The extent or measurement of something from side to side.</description>
+                     <node>
+                        <name>#</name>
+                        <attribute>
+                           <name>isNumeric</name>
+                        </attribute>
+                        <attribute>
+                           <name>takesValue</name>
+                        </attribute>
+                        <attribute>
+                           <name>unitClass</name>
+                           <value>physicalLength</value>
+                        </attribute>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Height</name>
+                     <description>The vertical measurement or distance from the base to the top of an object; the vertical dimension of extension.</description>
+                     <node>
+                        <name>#</name>
+                        <attribute>
+                           <name>isNumeric</name>
+                        </attribute>
+                        <attribute>
+                           <name>takesValue</name>
+                        </attribute>
+                        <attribute>
+                           <name>unitClass</name>
+                           <value>physicalLength</value>
+                        </attribute>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Volume</name>
+                     <description>The amount of three dimensional space occupied by an object or the capacity of a space or container.</description>
+                     <node>
+                        <name>#</name>
+                        <attribute>
+                           <name>isNumeric</name>
+                        </attribute>
+                        <attribute>
+                           <name>takesValue</name>
+                        </attribute>
+                        <attribute>
+                           <name>unitClass</name>
+                           <value>volume</value>
+                        </attribute>
+                     </node>
+                  </node>
+               </node>
+               <node>
+                  <name>Surface-properties</name>
+                  <description>Property of the outer boundary of a three-dimensional object.</description>
+                  <node>
+                     <name>Rough</name>
+                     <description>A texture quality inhering in a bearer by virtue of the irregular surface of the bearer.</description>
+                  </node>
+                  <node>
+                     <name>Smooth</name>
+                     <description>Having a surface free from roughness or bumps or ridges or irregularities.</description>
+                  </node>
+               </node>
+            </node>
+            <node>
+               <name>Temporal-property</name>
+               <description>A characteristic of or relating to time or limited by time.</description>
+               <node>
+                  <name>Delay</name>
+                  <description>Time during which some action is awaited; inactivity resulting in something being put off until a later time.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>isNumeric</name>
+                     </attribute>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                     <attribute>
+                        <name>unitClass</name>
+                        <value>time</value>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Duration</name>
+                  <description>The period of time during which something occurs or continues.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>isNumeric</name>
+                     </attribute>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                     <attribute>
+                        <name>unitClass</name>
+                        <value>time</value>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Frequency</name>
+                  <description>Frequency is the number of occurrences of a repeating event per unit time.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>isNumeric</name>
+                     </attribute>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                     <attribute>
+                        <name>unitClass</name>
+                        <value>frequency</value>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Onset</name>
+                  <description>Labels the start or beginning of something, usually an event.</description>
+                  <attribute>
+                     <name>topLevelTagGroup</name>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Offset</name>
+                  <description>Labels the time at which something stops.</description>
+                  <attribute>
+                     <name>topLevelTagGroup</name>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Pause</name>
+                  <description>Indicates the temporary interruption of  the operation a process and subsequently wait for a signal to continue.</description>
+               </node>
+               <node>
+                  <name>Time-value</name>
+                  <description>A value with units of time. Usually grouped with tags identifying what the value represents.</description>
+                  <attribute>
+                     <name>unitClass</name>
+                     <value>time</value>
+                  </attribute>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>isNumeric</name>
+                     </attribute>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                     <attribute>
+                        <name>unitClass</name>
+                        <value>time</value>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Time-out</name>
+                  <description>A cancellation or cessation that automatically occurs when a predefined interval of time has passed without a certain event occurring.</description>
+               </node>
+               <node>
+                  <name>Time-sync</name>
+                  <description>A synchronization signal whose purpose to help synchronize different signals or processes. Often used to indicate a marker inserted into the recorded data to allow post hoc synchronization of concurrently recorded data streams.</description>
+               </node>
+            </node>
+         </node>
+         <node>
+            <name>Statistical-property</name>
+            <description>A property relating to, based on, or employing the principles of statistics.</description>
+            <attribute>
+               <name>extensionAllowed</name>
+            </attribute>
+            <node>
+               <name>Accuracy</name>
+               <description>A measure of closeness to true value expressed as a number between 0 and 1.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>isNumeric</name>
+                  </attribute>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Data-mean</name>
+               <description>The sum of a set of values divided by the number of values in the set.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>isNumeric</name>
+                  </attribute>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Data-median</name>
+               <description>The value which has an equal number of values greater and less than it.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>isNumeric</name>
+                  </attribute>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Data-minimum</name>
+               <description>The smallest possible quantity.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>isNumeric</name>
+                  </attribute>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Data-maximum</name>
+               <description>The largest possible quantity or degree.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>isNumeric</name>
+                  </attribute>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Probability</name>
+               <description>A measure of the expectation of the occurrence of a particular event.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>isNumeric</name>
+                  </attribute>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Statistical-precision</name>
+               <description>A quantitative representation of the degree of accuracy necessary for or associated with a particular action.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>isNumeric</name>
+                  </attribute>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Statistical-recall</name>
+               <description>Sensitivity is a measurement datum qualifying a binary classification test and is computed by substracting the false negative rate to the integral numeral 1.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>isNumeric</name>
+                  </attribute>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Standard-deviation</name>
+               <description>A measure of the range of values in a set of numbers. Standard deviation is a statistic used as a measure of the dispersion or variation in a distribution, equal to the square root of the arithmetic mean of the squares of the deviations from the arithmetic mean.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>isNumeric</name>
+                  </attribute>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Uncertainty</name>
+               <description>A measure of the inherent variability of repeated observation measurements of a quantity including quantities evaluated by statistical methods and by other means.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>isNumeric</name>
+                  </attribute>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+         </node>
+      </node>
+      <node>
+         <name>Task-property</name>
+         <description>Something that pertains to a task.</description>
+         <attribute>
+            <name>extensionAllowed</name>
+         </attribute>
+         <node>
+            <name>Task-attentional-strategy</name>
+            <description>Strategy for allocating attention toward goal-relevant information.</description>
+            <node>
+               <name>Bottom-up-attention</name>
+               <description>Attentional guidance purely by externally driven factors to stimuli that are salient because of their inherent properties relative to the background. Sometimes this is referred to as stimulus driven.</description>
+            </node>
+            <node>
+               <name>Covert-attention</name>
+               <description>Paying attention without moving the eyes.</description>
+            </node>
+            <node>
+               <name>Divided-attention</name>
+               <description>Integrating parallel multiple stimuli. Behavior involving responding simultaneously to multiple tasks or multiple task demands.</description>
+            </node>
+            <node>
+               <name>Focused-attention</name>
+               <description>Responding discretely to specific visual, auditory, or tactile stimuli.</description>
+            </node>
+            <node>
+               <name>Orienting-attention</name>
+               <description>Directing attention to a target stimulus.</description>
+            </node>
+            <node>
+               <name>Overt-attention</name>
+               <description>Selectively processing one location over others by moving the eyes to point at that location.</description>
+            </node>
+            <node>
+               <name>Selective-attention</name>
+               <description>Maintaining a behavioral or cognitive set in the face of distracting or competing stimuli. Ability to pay attention to a limited array of all available sensory information.</description>
+            </node>
+            <node>
+               <name>Sustained-attention</name>
+               <description>Maintaining a consistent behavioral response during continuous and repetitive activity.</description>
+            </node>
+            <node>
+               <name>Top-down-attention</name>
+               <description>Voluntary allocation of attention to certain features. Sometimes this is referred to goal-oriented attention.</description>
+            </node>
+         </node>
+         <node>
+            <name>Task-effect-evidence</name>
+            <description>The evidence supporting the conclusion that the event had the specified effect.</description>
+            <node>
+               <name>Computational-evidence</name>
+               <description>A type of evidence in which data are produced, and/or generated, and/or analyzed on a computer.</description>
+            </node>
+            <node>
+               <name>External-evidence</name>
+               <description>A phenomenon that follows and is caused by some previous phenomenon.</description>
+            </node>
+            <node>
+               <name>Intended-effect</name>
+               <description>A phenomenon that is intended to follow and be caused by some previous phenomenon.</description>
+            </node>
+            <node>
+               <name>Behavioral-evidence</name>
+               <description>An indication or conclusion based on the behavior of an agent.</description>
+            </node>
+         </node>
+         <node>
+            <name>Task-event-role</name>
+            <description>The purpose of an event with respect to the task.</description>
+            <node>
+               <name>Activity</name>
+               <description>Something that is part of the overall task or is necessary to the overall experiment but is not directly part of a stimulus-response cycle. Examples would be taking a survey or provided providing a silva sample.</description>
+            </node>
+            <node>
+               <name>Background-subtask</name>
+               <description>A part of the task which should be performed in the background as for example inhibiting blinks due to instruction while performing the primary task.</description>
+            </node>
+            <node>
+               <name>Experimental-stimulus</name>
+               <description>Part of something designed to elicit a response in the experiment.</description>
+            </node>
+            <node>
+               <name>Failure</name>
+               <description>A descriptor indicating a failure.</description>
+            </node>
+            <node>
+               <name>Incidental</name>
+               <description>Usually associated with a sensory event intended to give instructions to the participant about the task or behavior.</description>
+            </node>
+            <node>
+               <name>Instructional</name>
+               <description>Usually associated with a sensory event intended to give instructions to the participant about the task or behavior.</description>
+            </node>
+            <node>
+               <name>Mishap</name>
+               <description>Unplanned disruption such as an equipment or experiment control abnormality or experimenter error.</description>
+            </node>
+            <node>
+               <name>Participant-response</name>
+               <description>Something related to a participant actions in performing the task.</description>
+            </node>
+            <node>
+               <name>Primary-subtask</name>
+               <description>A part of the task which should be the primary focus of the participant.</description>
+            </node>
+            <node>
+               <name>Warning</name>
+               <description>Something that should warn the participant that the parameters of the task have been or are about to be exceeded such as a warning message about getting too close to the shoulder of the road in a driving task.</description>
+            </node>
+         </node>
+         <node>
+            <name>Task-response-type</name>
+            <description>How the participant response should be interpreted in terms of the task specification.</description>
+            <node>
+               <name>Appropriate</name>
+               <description>Suitable or proper in the circumstances.</description>
+               <attribute>
+                  <name>relatedTag</name>
+                  <value>Inappropriate</value>
+               </attribute>
+            </node>
+            <node>
+               <name>Correction</name>
+               <description>Offering an improvement to replace a mistake; setting right; something substituted for an error.</description>
+               <attribute>
+                  <name>relatedTag</name>
+                  <value>Successful</value>
+               </attribute>
+            </node>
+            <node>
+               <name>Erroneous</name>
+               <description>Something wrong or incorrect.</description>
+            </node>
+            <node>
+               <name>Imagined</name>
+               <description>Form a mental image or concept of something. This is used to identity something that only happened in the imagination of the participant as in imagined movements in motor imagery paradigms.</description>
+            </node>
+            <node>
+               <name>Inappropriate</name>
+               <description>Not in keeping with what is correct or proper.</description>
+               <attribute>
+                  <name>relatedTag</name>
+                  <value>Appropriate</value>
+               </attribute>
+            </node>
+            <node>
+               <name>Indeterminate</name>
+               <description>Cannot distinguish between two or more possible values in the current context.</description>
+               <attribute>
+                  <name>relatedTag</name>
+                  <value>Missed</value>
+                  <value>Near-miss</value>
+               </attribute>
+            </node>
+            <node>
+               <name>Missed</name>
+               <description>Not existing; not able to be found.</description>
+               <attribute>
+                  <name>relatedTag</name>
+                  <value>Indeterminate</value>
+                  <value>Near-miss</value>
+               </attribute>
+            </node>
+            <node>
+               <name>Near-miss</name>
+               <description>A narrowly avoided collision or other accident.</description>
+               <attribute>
+                  <name>relatedTag</name>
+                  <value>Indeterminate</value>
+                  <value>Miss</value>
+               </attribute>
+            </node>
+            <node>
+               <name>Successful</name>
+               <description>Something that accomplishes its intended purpose.</description>
+               <attribute>
+                  <name>relatedTag</name>
+                  <value>Correction</value>
+               </attribute>
+            </node>
+         </node>
+         <node>
+            <name>Task-stimulus-role</name>
+            <description>The role the stimulus plays in the task.</description>
+            <node>
+               <name>Cue</name>
+               <description>A signal for an action, a pattern of stimuli indicating a particular response.</description>
+            </node>
+            <node>
+               <name>Distractor</name>
+               <description>A person or thing that distracts or a plausible but incorrect option in a multiple-choice question.</description>
+            </node>
+            <node>
+               <name>Expected</name>
+               <description>Considered likely or probable; anticipated. Something of low information value as in frequent non-targets in an RSVP paradigm.</description>
+            </node>
+            <node>
+               <name>Extraneous</name>
+               <description>Irrelevant or unrelated to the subject being dealt with.</description>
+            </node>
+            <node>
+               <name>Feedback</name>
+               <description>An evaluative response to an inquiry, process, event, or activity.</description>
+            </node>
+            <node>
+               <name>Go-signal</name>
+               <description>An indicator to proceed with a planned action.</description>
+               <attribute>
+                  <name>relatedTag</name>
+                  <value>Stop-signal</value>
+               </attribute>
+            </node>
+            <node>
+               <name>Meaningful</name>
+               <description>Conveying significant or relevant information.</description>
+            </node>
+            <node>
+               <name>Newly-learned</name>
+               <description>Representing recently acquired information or understanding.</description>
+            </node>
+            <node>
+               <name>Non-informative</name>
+               <description>Something that is not useful in forming an opinion or judging an outcome.</description>
+            </node>
+            <node>
+               <name>Non-target</name>
+               <description>Something other than that done or looked for. Also tag Expected if the Non-target is frequent.</description>
+               <attribute>
+                  <name>suggestedTag</name>
+                  <value>Expected</value>
+               </attribute>
+            </node>
+            <node>
+               <name>Not-meaningful</name>
+               <description>Not having a serious, important, or useful quality or purpose.</description>
+            </node>
+            <node>
+               <name>Novel</name>
+               <description>Having no previous example or precedent or parallel; of a kind not seen before.</description>
+            </node>
+            <node>
+               <name>Oddball</name>
+               <description>Something strange, bizarre, unusal, or infrequent.</description>
+            </node>
+            <node>
+               <name>Planned</name>
+               <description>Something that was decided on or arranged in advance.</description>
+            </node>
+            <node>
+               <name>Penalty</name>
+               <description>A disadvantage, loss, or hardship due to some action.</description>
+            </node>
+            <node>
+               <name>Priming</name>
+               <description>An implicit memory effect in which exposure to a stimulus influences response to a later stimulus.</description>
+            </node>
+            <node>
+               <name>Query</name>
+               <description>A sentence of inquiry that asks for a reply; a request for information (as in a formal request to a database or search engine or in interrogating a subject for an answer).</description>
+            </node>
+            <node>
+               <name>Reward</name>
+               <description>A positive reinforcement for a desired action, behavior or response.</description>
+            </node>
+            <node>
+               <name>Stop-signal</name>
+               <description>An indicator that the agent should stop the current activity.</description>
+               <attribute>
+                  <name>relatedTag</name>
+                  <value>Go-signal</value>
+               </attribute>
+            </node>
+            <node>
+               <name>Target</name>
+               <description>Something fixed as a goal or point of examination; something to point at; a destination. Something an agent is looking for.</description>
+            </node>
+            <node>
+               <name>Threat</name>
+               <description>An indicator that signifies hostility and predicts an increased probability of attack.</description>
+            </node>
+            <node>
+               <name>Timed</name>
+               <description>Something planned or scheduled to be done at a particular time or lasting for a specified amount of time.</description>
+            </node>
+            <node>
+               <name>Unexpected</name>
+               <description>Something that is not planned or anticipated.</description>
+            </node>
+         </node>
+      </node>
+      <node>
+         <name>Attribute</name>
+         <description>A characteristic of some entity. A quality or feature regarded as a characteristic or inherent part of someone or something. HED attributes are adjectives or adverbs.</description>
+         <attribute>
+            <name>extensionAllowed</name>
+         </attribute>
+         <node>
+            <name>Informational</name>
+            <description>A quality that pertains to information.</description>
+            <node>
+               <name>Def</name>
+               <description>A HED-specific utility tag used with a defined name to represent the tags associated with that definition.</description>
+               <attribute>
+                  <name>requireChild</name>
+               </attribute>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Def-expand</name>
+               <description>A HED specific utility tag that is grouped with an expanded definition. The child value of the Def-expand is the name of the expanded definition.</description>
+               <attribute>
+                  <name>requireChild</name>
+               </attribute>
+               <attribute>
+                  <name>tagGroup</name>
+               </attribute>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Definition</name>
+               <description>A HED-specific utility tag whose child value is the name of the concept and the tag group associated with the tag is an English language explanation of a concept.</description>
+               <attribute>
+                  <name>requireChild</name>
+               </attribute>
+               <attribute>
+                  <name>topLevelTagGroup</name>
+               </attribute>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Description</name>
+               <description>An explanation of what the tag group it is in means. If the description is at the top-level of an event string, the description applies to the event.</description>
+               <attribute>
+                  <name>requireChild</name>
+               </attribute>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Experimental-note</name>
+               <description>A brief written record about the experiment.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>ID</name>
+               <description>An alphanumeric name that identifies either a unique object or a unique class of objects. Here the object or class may be an idea, physical countable object (or class), or physical uncountable substance (or class).</description>
+               <attribute>
+                  <name>requireChild</name>
+               </attribute>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Label</name>
+               <description>A string of 20 or fewer characters identifying something. Labels usually refer to general classes of things while IDs refer to specific instances. A term that is associated with some entity. A brief description given for purposes of identification; an identifying or descriptive marker that is attached to an object.</description>
+               <attribute>
+                  <name>requireChild</name>
+               </attribute>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Metadata</name>
+               <description>Data about data; information that describes another set of data.</description>
+               <node>
+                  <name>CogAtlas</name>
+                  <description>The Cognitive Atlas ID number of somthing.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>CogPo</name>
+                  <description>The CogPO ID number of something.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Creation-date</name>
+                  <description>The date on which data creation of this element began.</description>
+                  <attribute>
+                     <name>requireChild</name>
+                  </attribute>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                     <attribute>
+                        <name>unitClass</name>
+                        <value>datetime</value>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Library-name</name>
+                  <description>Official name of a HED library.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Pathname</name>
+                  <description>The specification of a node (file or directory) in a hierarchical file system, usually specified by listing the nodes top-down.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Subject-identifier</name>
+                  <description>A sequence of characters used to identify, name, or characterize a trial or study subject.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Version-identifier</name>
+                  <description>An alphanumeric character string that identifies a form or variant of a type or original.</description>
+                  <node>
+                     <name>#</name>
+                     <description>Usually is a semantic version.</description>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                  </node>
+               </node>
+            </node>
+            <node>
+               <name>Parameter</name>
+               <description>Any factor that defines a system and determines or limits its performance. A variable whose value changes the characteristics of a system or a function.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Value</name>
+               <description>A numerical quantity measured or assigned or computed. Non-numeric values are specified with the Label tag.</description>
+               <node>
+                  <name>#</name>
+                  <attribute>
+                     <name>takesValue</name>
+                  </attribute>
+               </node>
+            </node>
+         </node>
+         <node>
+            <name>Organizational</name>
+            <description>Relating to an organization or the action of organizing something.</description>
+            <node>
+               <name>Collection</name>
+               <description>A tag designating a grouping of items such as in a set or list.</description>
+            </node>
+            <node>
+               <name>Condition-variable</name>
+               <description>An aspect of the experiment or task that is to be varied during the experiment. Task-conditions are sometimes called independent variables or contrasts.</description>
+            </node>
+            <node>
+               <name>Control-variable</name>
+               <description>An aspect of the experiment that is fixed throughout the study and usually is explicitly controlled.</description>
+            </node>
+            <node>
+               <name>Event-context</name>
+               <description>A special HED tag inserted as part of a top-level tag group to contain information about the interrelated conditions under which the event occurs. The event context includes information about other events that are ongoing when this event happens.</description>
+               <attribute>
+                  <name>topLevelTagGroup</name>
+               </attribute>
+            </node>
+            <node>
+               <name>Event-stream</name>
+               <description>A special HED tag indicating that this event is a member of an ordered succession of events.</description>
+            </node>
+            <node>
+               <name>Experimental-intertrial</name>
+               <description>A tag used to indicate a part of the experiment between trials usually where nothing is happening.</description>
+            </node>
+            <node>
+               <name>Experimental-trial</name>
+               <description>Designates a run or execution of an activity, for example, one execution of a script. A tag used to indicate a particular organizational part in the experimental design often containing a stimulus-response pair or stimulus-response-feedback triad.</description>
+            </node>
+            <node>
+               <name>Indicator-variable</name>
+               <description>An aspect of the experiment or task that is measured as task conditions are varied during the experiment. Experiment indicators are sometimes called dependent variables.</description>
+            </node>
+            <node>
+               <name>Permutation</name>
+               <description>A set of elements are rearranged or reindexed in various and different orders. In the rearrangement process, none of the elements are lost, added, or changed.</description>
+            </node>
+            <node>
+               <name>Recording</name>
+               <description>The process of copying the information in a signal into a persistent information bearer. Indicates an uninterrupted block of time during which data was acquired using a fixed scanning protocol or sensor positioning. Recording tags are usually have temporal scope which is the entire recording.</description>
+            </node>
+            <node>
+               <name>Task</name>
+               <description>An assigned piece of work, usually with a time allotment. A tag used to indicate a linkage the structured activities performed as part of the experiment.</description>
+            </node>
+            <node>
+               <name>Time-block</name>
+               <description>A tag used to indicate a contiguous time block in the experiment during which something is fixed or noted.</description>
+            </node>
+         </node>
+         <node>
+            <name>Relational</name>
+            <description>Concerns the way in which two or more people or things are connected.</description>
+            <node>
+               <name>Comparative-relation</name>
+               <description>Something considered in comparison to something else.</description>
+               <node>
+                  <name>Less-than</name>
+                  <description>(A (Less-than B)) indicates that the relative size or order of A is smaller than that of B.</description>
+               </node>
+               <node>
+                  <name>Less-than-or-equal-to</name>
+                  <description>(A (Less-than-or-equal-to B)) indicates that the relative size or order of A is smaller than or equal to B.</description>
+               </node>
+               <node>
+                  <name>Greater-than</name>
+                  <description>(A (Greater-than B)) indicates that the relative size or order of A is bigger than that of B.</description>
+               </node>
+               <node>
+                  <name>Greater-than-or-equal-to</name>
+                  <description>(A (Greater-than-or-equal-to B)) indicates that the relative size or order of A is bigger than or the same as that of B.</description>
+               </node>
+               <node>
+                  <name>Equal-to</name>
+                  <description>(A (Equal-to B)) indicates that the size or order of A is the same as that of B.</description>
+               </node>
+               <node>
+                  <name>Not-equal-to</name>
+                  <description>(A (Not-equal-to B)) indicates that the size or order of A is not the same as that of B.</description>
+               </node>
+            </node>
+            <node>
+               <name>Connective-relation</name>
+               <description>Indicates two items are related in some way.</description>
+               <node>
+                  <name>Belongs-to</name>
+                  <description>(A (Belongs-to B)) indicates that A is a member of B.</description>
+               </node>
+               <node>
+                  <name>Connected-to</name>
+                  <description>(A (Connected-to) B) indicates that A is related to B in some respect, usually through a direct link.</description>
+               </node>
+               <node>
+                  <name>Contained-in</name>
+                  <description>(A (Contained-in B)) indicates that A is completely inside of B.</description>
+               </node>
+               <node>
+                  <name>Described-by</name>
+                  <description>(A (Described-by B)) indicates that B provides information about A.</description>
+               </node>
+               <node>
+                  <name>From-to</name>
+                  <description>(A (From-to B)) indicates a directional relation from A to B. A is considered the source.</description>
+               </node>
+               <node>
+                  <name>Group-of</name>
+                  <description>(A (Group-of B)) indicates A is a group of items of type B.</description>
+               </node>
+               <node>
+                  <name>Implied-by</name>
+                  <description>(A (Implied-by B)) indicates B is suggested by A.</description>
+               </node>
+               <node>
+                  <name>Interacts-with</name>
+                  <description>(A (Interacts-with B)) indicates A and B interact, possibly reciprocally.</description>
+               </node>
+               <node>
+                  <name>Member-of</name>
+                  <description>(A (Member-of B)) indicates A is a member of group B.</description>
+               </node>
+               <node>
+                  <name>Part-of</name>
+                  <description>(A (Part-of B)) indicates A is a part of the whole B.</description>
+               </node>
+               <node>
+                  <name>Performed-by</name>
+                  <description>(A (Performed-by B)) Indicates that ction or procedure A was carried out by agent B.</description>
+               </node>
+               <node>
+                  <name>Related-to</name>
+                  <description>(A (Relative-to B)) indicates A is a part of the whole B.</description>
+               </node>
+            </node>
+            <node>
+               <name>Ordering-relation</name>
+               <description>A relation describing the systematic arrangement of data items.</description>
+               <node>
+                  <name>Early-item</name>
+                  <description>An item near the beginning of a course, process, or series.</description>
+               </node>
+               <node>
+                  <name>First-item</name>
+                  <description>A first item at the beginning of a course, process, or series.</description>
+               </node>
+               <node>
+                  <name>Next-item</name>
+                  <description>A subsequent or immediately following item in the order.</description>
+               </node>
+               <node>
+                  <name>Later-item</name>
+                  <description>An item occurring near the end of a group of ordered items.</description>
+               </node>
+               <node>
+                  <name>Last-item</name>
+                  <description>An item occurring at the end of a group of ordered items.</description>
+               </node>
+            </node>
+            <node>
+               <name>Quantitative-relation</name>
+               <description>A quantitative or numerical relationship.</description>
+               <node>
+                  <name>Estimated</name>
+                  <description>Calculated approximately.</description>
+               </node>
+               <node>
+                  <name>Approximated</name>
+                  <description>Not quite exact or correct; almost exact or correct.</description>
+               </node>
+               <node>
+                  <name>Exact</name>
+                  <description>Marked by strict and particular and complete accordance with fact.</description>
+               </node>
+            </node>
+            <node>
+               <name>Spatiotemporal-relation</name>
+               <description>A space and or temporal relationship.</description>
+               <node>
+                  <name>Directional-relation</name>
+                  <description>A relationship indicating direction.</description>
+                  <node>
+                     <name>Away-from</name>
+                     <description>Go away from (a place).</description>
+                  </node>
+                  <node>
+                     <name>Backward</name>
+                     <description>Directed behind or to the rear.</description>
+                  </node>
+                  <node>
+                     <name>Closing</name>
+                     <description>Not affording passage or access; blocked against entry.</description>
+                  </node>
+                  <node>
+                     <name>Decreasing</name>
+                     <description>Becoming smaller or fewer in size, amount, intensity, or degree.</description>
+                  </node>
+                  <node>
+                     <name>Downward</name>
+                     <description>Moving or leading toward a lower place or level.</description>
+                  </node>
+                  <node>
+                     <name>Forward</name>
+                     <description>At or near or directed toward the front.</description>
+                  </node>
+                  <node>
+                     <name>Increasing</name>
+                     <description>Becoming greater in size, amount, or degree; growing.</description>
+                  </node>
+                  <node>
+                     <name>Leftward</name>
+                     <description>Going toward or facing the left.</description>
+                  </node>
+                  <node>
+                     <name>Rightward</name>
+                     <description>Going toward or situated on the right.</description>
+                  </node>
+                  <node>
+                     <name>Opening</name>
+                     <description>Widening an aperture, door, or gap, especially one allowing access.</description>
+                  </node>
+                  <node>
+                     <name>Towards</name>
+                     <description>Moving in the direction of.</description>
+                  </node>
+                  <node>
+                     <name>Upward</name>
+                     <description>Moving, pointing, or leading to a higher place, point, or level.</description>
+                  </node>
+               </node>
+               <node>
+                  <name>Orientational-relation</name>
+                  <description>Indicating relative physical position or direction of something.</description>
+                  <node>
+                     <name>Horizontally-oriented</name>
+                     <description>Oriented parallel to or in the plane of the horizon.</description>
+                  </node>
+                  <node>
+                     <name>Oblique</name>
+                     <description>Slanting or inclined in direction or course or position; neither parallel nor perpendicular nor right-angular.</description>
+                  </node>
+                  <node>
+                     <name>Rotated</name>
+                     <description>Move or cause to move in a circle around an axis or center.</description>
+                  </node>
+                  <node>
+                     <name>Vertically-oriented</name>
+                     <description>Oriented in an upright in position or posture.</description>
+                  </node>
+               </node>
+               <node>
+                  <name>Positional-relation</name>
+                  <description>Indicating information about position.</description>
+                  <node>
+                     <name>Above</name>
+                     <description>(A (Adjacent-to B)) means A is in a place or position that is higher than B.</description>
+                  </node>
+                  <node>
+                     <name>Across-from</name>
+                     <description>(A (Across-from B)) means A is on the opposite side of something from B.</description>
+                  </node>
+                  <node>
+                     <name>Adjacent-to</name>
+                     <description>(A (Adjacent-to B)) indicates that A is next to B in time or space.</description>
+                  </node>
+                  <node>
+                     <name>Ahead-of</name>
+                     <description>(A (Ahead-of B)) indicates that A is further forward in time or space in B.</description>
+                  </node>
+                  <node>
+                     <name>Around</name>
+                     <description>(A (Around B)) means A is in or near the present place or situation of B.</description>
+                  </node>
+                  <node>
+                     <name>Behind</name>
+                     <description>(A (Behind B)) means A is at or to the far side of B, typically so as to be hidden by it.</description>
+                  </node>
+                  <node>
+                     <name>Below</name>
+                     <description>(A (Below B)) means A is in a place or position that is lower than the position of B.</description>
+                  </node>
+                  <node>
+                     <name>Between</name>
+                     <description>(A (Between, (B, C))) means A is in the space or interval separating B and C.</description>
+                  </node>
+                  <node>
+                     <name>Bilateral</name>
+                     <description>(A (Bilateral B)) means A is on both sides of B or affects both sides of B.</description>
+                  </node>
+                  <node>
+                     <name>Bottom-of</name>
+                     <description>(A (Bottom-of B)) means A is on the lowest part, side, or surface of B.</description>
+                  </node>
+                  <node>
+                     <name>Boundary-of</name>
+                     <description>(A (Boundary-of B)) means A is on or part of the edge or boundary of B.</description>
+                  </node>
+                  <node>
+                     <name>Center-of</name>
+                     <description>(A (Center-of B)) means A is at a point or or in an area that is approximately central within B.</description>
+                  </node>
+                  <node>
+                     <name>Close-to</name>
+                     <description>(A (Close-to B)) means A is at a small distance from or is located near in space to B.</description>
+                  </node>
+                  <node>
+                     <name>Far-from</name>
+                     <description>(A (Far-from B)) means A is at a large distance from or is not located near in space to B.</description>
+                  </node>
+                  <node>
+                     <name>In-front-of</name>
+                     <description>(A (In-front-of B)) means A is in a position just ahead or at the front part of B, potentially partially blocking B from view.</description>
+                  </node>
+                  <node>
+                     <name>Left-of</name>
+                     <description>(A (Left-of B)) means A is located on or directed toward the side to the west of B when B is facing north. This term is used when A is not part of B.</description>
+                  </node>
+                  <node>
+                     <name>Left-side</name>
+                     <description>(A (Left-side B)) means A is located on the left side of B usually as part of B.</description>
+                  </node>
+                  <node>
+                     <name>Outside-of</name>
+                     <description>(A (Outside-of B)) means A is located in the space around but not including B.</description>
+                  </node>
+                  <node>
+                     <name>Over</name>
+                     <description>(A (over B)) means A above is above B so as to cover or protect or A extends over the a general area as from a from a vantage point.</description>
+                  </node>
+                  <node>
+                     <name>Right-of</name>
+                     <description>(A (Right-of B)) means A is located on or directed toward the side to the east of B when B is facing north. This term is used when A is not part of B.</description>
+                  </node>
+                  <node>
+                     <name>Right-side</name>
+                     <description>(A (Right-side B)) means A is located on the right side of B usually as part of B.</description>
+                  </node>
+                  <node>
+                     <name>Top-of</name>
+                     <description>(A (Top-of B)) means A is on the uppermost part, side, or surface of B.</description>
+                  </node>
+                  <node>
+                     <name>Underneath</name>
+                     <description>(A (Underneath B)) means A is situated directly below and may be concealed by B.</description>
+                  </node>
+                  <node>
+                     <name>Within</name>
+                     <description>(A (Within B)) means A is on the inside of or contained in B.</description>
+                  </node>
+               </node>
+               <node>
+                  <name>Temporal-relation</name>
+                  <description>Any relationship which includes a temporal or time-based component.</description>
+                  <node>
+                     <name>After</name>
+                     <description>(A After B) means A happens at a time subsequent to a reference time related to B.</description>
+                  </node>
+                  <node>
+                     <name>Asynchronous-with</name>
+                     <description>(A Asynchronous-with B) means A happens at times not occurring at the same time or having the same period or phase as B.</description>
+                  </node>
+                  <node>
+                     <name>Before</name>
+                     <description>(A Before B) means A happens at a time earlier in time or order than B.</description>
+                  </node>
+                  <node>
+                     <name>During</name>
+                     <description>(A During B) means A happens at some point in a given period of time in which B is ongoing.</description>
+                  </node>
+                  <node>
+                     <name>Synchronous-with</name>
+                     <description>(A Synchronous-with B) means A happens at occurs at the same time or rate as B.</description>
+                  </node>
+                  <node>
+                     <name>Waiting-for</name>
+                     <description>(A Waiting-for B) means A pauses for something to happen in B.</description>
+                  </node>
+               </node>
+               <node>
+                  <name>Variability-relation</name>
+                  <description>An attribute describing how something changes or varies.</description>
+                  <node>
+                     <name>Abrupt</name>
+                     <description>Marked by sudden change.</description>
+                  </node>
+                  <node>
+                     <name>Constant</name>
+                     <description>Continually recurring or continuing without interruption. Not changing in time or space.</description>
+                  </node>
+                  <node>
+                     <name>Continuous</name>
+                     <description>Uninterrupted in time, sequence, substance, or extent.</description>
+                  </node>
+                  <node>
+                     <name>Deterministic</name>
+                     <description>No randomness is involved in the development of the future states of the element.</description>
+                     <attribute>
+                        <name>relatedTag</name>
+                        <value>Random</value>
+                        <value>Stochastic</value>
+                     </attribute>
+                  </node>
+                  <node>
+                     <name>Discrete</name>
+                     <description>Constituting a separate entities or parts.</description>
+                  </node>
+                  <node>
+                     <name>Flickering</name>
+                     <description>Moving irregularly or unsteadily or burning or shining fitfully or with a fluctuating light.</description>
+                  </node>
+                  <node>
+                     <name>Fractal</name>
+                     <description>Having extremely irregular curves or shapes for which any suitably chosen part is similar in shape to a given larger or smaller part when magnified or reduced to the same size.</description>
+                  </node>
+                  <node>
+                     <name>Random</name>
+                     <description>Governed by or depending on chance; lacking any definite plan or order or purpose.</description>
+                     <attribute>
+                        <name>relatedTag</name>
+                        <value>Deterministic</value>
+                        <value>Stochastic</value>
+                     </attribute>
+                  </node>
+                  <node>
+                     <name>Repetitive</name>
+                     <description>A recurring action that is often non-purposeful.</description>
+                  </node>
+                  <node>
+                     <name>Stochastic</name>
+                     <description>Uses  a random probability distribution or pattern that may be analysed statistically but may not be predicted precisely to determine future states.</description>
+                     <attribute>
+                        <name>relatedTag</name>
+                        <value>Deterministic</value>
+                        <value>Random</value>
+                     </attribute>
+                  </node>
+                  <node>
+                     <name>Varying</name>
+                     <description>Differing in size, amount, degree, or nature.</description>
+                  </node>
+               </node>
+            </node>
+            <node>
+               <name>Thermal-relation</name>
+               <description>A relationship related to temperature.</description>
+               <node>
+                  <name>Cold</name>
+                  <description>Characterized by an absence of heat.</description>
+               </node>
+               <node>
+                  <name>Colder-than</name>
+                  <description>(A (Colder-than B)) means A has less heat energy than the object against which it is compared; the absence of heat.</description>
+               </node>
+               <node>
+                  <name>Hot</name>
+                  <description>Characterized by an excess of heat.</description>
+               </node>
+               <node>
+                  <name>Hotter-than</name>
+                  <description>(A (Hotter-than B)) means A has more heat energy than the object against which it is compared; the absence of heat.</description>
+               </node>
+            </node>
+         </node>
+         <node>
+            <name>Categorical</name>
+            <description>Indicates that something can take on a limited and usually fixed number of possible values.</description>
+            <node>
+               <name>Categorical-class</name>
+               <description>Categorical values that fall into discrete classes such as true or false. The grouping is absolute in the sense that it is the same for all participants.</description>
+               <node>
+                  <name>All</name>
+                  <description>To a complete degree or to the full or entire extent.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Some</value>
+                     <value>None</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Correct</name>
+                  <description>Free from error; especially conforming to fact or truth.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Incorrect</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Explicit</name>
+                  <description>Stated clearly and in detail, leaving no room for confusion or doubt.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Implicit</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>False</name>
+                  <description>Not in accordance with facts, reality or definitive criteria.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>True</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Implicit</name>
+                  <description>Implied though not plainly expressed.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Explicit</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Invalid</name>
+                  <description>Not true because based on erroneous information or unsound reasoning or not conforming to the correct format or specifications.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Valid</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>None</name>
+                  <description>No person or thing, nobody, not any.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>All</value>
+                     <value>Some</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Some</name>
+                  <description>At least a small amount or number of, but not a large amount of, or often.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>All</value>
+                     <value>None</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>True</name>
+                  <description>Conforming to facts, reality or definitive criteria.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>False</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Valid</name>
+                  <description>Allowable, usable, or acceptable.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Invalid</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Wrong</name>
+                  <description>Not accurate, correct, or appropriate.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Correct</value>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Categorical-judgment</name>
+               <description>Categorical values that are based on the judgment or perception of the participant such familiar and famous.</description>
+               <node>
+                  <name>Abnormal</name>
+                  <description>Deviating in any way from the state, position, structure, condition, behavior, or rule which is considered a norm.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Normal</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Asymmetrical</name>
+                  <description>Lacking symmetry or having parts that fail to correspond to one another in shape, size, or arrangement; lacking symmetry.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Symmetrical</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Congruent</name>
+                  <description>Concordance of multiple evidence lines. In agreement or harmony.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Incongruent</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Constrained</name>
+                  <description>Keeping something within particular limits or bounds.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Unconstrained</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Disordered</name>
+                  <description>Not neatly arranged; confused and untidy. A structural quality in which the parts of an object are non-rigid.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Ordered</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Familiar</name>
+                  <description>Recognized, familiar, or within the scope of knowledge.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Unfamiliar</value>
+                     <value>Famous</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Famous</name>
+                  <description>A person who has a high degree of recognition by the general population for his or her success or accomplishments; a famous person.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Familiar</value>
+                     <value>UnfamiliarrelatedTag</value>
+                     <value>Unfamiliar</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Incongruent</name>
+                  <description>Not in agreement or harmony.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Congruent</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Involuntary</name>
+                  <description>An action that is not made by choice. In the body, involuntary actions (such as blushing) occur automatically, and cannot be controlled by choice.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Voluntary</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Masked</name>
+                  <description>Information exists but is not provided or is partially obscured due to security,  privacy, or other concerns.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Unmasked</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Normal</name>
+                  <description>Being approximately average or within certain limits; conforming with or constituting a norm or standard or level or type or social norm.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Abnormal</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Ordered</name>
+                  <description>Conforming to a logical or comprehensible arrangement of separate elements; a condition of regular or proper arrangement.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Disordered</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Symmetrical</name>
+                  <description>Made up of exactly similar parts facing each other or around an axis; showing symmetry.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Asymmetrical</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Unconstrained</name>
+                  <description>Moving without restriction.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Constrained</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Unfamiliar</name>
+                  <description>Not having knowledge or experience of.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Familiar</value>
+                     <value>Famous</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Unmasked</name>
+                  <description>Information is revealed.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Masked</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Voluntary</name>
+                  <description>Using free will or design; not forced or compelled; controlled by individual volition.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Involuntary</value>
+                  </attribute>
+               </node>
+            </node>
+            <node>
+               <name>Categorical-level</name>
+               <description>Categorical values based on dividing a continuous variable into levels such as high and low.</description>
+               <node>
+                  <name>Deep</name>
+                  <description>Extending relatively far inward or downward.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Shallow</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>High</name>
+                  <description>Having an elevated level or position or degree; having a greater than normal in degree or intensity or amount.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Low</value>
+                     <value>Medium</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Liminal</name>
+                  <description>Situated at a sensory threshold; barely perceptible or capable of eliciting a response.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Subliminal</value>
+                     <value>Supraliminal</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Low</name>
+                  <description>A minimum level or position or degree; less than normal in degree, intensity or amount.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>High</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Medium</name>
+                  <description>Mid-way between small and large in number, quantity, magnitude or extent.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Low</value>
+                     <value>High</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Negative</name>
+                  <description>Involving disadvantage or harm.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Positive</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Positive</name>
+                  <description>Involving advantage or good.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Negative</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Shallow</name>
+                  <description>Having a depth which is relatively low.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Deep</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Subliminal</name>
+                  <description>Situated below a sensory threshold; imperceptible or not capable of eliciting a response.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Liminal</value>
+                     <value>Supraliminal</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Supraliminal</name>
+                  <description>Situated above a sensory threshold; perceptible or capable of eliciting a response.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Liminal</value>
+                     <value>Subliminal</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Thick</name>
+                  <description>Wide in width, extent or cross-section.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Thin</value>
+                  </attribute>
+               </node>
+               <node>
+                  <name>Thin</name>
+                  <description>Narrow in width, extent or cross-section.</description>
+                  <attribute>
+                     <name>relatedTag</name>
+                     <value>Thick</value>
+                  </attribute>
+               </node>
+            </node>
+         </node>
+         <node>
+            <name>Descriptive</name>
+            <description>Involving a written or verbal account, representation, statement, or explanation of something.</description>
+            <node>
+               <name>Abstract</name>
+               <description>A concept or idea not associated with any specific instance.</description>
+            </node>
+            <node>
+               <name>Clinical</name>
+               <description>Relating to the examination and treatment of patients dependent on direct observation.</description>
+            </node>
+            <node>
+               <name>Complex</name>
+               <description>Hard, involved or complicated, elaborate, having many parts.</description>
+            </node>
+            <node>
+               <name>Composite</name>
+               <description>Consisting of separate interconnected parts.</description>
+            </node>
+            <node>
+               <name>Numerical</name>
+               <description>A numeral or string of numerals expressing value, quantity, or identification.</description>
+            </node>
+            <node>
+               <name>Symbolic</name>
+               <description>A representation such as a tattoo with a specific meaning. Significant purely in terms of what is being represented or implied.</description>
+            </node>
+         </node>
+         <node>
+            <name>Sensory</name>
+            <description>Relating to sensation or the physical senses; transmitted or perceived by the senses.</description>
+            <node>
+               <name>Auditory</name>
+               <description>Of or relating to the process of hearing.</description>
+               <node>
+                  <name>Audible</name>
+                  <description>Any action or condition designed to cause the registration or perception of a stimulus by organs and receptors involved in the sense of hearing.</description>
+               </node>
+               <node>
+                  <name>Loudness</name>
+                  <description>A physical quality inhering in a sound wave by virtue of the maximum magnitude (value without regard to sign) of its disturbance.</description>
+                  <node>
+                     <name>#</name>
+                     <attribute>
+                        <name>isNumeric</name>
+                     </attribute>
+                     <attribute>
+                        <name>takesValue</name>
+                     </attribute>
+                  </node>
+               </node>
+               <node>
+                  <name>Monophonic</name>
+                  <description>Relating to sound transmission, recording, or reproduction involving a single transmission path.</description>
+               </node>
+               <node>
+                  <name>Silent</name>
+                  <description>The absence of ambient audible sound, the emission of sounds of such low intensity that they do not draw attention to themselves, or the state of having ceased to produce sounds.</description>
+               </node>
+               <node>
+                  <name>Stereophonic</name>
+                  <description>Relating to, or constituting sound reproduction involving the use of separated microphones and two transmission channels to achieve the sound separation of a live hearing.</description>
+               </node>
+               <node>
+                  <name>Timbre</name>
+                  <description>The quality of tone distinctive of a particular singing voice or musical instrument.</description>
+               </node>
+            </node>
+            <node>
+               <name>Gustatory</name>
+               <description>Concerned with tasting or the sense of taste.</description>
+               <node>
+                  <name>Bitter</name>
+                  <description>Having a sharp, pungent taste.</description>
+               </node>
+               <node>
+                  <name>Salty</name>
+                  <description>Tasting of or like salt.</description>
+               </node>
+               <node>
+                  <name>Savory</name>
+                  <description>Belonging to a taste that is salty or spicy rather than sweet.</description>
+               </node>
+               <node>
+                  <name>Sour</name>
+                  <description>Having a sharp, acidic taste.</description>
+               </node>
+               <node>
+                  <name>Sweet</name>
+                  <description>Having or resembling the taste of sugar.</description>
+               </node>
+            </node>
+            <node>
+               <name>Tactile</name>
+               <description>Of or connected with the sense of touch.</description>
+               <node>
+                  <name>Tactile-pressure</name>
+                  <description>Having a feeling of heaviness.</description>
+               </node>
+               <node>
+                  <name>Tactile-texture</name>
+                  <description>Having a feeling of roughness.</description>
+               </node>
+               <node>
+                  <name>Tactile-vibration</name>
+                  <description>Having a feeling of mechanical oscillation.</description>
+               </node>
+            </node>
+            <node>
+               <name>Olfactory</name>
+               <description>Having to do with the faculty of smell.</description>
+            </node>
+            <node>
+               <name>Somatic</name>
+               <description>Having to do with feelings in the body.</description>
+               <node>
+                  <name>Pain</name>
+                  <description>The sensation of discomfort, distress, or agony, resulting from the stimulation of specialized nerve endings.</description>
+               </node>
+               <node>
+                  <name>Stress</name>
+                  <description>The negative mental, emotional, and physical reactions that occur when environmental stressors are perceived as exceeding the adaptive capacities of the individual.</description>
+               </node>
+            </node>
+            <node>
+               <name>Vestibular</name>
+               <description>Relating to or affecting the perception of body position and movement.</description>
+            </node>
+            <node>
+               <name>Visual</name>
+               <description>Relating to or using sight; able to be seen.</description>
+               <node>
+                  <name>Luminance</name>
+                  <description>A quality that exists by virtue of the luminous intensity per unit area projected in a given direction.</description>
+               </node>
+               <node>
+                  <name>Color</name>
+                  <description>The appearance of objects (or light sources) described in terms of perception of their hue and lightness (or brightness) and saturation.</description>
+                  <node>
+                     <name>Color-shade</name>
+                     <description>A slight degree of difference between colors, especially with regard to how light or dark it is or as distinguished from one nearly like it.</description>
+                     <node>
+                        <name>Dark-shade</name>
+                        <description>A color tone not reflecting much light.</description>
+                     </node>
+                     <node>
+                        <name>Light-shade</name>
+                        <description>A color tone reflecting more light.</description>
+                     </node>
+                  </node>
+                  <node>
+                     <name>HSV-color</name>
+                     <description>A color representation that models how colors appear under light.</description>
+                     <node>
+                        <name>Hue</name>
+                        <description>Attribute of a visual sensation according to which an area appears to be similar to one of the perceived colors.</description>
+                        <node>
+                           <name>#</name>
+                           <description>Angular value between 0 and 360</description>
+                           <attribute>
+                              <name>isNumeric</name>
+                           </attribute>
+                           <attribute>
+                              <name>takesValue</name>
+                           </attribute>
+                        </node>
+                     </node>
+                     <node>
+                        <name>Saturation</name>
+                        <description>Colorfulness of a stimulus relative to its own brightness.</description>
+                        <node>
+                           <name>#</name>
+                           <description>B value of RGB between 0 and 1</description>
+                           <attribute>
+                              <name>isNumeric</name>
+                           </attribute>
+                           <attribute>
+                              <name>takesValue</name>
+                           </attribute>
+                        </node>
+                     </node>
+                     <node>
+                        <name>HSV-value</name>
+                        <description>AAttribute of a visual sensation according to which an area appears to emit more or less light.</description>
+                        <node>
+                           <name>#</name>
+                           <attribute>
+                              <name>isNumeric</name>
+                           </attribute>
+                           <attribute>
+                              <name>takesValue</name>
+                           </attribute>
+                        </node>
+                     </node>
+                  </node>
+                  <node>
+                     <name>RGB-color</name>
+                     <description>A color from the RGB schema.</description>
+                     <node>
+                        <name>RGB-red</name>
+                        <description>The red component.</description>
+                        <node>
+                           <name>#</name>
+                           <description>R value of RGB between 0 and 1</description>
+                           <attribute>
+                              <name>isNumeric</name>
+                           </attribute>
+                           <attribute>
+                              <name>takesValue</name>
+                           </attribute>
+                        </node>
+                     </node>
+                     <node>
+                        <name>RGB-blue</name>
+                        <description>The blue component.</description>
+                        <node>
+                           <name>#</name>
+                           <description>B value of RGB between 0 and 1</description>
+                           <attribute>
+                              <name>isNumeric</name>
+                           </attribute>
+                           <attribute>
+                              <name>takesValue</name>
+                           </attribute>
+                        </node>
+                     </node>
+                     <node>
+                        <name>RGB-green</name>
+                        <description>The green component.</description>
+                        <node>
+                           <name>#</name>
+                           <description>G value of RGB between 0 and 1</description>
+                           <attribute>
+                              <name>isNumeric</name>
+                           </attribute>
+                           <attribute>
+                              <name>takesValue</name>
+                           </attribute>
+                        </node>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Grayscale</name>
+                     <description>Using a color map composed of shades of gray, varying from black at the weakest intensity to white at the strongest.</description>
+                     <node>
+                        <name>#</name>
+                        <description>White intensity between 0 and 1</description>
+                        <attribute>
+                           <name>isNumeric</name>
+                        </attribute>
+                        <attribute>
+                           <name>takesValue</name>
+                        </attribute>
+                     </node>
+                  </node>
+                  <node>
+                     <name>CSS-color</name>
+                     <description>One of 140 colors supported by all browsers. For more details such as the color RGB or HEX values,  check:  https://www.w3schools.com/colors/colors_groups.asp</description>
+                     <node>
+                        <name>Blue-color</name>
+                        <description>CSS color group</description>
+                        <node>
+                           <name>CadetBlue</name>
+                           <description>CSS-color 0x5F9EA0</description>
+                        </node>
+                        <node>
+                           <name>SteelBlue</name>
+                           <description>CSS-color 0x4682B4</description>
+                        </node>
+                        <node>
+                           <name>LightSteelBlue</name>
+                           <description>CSS-color 0xB0C4DE</description>
+                        </node>
+                        <node>
+                           <name>LightBlue</name>
+                           <description>CSS-color 0xADD8E6</description>
+                        </node>
+                        <node>
+                           <name>PowderBlue</name>
+                           <description>CSS-color 0xB0E0E6</description>
+                        </node>
+                        <node>
+                           <name>LightSkyBlue</name>
+                           <description>CSS-color 0x87CEFA</description>
+                        </node>
+                        <node>
+                           <name>SkyBlue</name>
+                           <description>CSS-color 0x87CEEB</description>
+                        </node>
+                        <node>
+                           <name>CornflowerBlue</name>
+                           <description>CSS-color 0x6495ED</description>
+                        </node>
+                        <node>
+                           <name>DeepSkyBlue</name>
+                           <description>CSS-color 0x00BFFF</description>
+                        </node>
+                        <node>
+                           <name>DodgerBlue</name>
+                           <description>CSS-color 0x1E90FF</description>
+                        </node>
+                        <node>
+                           <name>RoyalBlue</name>
+                           <description>CSS-color 0x4169E1</description>
+                        </node>
+                        <node>
+                           <name>Blue</name>
+                           <description>CSS-color 0x0000FF</description>
+                        </node>
+                        <node>
+                           <name>MediumBlue</name>
+                           <description>CSS-color 0x0000CD</description>
+                        </node>
+                        <node>
+                           <name>DarkBlue</name>
+                           <description>CSS-color 0x00008B</description>
+                        </node>
+                        <node>
+                           <name>Navy</name>
+                           <description>CSS-color 0x000080</description>
+                        </node>
+                        <node>
+                           <name>MidnightBlue</name>
+                           <description>CSS-color 0x191970</description>
+                        </node>
+                     </node>
+                     <node>
+                        <name>Brown-color</name>
+                        <description>CSS color group</description>
+                        <node>
+                           <name>Cornsilk</name>
+                           <description>CSS-color 0xFFF8DC</description>
+                        </node>
+                        <node>
+                           <name>BlanchedAlmond</name>
+                           <description>CSS-color 0xFFEBCD</description>
+                        </node>
+                        <node>
+                           <name>Bisque</name>
+                           <description>CSS-color 0xFFE4C4</description>
+                        </node>
+                        <node>
+                           <name>NavajoWhite</name>
+                           <description>CSS-color 0xFFDEAD</description>
+                        </node>
+                        <node>
+                           <name>Wheat</name>
+                           <description>CSS-color 0xF5DEB3</description>
+                        </node>
+                        <node>
+                           <name>BurlyWood</name>
+                           <description>CSS-color 0xDEB887</description>
+                        </node>
+                        <node>
+                           <name>Tan</name>
+                           <description>CSS-color 0xD2B48C</description>
+                        </node>
+                        <node>
+                           <name>RosyBrown</name>
+                           <description>CSS-color 0xBC8F8F</description>
+                        </node>
+                        <node>
+                           <name>SandyBrown</name>
+                           <description>CSS-color 0xF4A460</description>
+                        </node>
+                        <node>
+                           <name>GoldenRod</name>
+                           <description>CSS-color 0xDAA520</description>
+                        </node>
+                        <node>
+                           <name>DarkGoldenRod</name>
+                           <description>CSS-color 0xB8860B</description>
+                        </node>
+                        <node>
+                           <name>Peru</name>
+                           <description>CSS-color 0xCD853F</description>
+                        </node>
+                        <node>
+                           <name>Chocolate</name>
+                           <description>CSS-color 0xD2691E</description>
+                        </node>
+                        <node>
+                           <name>Olive</name>
+                           <description>CSS-color 0x808000</description>
+                        </node>
+                        <node>
+                           <name>SaddleBrown</name>
+                           <description>CSS-color 0x8B4513</description>
+                        </node>
+                        <node>
+                           <name>Sienna</name>
+                           <description>CSS-color 0xA0522D</description>
+                        </node>
+                        <node>
+                           <name>Brown</name>
+                           <description>CSS-color 0xA52A2A</description>
+                        </node>
+                        <node>
+                           <name>Maroon</name>
+                           <description>CSS-color 0x800000</description>
+                        </node>
+                     </node>
+                     <node>
+                        <name>Cyan-color</name>
+                        <description>CSS color group</description>
+                        <node>
+                           <name>Aqua</name>
+                           <description>CSS-color 0x00FFFF</description>
+                        </node>
+                        <node>
+                           <name>Cyan</name>
+                           <description>CSS-color 0x00FFFF</description>
+                        </node>
+                        <node>
+                           <name>LightCyan</name>
+                           <description>CSS-color 0xE0FFFF</description>
+                        </node>
+                        <node>
+                           <name>PaleTurquoise</name>
+                           <description>CSS-color 0xAFEEEE</description>
+                        </node>
+                        <node>
+                           <name>Aquamarine</name>
+                           <description>CSS-color 0x7FFFD4</description>
+                        </node>
+                        <node>
+                           <name>Turquoise</name>
+                           <description>CSS-color 0x40E0D0</description>
+                        </node>
+                        <node>
+                           <name>MediumTurquoise</name>
+                           <description>CSS-color 0x48D1CC</description>
+                        </node>
+                        <node>
+                           <name>DarkTurquoise</name>
+                           <description>CSS-color 0x00CED1</description>
+                        </node>
+                     </node>
+                     <node>
+                        <name>Green-color</name>
+                        <description>CSS color group</description>
+                        <node>
+                           <name>GreenYellow</name>
+                           <description>CSS-color 0xADFF2F</description>
+                        </node>
+                        <node>
+                           <name>Chartreuse</name>
+                           <description>CSS-color 0x7FFF00</description>
+                        </node>
+                        <node>
+                           <name>LawnGreen</name>
+                           <description>CSS-color 0x7CFC00</description>
+                        </node>
+                        <node>
+                           <name>Lime</name>
+                           <description>CSS-color 0x00FF00</description>
+                        </node>
+                        <node>
+                           <name>LimeGreen</name>
+                           <description>CSS-color 0x32CD32</description>
+                        </node>
+                        <node>
+                           <name>PaleGreen</name>
+                           <description>CSS-color 0x98FB98</description>
+                        </node>
+                        <node>
+                           <name>LightGreen</name>
+                           <description>CSS-color 0x90EE90</description>
+                        </node>
+                        <node>
+                           <name>MediumSpringGreen</name>
+                           <description>CSS-color 0x00FA9A</description>
+                        </node>
+                        <node>
+                           <name>SpringGreen</name>
+                           <description>CSS-color 0x00FF7F</description>
+                        </node>
+                        <node>
+                           <name>MediumSeaGreen</name>
+                           <description>CSS-color 0x3CB371</description>
+                        </node>
+                        <node>
+                           <name>SeaGreen</name>
+                           <description>CSS-color 0x2E8B57</description>
+                        </node>
+                        <node>
+                           <name>ForestGreen</name>
+                           <description>CSS-color 0x228B22</description>
+                        </node>
+                        <node>
+                           <name>Green</name>
+                           <description>CSS-color 0x008000</description>
+                        </node>
+                        <node>
+                           <name>DarkGreen</name>
+                           <description>CSS-color 0x006400</description>
+                        </node>
+                        <node>
+                           <name>YellowGreen</name>
+                           <description>CSS-color 0x9ACD32</description>
+                        </node>
+                        <node>
+                           <name>OliveDrab</name>
+                           <description>CSS-color 0x6B8E23</description>
+                        </node>
+                        <node>
+                           <name>DarkOliveGreen</name>
+                           <description>CSS-color 0x556B2F</description>
+                        </node>
+                        <node>
+                           <name>MediumAquaMarine</name>
+                           <description>CSS-color 0x66CDAA</description>
+                        </node>
+                        <node>
+                           <name>DarkSeaGreen</name>
+                           <description>CSS-color 0x8FBC8F</description>
+                        </node>
+                        <node>
+                           <name>LightSeaGreen</name>
+                           <description>CSS-color 0x20B2AA</description>
+                        </node>
+                        <node>
+                           <name>DarkCyan</name>
+                           <description>CSS-color 0x008B8B</description>
+                        </node>
+                        <node>
+                           <name>Teal</name>
+                           <description>CSS-color 0x008080</description>
+                        </node>
+                     </node>
+                     <node>
+                        <name>Gray-color</name>
+                        <description>CSS color group</description>
+                        <node>
+                           <name>Gainsboro</name>
+                           <description>CSS-color 0xDCDCDC</description>
+                        </node>
+                        <node>
+                           <name>LightGray</name>
+                           <description>CSS-color 0xD3D3D3</description>
+                        </node>
+                        <node>
+                           <name>Silver</name>
+                           <description>CSS-color 0xC0C0C0</description>
+                        </node>
+                        <node>
+                           <name>DarkGray</name>
+                           <description>CSS-color 0xA9A9A9</description>
+                        </node>
+                        <node>
+                           <name>DimGray</name>
+                           <description>CSS-color 0x696969</description>
+                        </node>
+                        <node>
+                           <name>Gray</name>
+                           <description>CSS-color 0x808080</description>
+                        </node>
+                        <node>
+                           <name>LightSlateGray</name>
+                           <description>CSS-color 0x778899</description>
+                        </node>
+                        <node>
+                           <name>SlateGray</name>
+                           <description>CSS-color 0x708090</description>
+                        </node>
+                        <node>
+                           <name>DarkSlateGray</name>
+                           <description>CSS-color 0x2F4F4F</description>
+                        </node>
+                        <node>
+                           <name>Black</name>
+                           <description>CSS-color 0x000000</description>
+                        </node>
+                     </node>
+                     <node>
+                        <name>Orange-color</name>
+                        <description>CSS color group</description>
+                        <node>
+                           <name>Orange</name>
+                           <description>CSS-color 0xFFA500</description>
+                        </node>
+                        <node>
+                           <name>DarkOrange</name>
+                           <description>CSS-color 0xFF8C00</description>
+                        </node>
+                        <node>
+                           <name>Coral</name>
+                           <description>CSS-color 0xFF7F50</description>
+                        </node>
+                        <node>
+                           <name>Tomato</name>
+                           <description>CSS-color 0xFF6347</description>
+                        </node>
+                        <node>
+                           <name>OrangeRed</name>
+                           <description>CSS-color 0xFF4500</description>
+                        </node>
+                     </node>
+                     <node>
+                        <name>Pink-color</name>
+                        <description>CSS color group</description>
+                        <node>
+                           <name>Pink</name>
+                           <description>CSS-color 0xFFC0CB</description>
+                        </node>
+                        <node>
+                           <name>LightPink</name>
+                           <description>CSS-color 0xFFB6C1</description>
+                        </node>
+                        <node>
+                           <name>HotPink</name>
+                           <description>CSS-color 0xFF69B4</description>
+                        </node>
+                        <node>
+                           <name>DeepPink</name>
+                           <description>CSS-color 0xFF1493</description>
+                        </node>
+                        <node>
+                           <name>PaleVioletRed</name>
+                           <description>CSS-color 0xDB7093</description>
+                        </node>
+                        <node>
+                           <name>MediumVioletRed</name>
+                           <description>CSS-color 0xC71585</description>
+                        </node>
+                     </node>
+                     <node>
+                        <name>Purple-color</name>
+                        <description>CSS color group</description>
+                        <node>
+                           <name>Lavender</name>
+                           <description>CSS-color 0xE6E6FA</description>
+                        </node>
+                        <node>
+                           <name>Thistle</name>
+                           <description>CSS-color 0xD8BFD8</description>
+                        </node>
+                        <node>
+                           <name>Plum</name>
+                           <description>CSS-color 0xDDA0DD</description>
+                        </node>
+                        <node>
+                           <name>Orchid</name>
+                           <description>CSS-color 0xDA70D6</description>
+                        </node>
+                        <node>
+                           <name>Violet</name>
+                           <description>CSS-color 0xEE82EE</description>
+                        </node>
+                        <node>
+                           <name>Fuchsia</name>
+                           <description>CSS-color 0xFF00FF</description>
+                        </node>
+                        <node>
+                           <name>Magenta</name>
+                           <description>CSS-color 0xFF00FF</description>
+                        </node>
+                        <node>
+                           <name>MediumOrchid</name>
+                           <description>CSS-color 0xBA55D3</description>
+                        </node>
+                        <node>
+                           <name>DarkOrchid</name>
+                           <description>CSS-color 0x9932CC</description>
+                        </node>
+                        <node>
+                           <name>DarkViolet</name>
+                           <description>CSS-color 0x9400D3</description>
+                        </node>
+                        <node>
+                           <name>BlueViolet</name>
+                           <description>CSS-color 0x8A2BE2</description>
+                        </node>
+                        <node>
+                           <name>DarkMagenta</name>
+                           <description>CSS-color 0x8B008B</description>
+                        </node>
+                        <node>
+                           <name>Purple</name>
+                           <description>CSS-color 0x800080</description>
+                        </node>
+                        <node>
+                           <name>MediumPurple</name>
+                           <description>CSS-color 0x9370DB</description>
+                        </node>
+                        <node>
+                           <name>MediumSlateBlue</name>
+                           <description>CSS-color 0x7B68EE</description>
+                        </node>
+                        <node>
+                           <name>SlateBlue</name>
+                           <description>CSS-color 0x6A5ACD</description>
+                        </node>
+                        <node>
+                           <name>DarkSlateBlue</name>
+                           <description>CSS-color 0x483D8B</description>
+                        </node>
+                        <node>
+                           <name>RebeccaPurple</name>
+                           <description>CSS-color 0x663399</description>
+                        </node>
+                        <node>
+                           <name>Indigo</name>
+                           <description>CSS-color 0x4B0082</description>
+                        </node>
+                     </node>
+                     <node>
+                        <name>Red-color</name>
+                        <description>CSS color group</description>
+                        <node>
+                           <name>LightSalmon</name>
+                           <description>CSS-color 0xFFA07A</description>
+                        </node>
+                        <node>
+                           <name>Salmon</name>
+                           <description>CSS-color 0xFA8072</description>
+                        </node>
+                        <node>
+                           <name>DarkSalmon</name>
+                           <description>CSS-color 0xE9967A</description>
+                        </node>
+                        <node>
+                           <name>LightCoral</name>
+                           <description>CSS-color 0xF08080</description>
+                        </node>
+                        <node>
+                           <name>IndianRed</name>
+                           <description>CSS-color 0xCD5C5C</description>
+                        </node>
+                        <node>
+                           <name>Crimson</name>
+                           <description>CSS-color 0xDC143C</description>
+                        </node>
+                        <node>
+                           <name>Red</name>
+                           <description>CSS-color 0xFF0000</description>
+                        </node>
+                        <node>
+                           <name>FireBrick</name>
+                           <description>CSS-color 0xB22222</description>
+                        </node>
+                        <node>
+                           <name>DarkRed</name>
+                           <description>CSS-color 0x8B0000</description>
+                        </node>
+                     </node>
+                     <node>
+                        <name>Yellow-color</name>
+                        <description>CSS color group</description>
+                        <node>
+                           <name>Gold</name>
+                           <description>CSS-color 0xFFD700</description>
+                        </node>
+                        <node>
+                           <name>Yellow</name>
+                           <description>CSS-color 0xFFFF00</description>
+                        </node>
+                        <node>
+                           <name>LightYellow</name>
+                           <description>CSS-color 0xFFFFE0</description>
+                        </node>
+                        <node>
+                           <name>LemonChiffon</name>
+                           <description>CSS-color 0xFFFACD</description>
+                        </node>
+                        <node>
+                           <name>LightGoldenRodYellow</name>
+                           <description>CSS-color 0xFAFAD2</description>
+                        </node>
+                        <node>
+                           <name>PapayaWhip</name>
+                           <description>CSS-color 0xFFEFD5</description>
+                        </node>
+                        <node>
+                           <name>Moccasin</name>
+                           <description>CSS-color 0xFFE4B5</description>
+                        </node>
+                        <node>
+                           <name>PeachPuff</name>
+                           <description>CSS-color 0xFFDAB9</description>
+                        </node>
+                        <node>
+                           <name>PaleGoldenRod</name>
+                           <description>CSS-color 0xEEE8AA</description>
+                        </node>
+                        <node>
+                           <name>Khaki</name>
+                           <description>CSS-color 0xF0E68C</description>
+                        </node>
+                        <node>
+                           <name>DarkKhaki</name>
+                           <description>CSS-color 0xBDB76B</description>
+                        </node>
+                     </node>
+                     <node>
+                        <name>White-color</name>
+                        <description>CSS color group</description>
+                        <node>
+                           <name>White</name>
+                           <description>CSS-color 0xFFFFFF</description>
+                        </node>
+                        <node>
+                           <name>Snow</name>
+                           <description>CSS-color 0xFFFAFA</description>
+                        </node>
+                        <node>
+                           <name>HoneyDew</name>
+                           <description>CSS-color 0xF0FFF0</description>
+                        </node>
+                        <node>
+                           <name>MintCream</name>
+                           <description>CSS-color 0xF5FFFA</description>
+                        </node>
+                        <node>
+                           <name>Azure</name>
+                           <description>CSS-color 0xF0FFFF</description>
+                        </node>
+                        <node>
+                           <name>AliceBlue</name>
+                           <description>CSS-color 0xF0F8FF</description>
+                        </node>
+                        <node>
+                           <name>GhostWhite</name>
+                           <description>CSS-color 0xF8F8FF</description>
+                        </node>
+                        <node>
+                           <name>WhiteSmoke</name>
+                           <description>CSS-color 0xF5F5F5</description>
+                        </node>
+                        <node>
+                           <name>SeaShell</name>
+                           <description>CSS-color 0xFFF5EE</description>
+                        </node>
+                        <node>
+                           <name>Beige</name>
+                           <description>CSS-color 0xF5F5DC</description>
+                        </node>
+                        <node>
+                           <name>OldLace</name>
+                           <description>CSS-color 0xFDF5E6</description>
+                        </node>
+                        <node>
+                           <name>FloralWhite</name>
+                           <description>CSS-color 0xFFFAF0</description>
+                        </node>
+                        <node>
+                           <name>Ivory</name>
+                           <description>CSS-color 0xFFFFF0</description>
+                        </node>
+                        <node>
+                           <name>AntiqueWhite</name>
+                           <description>CSS-color 0xFAEBD7</description>
+                        </node>
+                        <node>
+                           <name>Linen</name>
+                           <description>CSS-color 0xFAF0E6</description>
+                        </node>
+                        <node>
+                           <name>LavenderBlush</name>
+                           <description>CSS-color 0xFFF0F5</description>
+                        </node>
+                        <node>
+                           <name>MistyRose</name>
+                           <description>CSS-color 0xFFE4E1</description>
+                        </node>
+                     </node>
+                  </node>
+               </node>
+               <node>
+                  <name>View</name>
+                  <description>A specific visual representation of data, situations, topics, etc.</description>
+                  <node>
+                     <name>2D-view</name>
+                     <description>A view showing only two dimensions.</description>
+                  </node>
+                  <node>
+                     <name>3D-view</name>
+                     <description>A view showing three dimensions.</description>
+                  </node>
+                  <node>
+                     <name>Background-view</name>
+                     <description>Parts of the view that are farthest from the viewer and usually the not part of the visual focus.</description>
+                  </node>
+                  <node>
+                     <name>Bistable-view</name>
+                     <description>Something having two stable visual forms that have two distinguishable stable forms as in optical illusions.</description>
+                  </node>
+                  <node>
+                     <name>Foreground-view</name>
+                     <description>Parts of the view that are closest to the viewer and usually the most important part of the visual focus.</description>
+                  </node>
+                  <node>
+                     <name>Foveal-view</name>
+                     <description>Visual presentation directly on the fovea. A view projected on the small depression in the retina containing only cones and where vision is most acute.</description>
+                  </node>
+                  <node>
+                     <name>Map-view</name>
+                     <description>A diagrammatic representation of an area of land or sea showing physical features, cities, roads.</description>
+                     <node>
+                        <name>Aerial-view</name>
+                        <description>Elevated view of an object from above, with a perspective as though the observer were a bird.</description>
+                     </node>
+                     <node>
+                        <name>Satellite-view</name>
+                        <description>A representation as captured by technology such as a satellite.</description>
+                     </node>
+                     <node>
+                        <name>Street-view</name>
+                        <description>A 360-degrees panoramic view from a position on the ground.</description>
+                     </node>
+                  </node>
+                  <node>
+                     <name>Peripheral-view</name>
+                     <description>Indirect vision as it occurs outside the point of fixation.</description>
+                  </node>
+               </node>
+            </node>
+         </node>
+         <node>
+            <name>Environmental</name>
+            <description>Relating to or arising from the surroundings of an agent.</description>
+            <node>
+               <name>Indoors</name>
+               <description>Located inside a building or enclosure.</description>
+            </node>
+            <node>
+               <name>Outdoors</name>
+               <description>Any area outside a building or shelter.</description>
+            </node>
+            <node>
+               <name>Real-world</name>
+               <description>Located in a place that exists in real space and time under realistic conditions.</description>
+            </node>
+            <node>
+               <name>Virtual-world</name>
+               <description>Using technology that creates immersive, computer-generated experiences that a person can interact with and navigate through. The digital content is generally delivered to the user through some type of headset and responds to changes in head position or through interaction with other types of sensors. Existing in a virtual setting such as a simulation or game environment.</description>
+            </node>
+            <node>
+               <name>Augmented-reality</name>
+               <description>Using technology that enhances real-world experiences with computer-derived digital overlays to change some aspects of perception of the natural environment. The digital content is shown to the user through a smart device or glasses and responds to changes in the environment.</description>
+            </node>
+            <node>
+               <name>Motion-platform</name>
+               <description>A mechanism that creates the feelings of being in a real motion environment.</description>
+            </node>
+            <node>
+               <name>Urban</name>
+               <description>Relating to, located in, or characteristic of a city or densely populated area.</description>
+            </node>
+            <node>
+               <name>Rural</name>
+               <description>Of or pertaining to the country as opposed to the city.</description>
+               <node>
+                  <name>Wooden-walkway</name>
+                  <description>A path made out of wood.</description>
+               </node>
+            </node>
+            <node>
+               <name>Terrain</name>
+               <description>Characterization of the physical features of a tract of land.</description>
+               <node>
+                  <name>Composite-terrain</name>
+                  <description>Tracts of land characterized by a mixure of physical features.</description>
+               </node>
+               <node>
+                  <name>Dirt-terrain</name>
+                  <description>Tracts of land characterized by a soil surface and lack of vegetation.</description>
+               </node>
+               <node>
+                  <name>Grassy-terrain</name>
+                  <description>Tracts of land covered by grass.</description>
+               </node>
+               <node>
+                  <name>Gravel-terrain</name>
+                  <description>Tracts of land covered by a surface consisting a loose aggregation of small water-worn or pounded stones.</description>
+               </node>
+               <node>
+                  <name>Leaf-covered-terrain</name>
+                  <description>Tracts of land covered by leaves and composited organic material.</description>
+               </node>
+               <node>
+                  <name>Muddy-terrain</name>
+                  <description>Tracts of land covered by a liquid or semi-liquid mixture of water and some combination of soil, silt, and clay.</description>
+               </node>
+               <node>
+                  <name>Paved-terrain</name>
+                  <description>Tracts of land covered  with concrete, asphalt, stones, or bricks.</description>
+               </node>
+               <node>
+                  <name>Rocky-terrain</name>
+                  <description>Tracts of land consisting or full of rock or rocks.</description>
+               </node>
+               <node>
+                  <name>Sloped-terrain</name>
+                  <description>Tracts of land arranged in a sloping position; inclined.</description>
+               </node>
+               <node>
+                  <name>Uneven-terrain</name>
+                  <description>Tracts of land that are not level, smooth, or regular.</description>
+               </node>
+            </node>
+         </node>
+         <node>
+            <name>Anatomical</name>
+            <description>Relating to bodily structure.</description>
+         </node>
+      </node>
+   </schema>
+   <unitClassDefinitions>
+      <unitClassDefinition>
+         <name>acceleration</name>
+         <attribute>
+            <name>defaultUnits</name>
+            <value>m-per-s^2</value>
+         </attribute>
+         <unit>
+            <name>m-per-s^2</name>
+            <attribute>
+               <name>SIUnit</name>
+            </attribute>
+            <attribute>
+               <name>unitSymbol</name>
+            </attribute>
+         </unit>
+      </unitClassDefinition>
+      <unitClassDefinition>
+         <name>angle</name>
+         <attribute>
+            <name>defaultUnits</name>
+            <value>radian</value>
+         </attribute>
+         <unit>
+            <name>radian</name>
+            <attribute>
+               <name>SIUnit</name>
+            </attribute>
+         </unit>
+         <unit>
+            <name>rad</name>
+            <attribute>
+               <name>SIUnit</name>
+            </attribute>
+            <attribute>
+               <name>unitSymbol</name>
+            </attribute>
+         </unit>
+         <unit>
+            <name>degree</name>
+         </unit>
+      </unitClassDefinition>
+      <unitClassDefinition>
+         <name>area</name>
+         <attribute>
+            <name>defaultUnits</name>
+            <value>m^2</value>
+         </attribute>
+         <unit>
+            <name>m^2</name>
+            <attribute>
+               <name>SIUnit</name>
+            </attribute>
+            <attribute>
+               <name>unitSymbol</name>
+            </attribute>
+         </unit>
+         <unit>
+            <name>px^2</name>
+            <attribute>
+               <name>unitSymbol</name>
+            </attribute>
+         </unit>
+         <unit>
+            <name>pixel^2</name>
+         </unit>
+      </unitClassDefinition>
+      <unitClassDefinition>
+         <name>currency</name>
+         <attribute>
+            <name>allowedCharacter</name>
+            <value>$</value>
+         </attribute>
+         <attribute>
+            <name>defaultUnits</name>
+            <value>$</value>
+         </attribute>
+         <unit>
+            <name>dollar</name>
+         </unit>
+         <unit>
+            <name>$</name>
+            <attribute>
+               <name>unitPrefix</name>
+            </attribute>
+            <attribute>
+               <name>unitSymbol</name>
+            </attribute>
+         </unit>
+         <unit>
+            <name>point</name>
+         </unit>
+      </unitClassDefinition>
+      <unitClassDefinition>
+         <name>dateTime</name>
+         <attribute>
+            <name>allowedCharacter</name>
+            <value>:</value>
+            <value>-</value>
+         </attribute>
+         <attribute>
+            <name>defaultUnits</name>
+            <value>YYYY-MM-DDThh:mm:ss</value>
+         </attribute>
+         <unit>
+            <name>YYYY-MM-DDThh:mm:ss</name>
+            <description>Date-times should conform to ISO8601 date-time format. Any variation on the full form is allowed.</description>
+         </unit>
+      </unitClassDefinition>
+      <unitClassDefinition>
+         <name>frequency</name>
+         <attribute>
+            <name>defaultUnits</name>
+            <value>Hz</value>
+         </attribute>
+         <unit>
+            <name>hertz</name>
+            <attribute>
+               <name>SIUnit</name>
+            </attribute>
+         </unit>
+         <unit>
+            <name>Hz</name>
+            <attribute>
+               <name>SIUnit</name>
+            </attribute>
+            <attribute>
+               <name>unitSymbol</name>
+            </attribute>
+         </unit>
+      </unitClassDefinition>
+      <unitClassDefinition>
+         <name>intensity</name>
+         <attribute>
+            <name>defaultUnits</name>
+            <value>dB</value>
+         </attribute>
+         <unit>
+            <name>dB</name>
+            <attribute>
+               <name>unitSymbol</name>
+            </attribute>
+         </unit>
+      </unitClassDefinition>
+      <unitClassDefinition>
+         <name>jerk</name>
+         <attribute>
+            <name>defaultUnits</name>
+            <value>m-per-s^3</value>
+         </attribute>
+         <unit>
+            <name>m-per-s^3</name>
+            <attribute>
+               <name>unitSymbol</name>
+            </attribute>
+         </unit>
+      </unitClassDefinition>
+      <unitClassDefinition>
+         <name>luminousIntensity</name>
+         <attribute>
+            <name>defaultUnits</name>
+            <value>cd</value>
+         </attribute>
+         <unit>
+            <name>candela</name>
+            <attribute>
+               <name>SIUnit</name>
+            </attribute>
+         </unit>
+         <unit>
+            <name>cd</name>
+            <attribute>
+               <name>SIUnit</name>
+            </attribute>
+            <attribute>
+               <name>unitSymbol</name>
+            </attribute>
+         </unit>
+      </unitClassDefinition>
+      <unitClassDefinition>
+         <name>memorySize</name>
+         <attribute>
+            <name>defaultUnits</name>
+            <value>B</value>
+         </attribute>
+         <unit>
+            <name>byte</name>
+            <attribute>
+               <name>SIUnit</name>
+            </attribute>
+         </unit>
+         <unit>
+            <name>B</name>
+            <attribute>
+               <name>SIUnit</name>
+            </attribute>
+            <attribute>
+               <name>unitSymbol</name>
+            </attribute>
+         </unit>
+      </unitClassDefinition>
+      <unitClassDefinition>
+         <name>posixPath</name>
+         <description>Posix path specification.</description>
+         <attribute>
+            <name>allowedCharacter</name>
+            <value>/</value>
+            <value>:</value>
+         </attribute>
+      </unitClassDefinition>
+      <unitClassDefinition>
+         <name>physicalLength</name>
+         <attribute>
+            <name>defaultUnits</name>
+            <value>m</value>
+         </attribute>
+         <unit>
+            <name>metre</name>
+            <attribute>
+               <name>SIUnit</name>
+            </attribute>
+         </unit>
+         <unit>
+            <name>m</name>
+            <attribute>
+               <name>SIUnit</name>
+            </attribute>
+            <attribute>
+               <name>unitSymbol</name>
+            </attribute>
+         </unit>
+         <unit>
+            <name>foot</name>
+         </unit>
+         <unit>
+            <name>mile</name>
+         </unit>
+      </unitClassDefinition>
+      <unitClassDefinition>
+         <name>pixels</name>
+         <attribute>
+            <name>defaultUnits</name>
+            <value>px</value>
+         </attribute>
+         <unit>
+            <name>pixel</name>
+         </unit>
+         <unit>
+            <name>px</name>
+            <attribute>
+               <name>unitSymbol</name>
+            </attribute>
+         </unit>
+      </unitClassDefinition>
+      <unitClassDefinition>
+         <name>speed</name>
+         <attribute>
+            <name>defaultUnits</name>
+            <value>m-per-s</value>
+         </attribute>
+         <unit>
+            <name>m-per-s</name>
+            <attribute>
+               <name>SIUnit</name>
+            </attribute>
+            <attribute>
+               <name>unitSymbol</name>
+            </attribute>
+         </unit>
+         <unit>
+            <name>mph</name>
+            <attribute>
+               <name>unitSymbol</name>
+            </attribute>
+         </unit>
+         <unit>
+            <name>kph</name>
+            <attribute>
+               <name>unitSymbol</name>
+            </attribute>
+         </unit>
+      </unitClassDefinition>
+      <unitClassDefinition>
+         <name>time</name>
+         <attribute>
+            <name>defaultUnits</name>
+            <value>s</value>
+         </attribute>
+         <unit>
+            <name>second</name>
+            <attribute>
+               <name>SIUnit</name>
+            </attribute>
+         </unit>
+         <unit>
+            <name>s</name>
+            <attribute>
+               <name>SIUnit</name>
+            </attribute>
+            <attribute>
+               <name>unitSymbol</name>
+            </attribute>
+         </unit>
+         <unit>
+            <name>day</name>
+         </unit>
+         <unit>
+            <name>minute</name>
+         </unit>
+         <unit>
+            <name>hour</name>
+            <description>Should be in 24-hour format.</description>
+         </unit>
+      </unitClassDefinition>
+      <unitClassDefinition>
+         <name>volume</name>
+         <attribute>
+            <name>defaultUnits</name>
+            <value>m^3</value>
+         </attribute>
+         <unit>
+            <name>m^3</name>
+            <attribute>
+               <name>SIUnit</name>
+            </attribute>
+            <attribute>
+               <name>unitSymbol</name>
+            </attribute>
+         </unit>
+      </unitClassDefinition>
+   </unitClassDefinitions>
+   <unitModifierDefinitions>
+      <unitModifierDefinition>
+         <name>deca</name>
+         <description>SI unit multiple representing 10^1</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>da</name>
+         <description>SI unit multiple representing 10^1</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>hecto</name>
+         <description>SI unit multiple representing 10^2</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>h</name>
+         <description>SI unit multiple representing 10^2</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>kilo</name>
+         <description>SI unit multiple representing 10^3</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>k</name>
+         <description>SI unit multiple representing 10^3</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>mega</name>
+         <description>SI unit multiple representing 10^6</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>M</name>
+         <description>SI unit multiple representing 10^6</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>giga</name>
+         <description>SI unit multiple representing 10^9</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>G</name>
+         <description>SI unit multiple representing 10^9</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>tera</name>
+         <description>SI unit multiple representing 10^12</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>T</name>
+         <description>SI unit multiple representing 10^12</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>peta</name>
+         <description>SI unit multiple representing 10^15</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>P</name>
+         <description>SI unit multiple representing 10^15</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>exa</name>
+         <description>SI unit multiple representing 10^18</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>E</name>
+         <description>SI unit multiple representing 10^18</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>zetta</name>
+         <description>SI unit multiple representing 10^21</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>Z</name>
+         <description>SI unit multiple representing 10^21</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>yotta</name>
+         <description>SI unit multiple representing 10^24</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>Y</name>
+         <description>SI unit multiple representing 10^24</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>deci</name>
+         <description>SI unit submultiple representing 10^-1</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>d</name>
+         <description>SI unit submultiple representing 10^-1</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>centi</name>
+         <description>SI unit submultiple representing 10^-2</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>c</name>
+         <description>SI unit submultiple representing 10^-2</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>milli</name>
+         <description>SI unit submultiple representing 10^-3</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>m</name>
+         <description>SI unit submultiple representing 10^-3</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>micro</name>
+         <description>SI unit submultiple representing 10^-6</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>u</name>
+         <description>SI unit submultiple representing 10^-6</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>nano</name>
+         <description>SI unit submultiple representing 10^-9</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>n</name>
+         <description>SI unit submultiple representing 10^-9</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>pico</name>
+         <description>SI unit submultiple representing 10^-12</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>p</name>
+         <description>SI unit submultiple representing 10^-12</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>femto</name>
+         <description>SI unit submultiple representing 10^-15</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>f</name>
+         <description>SI unit submultiple representing 10^-15</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>atto</name>
+         <description>SI unit submultiple representing 10^-18</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>a</name>
+         <description>SI unit submultiple representing 10^-18</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>zepto</name>
+         <description>SI unit submultiple representing 10^-21</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>z</name>
+         <description>SI unit submultiple representing 10^-21</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>yocto</name>
+         <description>SI unit submultiple representing 10^-24</description>
+         <attribute>
+            <name>SIUnitModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+      <unitModifierDefinition>
+         <name>y</name>
+         <description>SI unit submultiple representing 10^-24</description>
+         <attribute>
+            <name>SIUnitSymbolModifier</name>
+         </attribute>
+      </unitModifierDefinition>
+   </unitModifierDefinitions>
+   <schemaAttributeDefinitions>
+      <schemaAttributeDefinition>
+         <name>allowedCharacter</name>
+         <description>A schema attribute of unit classes specifying a special character that is allowed in expressing the value of a placeholder with those units.</description>
+         <property>
+            <name>unitClassProperty</name>
+         </property>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>defaultUnits</name>
+         <description>A schema attribute of unit classes specifying the default units for a tag.</description>
+         <property>
+            <name>unitClassProperty</name>
+         </property>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>extensionAllowed</name>
+         <description>A schema attribute indicating that users can add unlimited levels of child nodes under this tag.</description>
+         <property>
+            <name>boolProperty</name>
+         </property>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>isNumeric</name>
+         <description>A schema attribute indicating that the tag hashtag placeholder must be replaced by a numerical value.</description>
+         <property>
+            <name>boolProperty</name>
+         </property>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>recommended</name>
+         <description>A schema attribute indicating that the event-level HED string should include this tag.</description>
+         <property>
+            <name>boolProperty</name>
+         </property>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>relatedTag</name>
+         <description>A schema attribute suggesting HED tags that are closely related to this tag. This attribute is used by tagging tools.</description>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>requireChild</name>
+         <description>A schema attribute indicating that one of the node elements descendants must be included when using this tag.</description>
+         <property>
+            <name>boolProperty</name>
+         </property>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>required</name>
+         <description>A schema attribute indicating that every event-level HED string should include this tag.</description>
+         <property>
+            <name>boolProperty</name>
+         </property>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>SIUnit</name>
+         <description>A schema attribute indicating that this unit element is an SI unit and can be modified by multiple and submultiple names. Note that some units such as byte are designated as SI units although they are not part of the standard.</description>
+         <property>
+            <name>boolProperty</name>
+         </property>
+         <property>
+            <name>unitProperty</name>
+         </property>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>SIUnitModifier</name>
+         <description>A schema attribute indicating that this SI unit modifier represents a multiple or submultiple of a base unit rather than a unit symbol.</description>
+         <property>
+            <name>boolProperty</name>
+         </property>
+         <property>
+            <name>unitModifierProperty</name>
+         </property>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>SIUnitSymbolModifier</name>
+         <description>A schema attribute indicating that this SI unit modifier represents a multiple or submultiple of a unit symbol rather than a base symbol.</description>
+         <property>
+            <name>boolProperty</name>
+         </property>
+         <property>
+            <name>unitModifierProperty</name>
+         </property>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>suggestedTag</name>
+         <description>A schema attribute that indicates another tag  that is often associated with this tag. This attribute is used by tagging tools to provide tagging suggestions.</description>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>tagGroup</name>
+         <description>A schema attribute indicating the tag can only appear inside a tag group.</description>
+         <property>
+            <name>boolProperty</name>
+         </property>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>takesValue</name>
+         <description>A schema attribute indicating the tag is a hashtag placeholder which is expected to be replaced with a user-defined value.</description>
+         <property>
+            <name>boolProperty</name>
+         </property>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>topLevelTagGroup</name>
+         <description>A schema attribute indicating that this tag (or its descendants) can only appear in a top-level tag group.</description>
+         <property>
+            <name>boolProperty</name>
+         </property>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>unique</name>
+         <description>A schema attribute indicating that only one of this tag or its descendants can be used  in the event-level HED string.</description>
+         <property>
+            <name>boolProperty</name>
+         </property>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>unitClass</name>
+         <description>A schema attribute specifying which unit class this value tag belongs to.</description>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>unitPrefix</name>
+         <description>A schema attribute applied specifically to unit elements to designate that the unit indicator is a prefix (e.g., dollar sign in the currency units).</description>
+         <property>
+            <name>boolProperty</name>
+         </property>
+         <property>
+            <name>unitProperty</name>
+         </property>
+      </schemaAttributeDefinition>
+      <schemaAttributeDefinition>
+         <name>unitSymbol</name>
+         <description>A schema attribute indicating this tag is an abbreviation or symbol representing a type of unit. Unit symbols represent both the singular and the plural and thus cannot be pluralized.</description>
+         <property>
+            <name>boolProperty</name>
+         </property>
+         <property>
+            <name>unitProperty</name>
+         </property>
+      </schemaAttributeDefinition>
+   </schemaAttributeDefinitions>
+   <propertyDefinitions>
+        <propertyDefinition>
+            <name>boolProperty</name>
+            <description>Indicates that the schema attribute represents something that is either true or false and does not have a value. Attributes without this value are assumed to have string values.</description>
+        </propertyDefinition>
+        <propertyDefinition>
+            <name>unitClassProperty</name>
+            <description>Indicates that the schema attribute is meant to be applied to unit classes.</description>
+        </propertyDefinition>
+        <propertyDefinition>
+            <name>unitModifierProperty</name>
+            <description>Indicates that the schema attribute is meant to be applied to unit modifier classes.</description>
+        </propertyDefinition>
+        <propertyDefinition>
+            <name>unitProperty</name>
+            <description>Indicates that the schema attribute is meant to be applied to units within a unit class.</description>
+        </propertyDefinition>
+        <propertyDefinition>
+            <name>testingNewProperty</name>
+            <description>New Test Property</description>
+        </propertyDefinition>
+    </propertyDefinitions>
+    <epilogue>This is the new format for the mediawiki schema. The schema attributes are designed to be checked in software rather than hard-coded. The schema attributes, themselves have properties.</epilogue>
+</HED>
diff --git a/hedtools/tests/schema/test_converters.py b/hedtools/tests/schema/test_converters.py
index 3368e7c7e..7ace0f334 100644
--- a/hedtools/tests/schema/test_converters.py
+++ b/hedtools/tests/schema/test_converters.py
@@ -3,7 +3,7 @@
 import os
 
 from hed import schema
-from hed.schema.hed_schema_constants import HedKey
+from hed.schema.hed_schema_constants import HedSectionKey
 
 
 class TestConverterBase(unittest.TestCase):
@@ -23,6 +23,7 @@ def setUpClass(cls):
 
     @staticmethod
     def _remove_unknown_attributes(hed_schema):
+        return
         for attribute_name in hed_schema.dictionaries['unknownAttributes']:
             if attribute_name in hed_schema.dictionaries:
                 del hed_schema.dictionaries[attribute_name]
@@ -34,13 +35,8 @@ def _remove_unknown_attributes(hed_schema):
 
     @staticmethod
     def _remove_units_descriptions(hed_schema, skip="posixPath"):
-        # Remove units descriptions, as that is unsupported in old XML
-        desc_dict = hed_schema.dictionaries['descriptions']
-        units_removed_dict = {key: value for key, value in desc_dict.items() if
-                              not key.startswith(HedKey.UnitClasses + "_") or skip in key}
-        units_removed_dict = {key: value for key, value in units_removed_dict.items() if
-                              not key.startswith(HedKey.Units + "_") or skip in key}
-        hed_schema.dictionaries['descriptions'] = units_removed_dict
+        for tag_entry in hed_schema[HedSectionKey.Units].values():
+            tag_entry.description = None
 
     def test_schema2xml(self):
         saved_filename = self.hed_schema_xml.save_as_xml()
@@ -174,6 +170,11 @@ class TestHed8(TestConverterBase):
     can_compare = True
     can_legacy = False
 
+class TestHedUnknownAttr(TestConverterBase):
+    xml_file = '../data/hed_pairs/unknown_attribute.xml'
+    wiki_file = '../data/hed_pairs/unknown_attribute.mediawiki'
+    can_compare = True
+    can_legacy = False
 
 class TestConverterSavingPrefix(unittest.TestCase):
     xml_file = '../data/hed_pairs/HED8.0.0.xml'
diff --git a/hedtools/tests/schema/test_hed_schema.py b/hedtools/tests/schema/test_hed_schema.py
index 36140ce11..394694234 100644
--- a/hedtools/tests/schema/test_hed_schema.py
+++ b/hedtools/tests/schema/test_hed_schema.py
@@ -2,10 +2,10 @@
 import os
 
 from hed import schema
-from hed.schema import HedKey
+from hed.schema import HedKey, HedSectionKey
 from hed.errors.exceptions import HedFileError
 from hed.models.hed_string import HedString
-from hed.models import HedTag
+from hed.schema.hed_tag import HedTag
 from tests.validator.test_tag_validator_2g import TestHed
 
 
@@ -21,7 +21,6 @@ def setUpClass(cls):
         cls.hed_xml_3g = os.path.join(os.path.dirname(os.path.abspath(__file__)), cls.schema_file_3g_xml)
         cls.hed_wiki_3g = os.path.join(os.path.dirname(os.path.abspath(__file__)), cls.schema_file_3g)
         cls.hed_schema_3g = schema.load_schema(cls.hed_wiki_3g)
-        cls.hed_schema_dictionaries = cls.hed_schema.dictionaries
 
     def test_invalid_schema(self):
         # Handle missing or invalid files.
@@ -59,103 +58,103 @@ def test_name(self):
             self.assertTrue(name in e.format_error_message(return_string_only=True,
                                                                        name=name))
 
-    def test_attribute_keys(self):
-        tag_dictionary_keys = ['defaultUnits', 'extensionAllowed', 'isNumeric', 'position', 'predicateType',
-                               'recommended', 'required', 'requireChild', 'tags', 'takesValue', 'unique', 'unitClass']
-        for key in tag_dictionary_keys:
-            self.assertIn(key, self.hed_schema_dictionaries, key + ' not found.')
-            self.assertIsInstance(self.hed_schema_dictionaries[key], dict, key + ' not a dictionary.')
-
-    def test_required_tags(self):
-        expected_tags = ['event/category', 'event/description', 'event/label']
-        actual_tags_dictionary = self.hed_schema_dictionaries['required']
-        self.assertCountEqual(actual_tags_dictionary.keys(), expected_tags)
-
-    def test_positioned_tags(self):
-        expected_tags = ['event/category', 'event/description', 'event/label', 'event/long name']
-        actual_tags_dictionary = self.hed_schema_dictionaries['position']
-        self.assertCountEqual(actual_tags_dictionary.keys(), expected_tags)
-
-    def test_unique_tags(self):
-        expected_tags = ['event/description', 'event/label', 'event/long name']
-        actual_tags_dictionary = self.hed_schema_dictionaries['unique']
-        self.assertCountEqual(actual_tags_dictionary.keys(), expected_tags)
-
-    def test_default_unit_tags(self):
-        default_unit_tags = {
-             'acceleration': 'm-per-s^2',
-             'angle': 'radian',
-             'area': 'm^2',
-             'clockTime': 'hour:min',
-             'currency': '$',
-             'dateTime': 'YYYY-MM-DDThh:mm:ss',
-             'frequency': 'Hz',
-             'intensity': 'dB',
-             'jerk': 'm-per-s^3',
-             'luminousIntensity': 'cd',
-             'memorySize': 'B',
-             'physicalLength': 'm',
-             'pixels': 'px',
-             'speed': 'm-per-s',
-             'time': 's',
-             'volume': 'm^3'}
-        actual_tags_dictionary = self.hed_schema_dictionaries['defaultUnits']
-        self.assertDictEqual(actual_tags_dictionary, default_unit_tags)
-
-    def test_unit_classes(self):
-        default_units = {
-            'acceleration': 'm-per-s^2',
-            'currency': '$',
-            'angle': 'radian',
-            'frequency': 'Hz',
-            'intensity': 'dB',
-            'jerk': 'm-per-s^3',
-            'luminousIntensity': 'cd',
-            'memorySize': 'B',
-            'physicalLength': 'm',
-            'pixels': 'px',
-            'speed': 'm-per-s',
-            'time': 's',
-            'clockTime': 'hour:min',
-            'dateTime': 'YYYY-MM-DDThh:mm:ss',
-            'area': 'm^2',
-            'volume': 'm^3',
-        }
-        all_units = {
-            'acceleration': ['m-per-s^2'],
-            'currency': ['dollar', '$', 'point', 'fraction'],
-            'angle': ['radian', 'rad', 'degree'],
-            'frequency': ['hertz', 'Hz'],
-            'intensity': ['dB'],
-            'jerk': ['m-per-s^3'],
-            'luminousIntensity': ['candela', 'cd'],
-            'memorySize': ['byte', 'B'],
-            'physicalLength': ['metre', 'm', 'foot', 'mile'],
-            'pixels': ['pixel', 'px'],
-            'speed': ['m-per-s', 'mph', 'kph'],
-            'time': ['second', 's', 'day', 'minute', 'hour'],
-            'clockTime': ['hour:min', 'hour:min:sec'],
-            'dateTime': ['YYYY-MM-DDThh:mm:ss'],
-            'area': ['m^2', 'px^2', 'pixel^2'],
-            'volume': ['m^3'],
-        }
-        actual_default_units_dictionary = self.hed_schema_dictionaries[HedKey.DefaultUnits]
-        actual_all_units_dictionary = self.hed_schema_dictionaries[HedKey.UnitClasses]
-        self.assertDictEqual(actual_default_units_dictionary, default_units)
-        self.assertDictEqual(actual_all_units_dictionary, all_units)
-
-    def test_large_dictionaries(self):
-        expected_tag_count = {
-            'isNumeric': 80,
-            'predicateType': 20,
-            'recommended': 0,
-            'requireChild': 64,
-            'tags': 1116,
-            'takesValue': 119,
-            'unitClass': 63,
-        }
-        for key, number in expected_tag_count.items():
-            self.assertEqual(len(self.hed_schema_dictionaries[key]), number, 'Mismatch on attribute ' + key)
+    # def test_attribute_keys(self):
+    #     tag_dictionary_keys = ['defaultUnits', 'extensionAllowed', 'isNumeric', 'position', 'predicateType',
+    #                            'recommended', 'required', 'requireChild', 'tags', 'takesValue', 'unique', 'unitClass']
+    #     for key in tag_dictionary_keys:
+    #         self.assertIn(key, self.hed_schema_dictionaries, key + ' not found.')
+    #         self.assertIsInstance(self.hed_schema_dictionaries[key], dict, key + ' not a dictionary.')
+    #
+    # def test_required_tags(self):
+    #     expected_tags = ['event/category', 'event/description', 'event/label']
+    #     actual_tags_dictionary = self.hed_schema_dictionaries['required']
+    #     self.assertCountEqual(actual_tags_dictionary.keys(), expected_tags)
+    #
+    # def test_positioned_tags(self):
+    #     expected_tags = ['event/category', 'event/description', 'event/label', 'event/long name']
+    #     actual_tags_dictionary = self.hed_schema_dictionaries['position']
+    #     self.assertCountEqual(actual_tags_dictionary.keys(), expected_tags)
+    #
+    # def test_unique_tags(self):
+    #     expected_tags = ['event/description', 'event/label', 'event/long name']
+    #     actual_tags_dictionary = self.hed_schema_dictionaries['unique']
+    #     self.assertCountEqual(actual_tags_dictionary.keys(), expected_tags)
+    #
+    # def test_default_unit_tags(self):
+    #     default_unit_tags = {
+    #          'acceleration': 'm-per-s^2',
+    #          'angle': 'radian',
+    #          'area': 'm^2',
+    #          'clockTime': 'hour:min',
+    #          'currency': '$',
+    #          'dateTime': 'YYYY-MM-DDThh:mm:ss',
+    #          'frequency': 'Hz',
+    #          'intensity': 'dB',
+    #          'jerk': 'm-per-s^3',
+    #          'luminousIntensity': 'cd',
+    #          'memorySize': 'B',
+    #          'physicalLength': 'm',
+    #          'pixels': 'px',
+    #          'speed': 'm-per-s',
+    #          'time': 's',
+    #          'volume': 'm^3'}
+    #     actual_tags_dictionary = self.hed_schema_dictionaries['defaultUnits']
+    #     self.assertDictEqual(actual_tags_dictionary, default_unit_tags)
+    #
+    # def test_unit_classes(self):
+    #     default_units = {
+    #         'acceleration': 'm-per-s^2',
+    #         'currency': '$',
+    #         'angle': 'radian',
+    #         'frequency': 'Hz',
+    #         'intensity': 'dB',
+    #         'jerk': 'm-per-s^3',
+    #         'luminousIntensity': 'cd',
+    #         'memorySize': 'B',
+    #         'physicalLength': 'm',
+    #         'pixels': 'px',
+    #         'speed': 'm-per-s',
+    #         'time': 's',
+    #         'clockTime': 'hour:min',
+    #         'dateTime': 'YYYY-MM-DDThh:mm:ss',
+    #         'area': 'm^2',
+    #         'volume': 'm^3',
+    #     }
+    #     all_units = {
+    #         'acceleration': ['m-per-s^2'],
+    #         'currency': ['dollar', '$', 'point', 'fraction'],
+    #         'angle': ['radian', 'rad', 'degree'],
+    #         'frequency': ['hertz', 'Hz'],
+    #         'intensity': ['dB'],
+    #         'jerk': ['m-per-s^3'],
+    #         'luminousIntensity': ['candela', 'cd'],
+    #         'memorySize': ['byte', 'B'],
+    #         'physicalLength': ['metre', 'm', 'foot', 'mile'],
+    #         'pixels': ['pixel', 'px'],
+    #         'speed': ['m-per-s', 'mph', 'kph'],
+    #         'time': ['second', 's', 'day', 'minute', 'hour'],
+    #         'clockTime': ['hour:min', 'hour:min:sec'],
+    #         'dateTime': ['YYYY-MM-DDThh:mm:ss'],
+    #         'area': ['m^2', 'px^2', 'pixel^2'],
+    #         'volume': ['m^3'],
+    #     }
+    #     actual_default_units_dictionary = self.hed_schema_dictionaries[HedKey.DefaultUnits]
+    #     actual_all_units_dictionary = self.hed_schema_dictionaries[HedSectionKey.UnitClasses]
+    #     self.assertDictEqual(actual_default_units_dictionary, default_units)
+    #     self.assertDictEqual(actual_all_units_dictionary, all_units)
+    #
+    # def test_large_dictionaries(self):
+    #     expected_tag_count = {
+    #         'isNumeric': 80,
+    #         'predicateType': 20,
+    #         'recommended': 0,
+    #         'requireChild': 64,
+    #         'tags': 1116,
+    #         'takesValue': 119,
+    #         'unitClass': 63,
+    #     }
+    #     for key, number in expected_tag_count.items():
+    #         self.assertEqual(len(self.hed_schema_dictionaries[key]), number, 'Mismatch on attribute ' + key)
 
     def test_tag_attribute(self):
         test_strings = {
@@ -169,14 +168,12 @@ def test_tag_attribute(self):
             'value': {
                 'defaultUnits': False,
                 'extensionAllowed': False,
-                'extensionAllowedPropagated': False,
                 'isNumeric': True,
                 'position': False,
                 'predicateType': False,
                 'recommended': False,
                 'required': False,
                 'requireChild': False,
-                'tags': True,
                 'takesValue': True,
                 'unique': False,
                 'unitClass': True,
@@ -184,14 +181,12 @@ def test_tag_attribute(self):
             'valueParent': {
                 'defaultUnits': False,
                 'extensionAllowed': False,
-                'extensionAllowedPropagated': True,
                 'isNumeric': False,
                 'position': False,
                 'predicateType': False,
                 'recommended': False,
                 'required': False,
                 'requireChild': True,
-                'tags': True,
                 'takesValue': False,
                 'unique': False,
                 'unitClass': False,
@@ -199,14 +194,12 @@ def test_tag_attribute(self):
             'allowedExtension': {
                 'defaultUnits': False,
                 'extensionAllowed': False,
-                'extensionAllowedPropagated': True,
                 'isNumeric': False,
                 'position': False,
                 'predicateType': False,
                 'recommended': False,
                 'required': False,
                 'requireChild': False,
-                'tags': True,
                 'takesValue': False,
                 'unique': False,
                 'unitClass': False,
@@ -231,18 +224,18 @@ def test_find_duplicate_tags(self):
         self.assertEqual(len(dupe_tags), 0)
 
     def test_get_desc_dict(self):
-        desc_dict = self.hed_schema.get_desc_dict()
-        self.assertEqual(len(desc_dict), 385)
+        desc_dict = self.hed_schema.get_desc_iter()
+        self.assertEqual(len(list(desc_dict)), 385)
 
-        desc_dict = self.hed_schema_3g.get_desc_dict()
-        self.assertEqual(len(desc_dict), 262)
+        desc_dict = self.hed_schema_3g.get_desc_iter()
+        self.assertEqual(len(list(desc_dict)), 262)
 
     def test_get_tag_description(self):
         # Test known tag
         desc = self.hed_schema.get_tag_description("Event/Category")
         self.assertEqual(desc, "This is meant to designate the reason this event was recorded")
         # Test known unit modifier
-        desc = self.hed_schema.get_tag_description("deca", HedKey.UnitModifiers)
+        desc = self.hed_schema.get_tag_description("deca", HedSectionKey.UnitModifiers)
         self.assertEqual(desc, "SI unit multiple representing 10^1")
 
         # test unknown tag.
@@ -391,15 +384,15 @@ def test_strip_off_units_from_value(self):
 
     def test_determine_allows_extensions(self):
         extension_tag1 = HedTag('item/object/vehicle/boat', extension_index=len('item/object/vehicle/boat'))
-        extension_tag2 = HedTag('attribute/visual/color/red/0.5', extension_index=len('attribute/visual/color/red'))
         no_extension_tag1 = HedTag('event/duration/22 s', extension_index=len('event/duration'))
         no_extension_tag2 = HedTag('participant/id/45', extension_index=len('participant/id'))
+        no_extension_tag3 = HedTag('attribute/visual/color/red/0.5', extension_index=len('attribute/visual/color/red'))
         extension_tag1_result = self.hed_schema.is_extension_allowed_tag(extension_tag1)
-        extension_tag2_result = self.hed_schema.is_extension_allowed_tag(extension_tag2)
         no_extension_tag1_result = self.hed_schema.is_extension_allowed_tag(no_extension_tag1)
         no_extension_tag2_result = self.hed_schema.is_extension_allowed_tag(no_extension_tag2)
+        no_extension_tag3_result = self.hed_schema.is_extension_allowed_tag(no_extension_tag3)
         self.assertEqual(extension_tag1_result, True)
-        self.assertEqual(extension_tag2_result, True)
         self.assertEqual(no_extension_tag1_result, False)
         self.assertEqual(no_extension_tag2_result, False)
+        self.assertEqual(no_extension_tag3_result, False)
 
diff --git a/hedtools/tests/validator/test_tag_validator_util.py b/hedtools/tests/validator/test_tag_validator_util.py
index 8e2f091e6..d028a9254 100644
--- a/hedtools/tests/validator/test_tag_validator_util.py
+++ b/hedtools/tests/validator/test_tag_validator_util.py
@@ -2,7 +2,7 @@
 
 from hed.validator.tag_validator import TagValidator
 from tests.validator.test_tag_validator_2g import TestHed
-from hed.models.hed_tag import HedTag
+from hed.schema.hed_tag import HedTag
 
 
 class StringUtilityFunctions(TestHed):
@@ -75,7 +75,7 @@ def test_if_tag_exists(self):
         valid_tag2 = HedTag('item/object/person', extension_index=len('item/object/person'))
         valid_tag3 = HedTag('event/duration/#', extension_index=len('event/duration/#'))
         invalid_tag1 = HedTag('something', extension_index=len('something'))
-        invalid_tag2 = HedTag('attribute/nothing', extension_index=len('attribute/nothing'))
+        invalid_tag2 = HedTag('Participant/nothing', extension_index=len('Participant/nothing'))
         invalid_tag3 = HedTag('participant/#', extension_index=len('participant/#'))
         valid_tag1_results = self.semantic_tag_validator.check_tag_exists_in_schema(valid_tag1)
         valid_tag2_results = self.semantic_tag_validator.check_tag_exists_in_schema(valid_tag2)