the case 98% of the time in the corpus.
@example
-category := value i1
- (00 | 01 (00 | 01 | 02) | 02) 00 00 00
+category := value[name]
+ (00 | 01)[merge] 00 (00 | 01)[unindexed] (i0 | i2)
+ int[index] int[n-subcategories] category*[n-subcategories]
@end example
+
+@code{category} can represent a terminal category. In that case,
+@code{name} is the name of the category, @code{merge} is 00,
+@code{unindexed} is 00, @code{index} is a nonnegative integer less
+than @code{n-categories} in the @code{dimension} in which the
+@code{category} is nested (directly or indirectly), and
+@code{n-subcategories} is 0.
+
+Alternatively, @code{category} can represent a group of nested
+categories. In that case, @code{name} is the name of the group,
+@code{unindexed} is 01, and @code{index} is -1. Ordinarily a group
+has some nested content, so that @code{n-subcategories} is positive,
+but a few instances of groups with @code{n-subcategories} 0 has been
+observed. If @code{merge} is 00, the most common value, then the
+group is really a distinct group that should be represented as such in
+the visual representation and user interface. If @code{merge} is 01,
+however, the categories in this group should be shown and treated as
+if they were direct children of the group's parent group (or if it has
+no parent group, then direct children of the dimension), and this
+group's name is irrelevant and should not be displayed. (Merged
+groups can be nested!)