X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=spv-file-format.texi;h=bb615a2384333bd3fd4166b21a38f04dceffeefd;hb=2aed65a53e0d5ae8d7abc77f6cbd7cf055b37ceb;hp=e7c3f888900bcdae677436f01d42cc70e64d248a;hpb=9692b579384a142daf732706ad2f4401481a3077;p=pspp diff --git a/spv-file-format.texi b/spv-file-format.texi index e7c3f88890..bb615a2384 100644 --- a/spv-file-format.texi +++ b/spv-file-format.texi @@ -517,6 +517,57 @@ for the first dimension, 1 for the second, and so on. The latter is 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] (terminal | group) +terminal-category := 00 00 00 i2 int[index] i0 @end example + +@code{name} is the name of the category (or group). + +@code{category} can represent a terminal category. In that case, +@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). + +Alternatively, @code{category} can represent a @code{group} of nested +categories: + +@example +group := (00 | 01)[merge] 00 01 (i0 | i2)[data] + i-1 int[n-subcategories] category*[n-subcategories] +@end example + +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!) + +@code{data} appears to be i2 when all of the categories within a group +are terminal categories that directly represent data values for a +variable (e.g. in a frequency table or crosstabulation, a group of +values in a variable being tabulated) and i0 otherwise, but this might +be naive. + +@example +data := int[layers] int[rows] int[columns] int*[n-dimensions] +@end example + +The values of @code{layers}, @code{rows}, and @code{columns} each +specifies the number of dimensions represented in layers or rows or +columns, respectively, and their values sum to the number of +dimensions. + +The @code{n-dimensions} integers are a permutation of the 0-based +dimension numbers. The first @code{layers} of them specify each of +the dimensions represented by layers, the next @code{rows} of them +specify the dimensions represented by rows, and the final +@code{columns} of them specify the dimensions represented by columns. +When there is more than one dimension of a given kind, the inner +dimensions are given first.