X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=spv-file-format.texi;h=15eef0eedf19814fb4429f93d3cdab04b4f4e1de;hb=b0ea6e3d2705778be5e6ff8d079c72278d06b7b7;hp=6e73aef30960406ebbc9cdbc7ac88296d93d3ab1;hpb=2fd5ae863380ca80272555ae606ac814dfd2e403;p=pspp diff --git a/spv-file-format.texi b/spv-file-format.texi index 6e73aef309..15eef0eedf 100644 --- a/spv-file-format.texi +++ b/spv-file-format.texi @@ -143,18 +143,18 @@ times. @end iftex @menu -* SPV heading Element:: -* SPV label Element:: -* SPV container Element:: -* SPV text Element (Inside @code{container}):: -* SPV html Element:: -* SPV table Element:: -* SPV tableStructure Element:: -* SPV dataPath Element:: -* SPV pageSetup Element:: -* SPV pageHeader and pageFooter Elements:: -* SPV pageParagraph Element:: -* SPV @code{text} Element (Inside @code{pageParagraph}):: +* SPV Structure heading Element:: +* SPV Structure label Element:: +* SPV Structure container Element:: +* SPV Structure text Element (Inside @code{container}):: +* SPV Structure html Element:: +* SPV Structure table Element:: +* SPV Structure tableStructure Element:: +* SPV Structure dataPath Element:: +* SPV Structure pageSetup Element:: +* SPV Structure pageHeader and pageFooter Elements:: +* SPV Structure pageParagraph Element:: +* SPV Structure @code{text} Element (Inside @code{pageParagraph}):: @end menu @node SPV Structure heading Element @@ -440,7 +440,7 @@ This element has no attributes. @node SPV Structure @code{text} Element (Inside @code{pageParagraph}) @subsection The @code{text} Element (Inside @code{pageParagraph}) -Parent: @code{pageParagraph} @* +Parent: @code{pageParagraph} Contents: CDATA? This @code{text} element is nested inside a @code{pageParagraph}. There @@ -1228,7 +1228,7 @@ label is the string @code{s}. Each label also includes a This format is still under investigation. The design of the detail XML format is not what one would end up with -for describing pivot tables. This is because it is a specialization +for describing pivot tables. This is because it is a special case of a much more general format (``visualization XML'' or ``VizML'') that can describe a wide range of visualizations. Most of this generality is overkill for tables, and so we end up with a funny @@ -1257,6 +1257,19 @@ describe this assignment. All elements have an optional @code{id} attribute. In practice many elements are assigned @code{id} attributes that are never referenced. +@menu +* SPV Detail visualization Element:: +* SPV Detail userSource Element:: +* SPV Detail sourceVariable Element:: +* SPV Detail derivedVariable Element:: +* SPV Detail extension Element:: +* SPV Detail graph Element:: +* SPV Detail location Element:: +* SPV Detail coordinates Element:: +* SPV Detail faceting Element:: +* SPV Detail facetLayout Element:: +@end menu + @node SPV Detail visualization Element @subsection The @code{visualization} Element @@ -1295,6 +1308,7 @@ format used in Unix with the underscore replaced by a hyphen, e.g.@: @defvr {Required} name The title of the pivot table, localized to the output language. +@end defvr @defvr {Required} style The @code{id} of a @code{style} element (@pxref{SPV Detail style @@ -1316,10 +1330,8 @@ one of 2.4, 2.5, 2.7, and 2.8. @node SPV Detail userSource Element @subsection The @code{userSource} Element -@format Parent: @code{visualization} @* Contents: -@end format This element has the following attributes. @@ -1330,10 +1342,8 @@ Always @code{listwise}. @node SPV Detail sourceVariable Element @subsection The @code{sourceVariable} Element -@format Parent: @code{visualization} @* Contents: @code{extension}* (@code{format} @math{|} @code{stringFormat})? -@end format This element defines a variable whose values can be used elsewhere in the visualization. It ties this element's @code{id} to a variable @@ -1377,10 +1387,8 @@ as value labels. @node SPV Detail derivedVariable Element @subsection The @code{derivedVariable} Element -@format Parent: @code{visualization} @* Contents: @code{extension}* (@code{format} @math{|} @code{stringFormat} @code{valueMapEntry}*) -@end format Like @code{sourceVariable}, this element defines a variable whose values can be used elsewhere in the visualization. Instead of being @@ -1417,13 +1425,15 @@ viewer can work with them together. For a group variable, this is the name of the corresponding categorical variable. @end defvr +@menu +* SPV Detail valueMapEntry Element:: +@end menu + @node SPV Detail valueMapEntry Element @subsubsection The @code{valueMapEntry} Element -@format Parent: @code{derivedVariable} @* Contents: empty -@end format A @code{valueMapEntry} element defines a mapping from one or more values of a source expression to a target value. (In the corpus, the @@ -1500,3 +1510,433 @@ An integer or a name like ``dimension0''. @defvr {Required} helpId An identifier. @end defvr + +@node SPV Detail graph Element +@subsection The @code{graph} Element + +Parent: @code{visualization} @* +Contents: @code{location}@math{+} @code{coordinates} @code{faceting} @code{facetLayout} @code{interval} + +@code{graph} has the following attributes. + +@defvr {Required} cellStyle +@defvrx {Required} style +Each of these is the @code{id} of a @code{style} element (@pxref{SPV +Detail style element}). The former is the default style for +individual cells, the latter for the entire table. +@end defvr + +@node SPV Detail location Element +@subsection The @code{location} Element + +Parent: @code{graph} @* +Contents: empty + +Each instance of this element specifies where some part of the table +frame is located. All the examples in the corpus have four instances +of this element, one for each of the parts @code{height}, +@code{width}, @code{left}, and @code{top}. Some examples in the +corpus add a fifth for part @code{bottom}, even though it is not clear +how all of @code{top}, @code{bottom}, and @code{heigth} can be honored +at the same time. In any case, @code{location} seems to have little +importance in representing tables; a reader can safely ignore it. + +@defvr {Required} part +One of @code{height}, @code{width}, @code{top}, @code{bottom}, or +@code{left}. Presumably @code{right} is acceptable as well but the +corpus contains no examples. +@end defvr + +@defvr {Required} method +How the location is determined: + +@table @code +@item sizeToContent +Based on the natural size of the table. Observed only for +parts @code{height} and @code{width}. + +@item attach +Based on the location specified in @code{target}. Observed only for +parts @code{top} and @code{bottom}. + +@item fixed +Using the value in @code{value}. Observed only for parts @code{top}, +@code{bottom}, and @code{left}. + +@item same +Same as the specified @code{target}. Observed only for part +@code{left}. +@end table +@end defvr + +@defvr {Optional} min +Minimum size. Only observed with value @code{100pt}. Only observed +for part @code{width}. +@end defvr + +@defvr {Dependent} target +Required when @code{method} is @code{attach} or @code{same}, not +observed otherwise. This is the ID of an element to attach to. +Observed with the ID of @code{title}, @code{footnote}, @code{graph}, +and other elements. +@end defvr + +@defvr {Dependent} value +Required when @code{method} is @code{fixed}, not observed otherwise. +Observed values are @code{0%}, @code{0px}, @code{1px}, and @code{3px} +on parts @code{top} and @code{left}, and @code{100%} on part +@code{bottom}. +@end defvr + +@node SPV Detail coordinates Element +@subsection The @code{coordinates} Element + +Parent: @code{graph} @* +Contents: empty + +This element is always present and always empty, with no attributes +(except @code{id}). + +@node SPV Detail faceting Element +@subsection The @code{faceting} Element + +Parent: @code{graph} @* +Contents: @code{cross} @code{layer}* + +The @code{faceting} element describes the row, column, and layer +structure of the table. Its @code{cross} child determines the row and +column structure, and each @code{layer} child (if any) represents a +layer. + +@code{faceting} has no attributes (other than @code{id}). + +@subsubheading The @code{cross} Element + +Parent: @code{faceting} @* +Contents: @code{nest} @code{nest} + +The @code{cross} element describes the row and column structure of the +table. It has exactly two @code{nest} children, the first of which +describes the table's rows and the second the table's columns. + +@code{cross} has no attributes (other than @code{id}). + +@subsubheading The @code{nest} Element + +Parent: @code{cross} @* +Contents: @code{variableReference}@math{+} + +A given @code{nest} usually consists of one or more dimensions, each +of which is represented by @code{variableReference} child elements. +Minimally, a dimension has two @code{variableReference} children, one +for the categories, one for the data, e.g.: + +@example + + + + +@end example + +@noindent +Groups of categories introduce additional variable references, e.g.@: + +@example + + + + + +@end example + +@noindent +Grouping can be hierarchical, e.g.@: + +@example + + + + + + +@end example + +@noindent +XXX what are group maps? + +@example + + + + + + + + + + + +@end example + +@noindent +A @code{nest} can contain multiple dimensions: + +@example + + + + + + + +@end example + +One @code{nest} within a given @code{cross} may have no dimensions, in +which case it still has one @code{variableReference} child, which +references a @code{derivedVariable} whose @code{value} attribute is +@code{constant(0)}. In the corpus, such a @code{derivedVariable} has +@code{row} or @code{column}, respectively, as its @code{id}. + +@code{nest} has no attributes (other than @code{id}). + +@subsubheading The @code{variableReference} Element + +Parent: @code{nest} @* +Contents: empty + +@code{variableReference} has one attribute. + +@defvr {Required} ref +The @code{id} of a @code{sourceVariable} or @code{derivedVariable} +element. +@end defvr + +@subsubheading The @code{layer} Element + +Parent: @code{faceting} @* +Contents: empty + +Each layer is represented by a pair of @code{layer} elements. The +first of this pair is for a category variable, the second for the data +variable, e.g.: + +@example + + +@end example + +@noindent +@code{layer} has the following attributes. + +@defvr {Required} variable +The @code{id} of a @code{sourceVariable} or @code{derivedVariable} +element. +@end defvr + +@defvr {Required} value +The value to select. For a category variable, this is always +@code{0}; for a data variable, it is the same as the @code{variable} +attribute. +@end defvr + +@defvr {Optional} visible +Whether the layer is visible. Generally, category layers are visible +and data layers are not, but sometimes this attribute is omitted. +@end defvr + +@defvr {Optional} method +When present, this is always @code{nest}. +@end defvr + +@node SPV Detail facetLayout Element +@subsection The @code{facetLayout} Element + +Parent: @code{graph} @* +Contents: @code{tableLayout} @code{facetLevel}@math{+} @code{setCellProperties}* + +@subsubheading The @code{tableLayout} Element + +Parent: @code{facetLayout} @* +Contents: empty + +@defvr {Required} verticalTitlesInCorner +Always set to @code{true}. +@end defvr + +@defvr {Optional} style +The @code{id} of a @code{style} element. +@end defvr + +@defvr {Optional} fitCells +Always set to @code{ticks}. +@end defvr + +@subsubheading The @code{facetLevel} Element + +Parent: @code{facetLayout} +Contents: @code{axis} + +Each @code{facetLevel} describes a @code{variableReference} or +@code{layer}, and a table has one @code{facetLevel} element for +each such element. For example, an SPV detail member that contains +four @code{variableReference} elements and two @code{layer} elements +will contain six @code{facetLevel} elements. + +In the corpus, @code{facetLevel} elements and the elements that they +describe are always in the same order. The correspondence may also be +observed in two other ways. First, one may use the @code{level} +attribute, described below. Second, in the corpus, a +@code{facetLevel} always has an @code{id} that is the same as the +@code{id} of the element it describes with @code{_facetLevel} +appended. One should not formally rely on this, of course, but it is +usefully indicative. + +@defvr {Required} level +A 1-based index into the @code{variableReference} and @code{layer} +elements, e.g.@: a @code{facetLayout} with a @code{level} of 1 +describes the first @code{variableReference} in the SPV detail member, +and in a member with four @code{variableReference} elements, a +@code{facetLayout} with a @code{level} of 5 describes the first +@code{layer} in the member. +@end defvr + +@defvr {Required} gap +Always observed as @code{0pt}. +@end defvr + +@subsubheading The @code{setCellProperties} Element + +Parent: @code{facetLayout} @* +Contents: @code{setMetaData} @code{setStyle}* @code{setFormat}@math{+} @code{union}? + +This element sets style properties of cells designated by the +@code{target} attribute of its child elements. + +@defvr {Optional} applyToConverse +If present, always @code{true}. This appears to invert the meaning of +the @code{target} of sub-elements: the selected cells are the ones +@emph{not} designated by @code{target}. +@end defvr + +@subsubheading The @code{setMetaData} Element + +Parent: @code{setCellProperties} @* +Contents: empty + +It's really not clear what visible effect this element has, if any. + +@defvr {Required} target +The @code{id} of an element whose metadata is to be set. In the +corpus, this is always @code{graph}, the @code{id} used for the +@code{graph} element. +@end defvr + +@defvr {Required} key +@defvrx {Required} value +A key-value pair to set for the target. + +In the corpus, @code{key} is @code{cellPropId} or, rarely, +@code{diagProps}, and @code{value} is always the @code{id} of the +parent @code{setCellProperties}. +@end defvr + +@subsubheading The @code{setStyle} Element + +Parent: @code{setCellProperties} @* +Contents: empty + +This element associates a style with the target. + +@defvr {Required} target +The @code{id} of an element whose style is to be set. In the corpus, +this is always the @code{id} of an @code{interval}, @code{labeling}, +or, rarely, @code{graph} element. +@end defvr + +@defvr {Required} style +The @code{id} of a @code{style} element that identifies the style to +set on the target. +@end defvr + +@subsubheading The @code{setFormat} Element + +@format +Parent: @code{setCellProperties} +Contents: + @code{format} + @math{|} @code{numberFormat} + @math{|} @code{stringFormat}@math{+} + @math{|} @code{dateTimeFormat} +@end format + +This element sets the format of the target, ``format'' in this case +meaning an the SPSS print format for a variable. + +The details of this element vary depending on the schema version, as +declared in the root @code{visualization} element's @code{version} +attribute (@pxref{SPV Detail visualization Element}). In version 2.5 +and earlier, @code{setFormat} contains one of a number of child +elements that correspond to the different varieties of print formats. +In version 2.7 and later, @code{setFormat} instead always contains a +@code{format} element. + +@subsubheading The @code{format} Element + +Parent: @code{sourceVariable}, @code{derivedVariable}, @code{formatMapping}, @code{labeling}, @code{formatMapping}, @code{setFormat} @* +Contents: (@code{affix}@math{+} @math{|} @code{relabel})? + +This element determines a format, equivalent to an SPSS print format. +The following attribute determines the high-level kind of formatting +in use: + +@defvr {Optional} baseFormat +One of @code{date}, @code{time}, @code{dateTime}, or +@code{elapsedTime}. When this attribute is omitted, this element is a +numeric or string format. +@end defvr + +@noindent +Whether other attributes are required (``yes''), prohibited (``no''), +or optional (``opt'') depends on @code{baseFormat}: + +@multitable {maximumFractionDigits} {@code{dateTime}} {@code{elapsedTime}} {number} {string} +@headitem Attribute @tab @code{dateTime} @tab @code{elapsedTime} @tab number @tab string +@item errorCharacter @tab yes @tab yes @tab yes @tab opt +@item maximumFractionDigits @tab no @tab yes @tab yes @tab no +@item minimumFractionDigits @tab no @tab yes @tab yes @tab no +@item separatorChars @tab yes @tab no @tab no @tab no +@item +@item useGrouping @tab no @tab opt @tab no @tab no +@item mdyOrder @tab yes @tab no @tab no @tab no +@item +@item showYear @tab yes @tab no @tab no @tab no +@item yearAbbreviation @tab yes @tab no @tab no @tab no +@item +@item showMonth @tab yes @tab no @tab no @tab no +@item monthFormat @tab yes @tab no @tab no @tab no +@item +@item showDay @tab yes @tab opt @tab no @tab no +@item dayPadding @tab yes @tab opt @tab no @tab no +@item dayOfMonthPadding @tab yes @tab no @tab no @tab no +@item dayType @tab yes @tab no @tab no @tab no +@item +@item showHour @tab yes @tab opt @tab no @tab no +@item hourFormat @tab yes @tab opt @tab no @tab no +@item hourPadding @tab yes @tab yes @tab no @tab no +@item +@item showMinute @tab yes @tab no @tab no @tab no +@item minutePadding @tab yes @tab yes @tab no @tab no +@item +@item showSecond @tab yes @tab yes @tab no @tab no +@item secondPadding @tab no @tab yes @tab no @tab no +@item +@item showMillis @tab no @tab yes @tab no @tab no +@item +@item tryStringsAsNumbers @tab no @tab no @tab no @tab no +@item +@item minimumIntegerDigits @tab no @tab no @tab yes @tab no +@item scientific @tab no @tab no @tab yes @tab no +@item small @tab no @tab no @tab opt @tab no +@item +@item suffix @tab no @tab no @tab opt @tab no +@end multitable