Some progress on format documentation.
[pspp] / spv-file-format.texi
index dd4b0b8f5a05bc4f42661c2ee153e416b36ca0f4..ce094484da3fe059cfb6c3e60f889c14d4cc56b6 100644 (file)
@@ -1267,6 +1267,7 @@ elements are assigned @code{id} attributes that are never referenced.
 * SPV Detail location Element::
 * SPV Detail coordinates Element::
 * SPV Detail faceting Element::
+* SPV Detail facetLayout Element::
 @end menu
 
 @node SPV Detail visualization Element
@@ -1752,6 +1753,7 @@ When present, this is always @code{nest}.
 
 Parent: @code{graph} @*
 Contents: @code{tableLayout} @code{facetLevel}@math{+} @code{setCellProperties}*
+
 @subsubheading The @code{tableLayout} Element
 
 Parent: @code{facetLayout} @*
@@ -1775,7 +1777,7 @@ Parent: @code{facetLayout}
 Contents: @code{axis}
 
 Each @code{facetLevel} describes a @code{variableReference} or
-@code{layer}, and thus a table has one @code{facetLevel} element for
+@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.
@@ -1801,3 +1803,247 @@ and in a member with four @code{variableReference} elements, a
 @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, in the corpus, other attributes are always present (``yes''),
+never present (``no''), or sometimes present (``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 separatorChars        @tab yes @tab  no @tab  no @tab no
+@item @w{ }
+@item mdyOrder              @tab yes @tab  no @tab  no @tab no
+@item @w{ }
+@item showYear              @tab yes @tab  no @tab  no @tab no
+@item yearAbbreviation      @tab yes @tab  no @tab  no @tab no
+@item @w{ }
+@item showMonth             @tab yes @tab  no @tab  no @tab no
+@item monthFormat           @tab yes @tab  no @tab  no @tab no
+@item @w{ }
+@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 @w{ }
+@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 @w{ }
+@item showMinute            @tab yes @tab yes @tab  no @tab no
+@item minutePadding         @tab yes @tab yes @tab  no @tab no
+@item @w{ }
+@item showSecond            @tab yes @tab yes @tab  no @tab no
+@item secondPadding         @tab  no @tab yes @tab  no @tab no
+@item @w{ }
+@item showMillis            @tab  no @tab yes @tab  no @tab no
+@item @w{ }
+@item minimumIntegerDigits  @tab  no @tab  no @tab yes @tab no
+@item maximumFractionDigits @tab  no @tab yes @tab yes @tab no
+@item minimumFractionDigits @tab  no @tab yes @tab yes @tab no
+@item useGrouping           @tab  no @tab opt @tab  no @tab no
+@item @w{ }
+@item tryStringsAsNumbers   @tab  no @tab  no @tab  no @tab no
+@item @w{ }
+@item scientific            @tab  no @tab  no @tab yes @tab no
+@item small                 @tab  no @tab  no @tab opt @tab no
+@item @w{ }
+@item suffix                @tab  no @tab  no @tab opt @tab no
+@end multitable
+
+Each attribute is described below.
+
+@defvr {Attribute} errorCharacter
+A character that replaces the formatted value when it cannot otherwise
+be represented in the given format.  Always @samp{*}.
+@end defvr
+
+@defvr {Attribute} separatorChars
+Exactly four characters.  In order, these are used for: decimal point,
+grouping, date separator, time separator.  Always @samp{.,-:}.
+@end defvr
+
+@defvr {Attribute} mdyOrder
+Within a date, the order of the days, months, and years.
+@code{dayMonthYear} is the only observed value, but one would expect
+that @code{monthDayYear} and @code{yearMonthDay} to be reasonable as
+well.
+@end defvr
+
+@defvr {Attribute} showYear
+@defvrx {Attribute} yearAbbreviation
+Whether to include the year and, if so, whether the year should be
+shown abbreviated, that is, with only 2 digits.  Each is @code{true}
+or @code{false}; only values of @code{true} and @code{false},
+respectively, have been observed.
+@end defvr
+
+@defvr {Attribute} showMonth
+@defvrx {Attribute} monthFormat
+Whether to include the month (@code{true} or @code{false}) and, if so,
+how to format it.  @code{monthFormat} is one of the following:
+
+@table @code
+@item long
+The full name of the month, e.g.@: in an English locale,
+@code{September}.
+
+@item short
+The abbreviated name of the month, e.g.@: in an English locale,
+@code{Sep}.
+
+@item number
+The number representing the month, e.g.@: 9 for September.
+
+@item paddedNumber
+A two-digit number representing the month, e.g.@: 09 for September.
+@end table
+
+Only values of @code{true} and @code{short}, respectively, have been
+observed.
+@end defvr
+
+@defvr {Attribute} dayPadding
+@defvrx {Attribute} dayOfMonthPadding
+@defvrx {Attribute} hourPadding
+@defvrx {Attribute} minutePadding
+@defvrx {Attribute} secondPadding
+These attributes presumably control whether each field in the output
+is padded with spaces to its maximum width, but the details are not
+understood.  The only observed value for any of these attributes is
+@code{true}.
+@end defvr
+
+@defvr {Attribute} showDay
+@defvrx {Attribute} showHour
+@defvrx {Attribute} showMinute
+@defvrx {Attribute} showSecond
+@defvrx {Attribute} showMillis
+These attributes presumably control whether each field is displayed
+in the output, but the details are not understood.  The only
+observed value for any of these attributes is @code{true}.
+@end defvr
+
+@defvr {Attribute} dayType
+This attribute is always @code{month} in the corpus, specifying that
+the day of the month is to be displayed; a value of @code{year} is
+supposed to indicate that the day of the year, where 1 is January 1,
+is to be displayed instead.
+@end defvr
+
+@defvr {Attribute} hourFormat
+@code{hourFormat}, if present, is one of:
+
+@table @code
+@item AMPM
+The time is displayed with an @code{am} or @code{pm} suffix, e.g.@:
+@code{10:15pm}.
+
+@item AS_24
+The time is displayed in a 24-hour format, e.g.@: @code{22:15}.
+
+This is the only value observed in the corpus.
+
+@item AS_12
+The time is displayed in a 12-hour format, without distinguishing
+morning or evening, e.g.@: @code{10;15}.
+@end table
+
+@code{hourFormat} is sometimes present for @code{elapsedTime} formats,
+which is confusing since a time duration does not have a concept of AM
+or PM.  This might indicate a bug in the code that generated the XML
+in the corpus, or it might indicate that @code{elapsedTime} is
+sometimes used to format a time of day.
+@end defvr