Document more detail XML.
authorBen Pfaff <blp@cs.stanford.edu>
Mon, 22 Feb 2016 01:51:45 +0000 (17:51 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Mon, 22 Feb 2016 01:51:45 +0000 (17:51 -0800)
detail-xml
dump2.c
parse-xml.c
spv-detail.gv
spv-file-format.texi

index 3735a657fa61ef8444fb9b985601912a050d736f..9fca90acf4aa118f8f887bd9208810b275b36cc9 100644 (file)
@@ -66,7 +66,7 @@ formatMapping := [id? from] format
 footnotes := [id? superscript variable] footnoteMapping+
 footnoteMapping := [id? from to definesReference]
 
 footnotes := [id? superscript variable] footnoteMapping+
 footnoteMapping := [id? from to definesReference]
 
-cross := [id?] nest+
+cross := [id?] nest nest
 nest := [id?] variableReference+
 variableReference := [ref]
 
 nest := [id?] variableReference+
 variableReference := [ref]
 
diff --git a/dump2.c b/dump2.c
index 15670ecf4bb7c8de1ba8986290fa0fde8f53046f..740cbbedaa449e3a505f09ff30b02de0cca73d9d 100644 (file)
--- a/dump2.c
+++ b/dump2.c
@@ -217,7 +217,8 @@ dump_source(int end, int count, int n_series, const char *name)
   int n_sysmis = 0;
   for (int i = 0; i < n_series; i++)
     {
   int n_sysmis = 0;
   for (int i = 0; i < n_series; i++)
     {
-      printf ("    series %d: \"%s\"\n        ", i, get_fixed_string(288));
+      printf ("    series %d: \"%s\", %d values:\n        ",
+              i, get_fixed_string(288), count);
       for (int i = 0; i < count; i++)
         {
           double d = get_double();
       for (int i = 0; i < count; i++)
         {
           double d = get_double();
index 3a32ee36e2731b317fe6a083b77b4d0f23373e80..9cf6694f91a008f64fef9f1a1dcb37192da289fb 100644 (file)
@@ -164,7 +164,7 @@ print_element (xmlDoc *doc, xmlNode *node, const char *element)
 {
   for (; node; node = node->next)
     {
 {
   for (; node; node = node->next)
     {
-      if (!strcmp(element, (char *) node->name))
+      if (node->name && !strcmp(element, (char *) node->name))
         {
           xmlBuffer *buf = xmlBufferCreate();
           xmlNodeDump (buf, doc, node, 0, 1);
         {
           xmlBuffer *buf = xmlBufferCreate();
           xmlNodeDump (buf, doc, node, 0, 1);
index e026a483e382d363fbf7c2ed5e5a7e23dd90bdd8..5704c6a49d4f69f52ac2647519ea733532b7f45d 100644 (file)
@@ -48,7 +48,7 @@ digraph spv_detail {
 
     "footnotes" -> "footnoteMapping" [label="+"];
 
 
     "footnotes" -> "footnoteMapping" [label="+"];
 
-    "cross" -> "nest" [label="+"];
+    "cross" -> "nest" [label="2"];
 
     "nest" -> "variableReference" [label="+"];
 
 
     "nest" -> "variableReference" [label="+"];
 
index 6e73aef30960406ebbc9cdbc7ac88296d93d3ab1..6c6878b2746c078a1f0998f97933c9f357c08772 100644 (file)
@@ -143,18 +143,18 @@ times.
 @end iftex
 
 @menu
 @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
 @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})
 
 @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
 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
 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
 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,17 @@ describe this assignment.
 All elements have an optional @code{id} attribute.  In practice many
 elements are assigned @code{id} attributes that are never referenced.
 
 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::
+@end menu
+
 @node SPV Detail visualization Element
 @subsection The @code{visualization} Element
 
 @node SPV Detail visualization Element
 @subsection The @code{visualization} Element
 
@@ -1295,6 +1306,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.
 
 @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
 
 @defvr {Required} style
 The @code{id} of a @code{style} element (@pxref{SPV Detail style
@@ -1316,10 +1328,8 @@ one of 2.4, 2.5, 2.7, and 2.8.
 @node SPV Detail userSource Element
 @subsection The @code{userSource} Element
 
 @node SPV Detail userSource Element
 @subsection The @code{userSource} Element
 
-@format
 Parent: @code{visualization} @*
 Contents:
 Parent: @code{visualization} @*
 Contents:
-@end format
 
 This element has the following attributes.
 
 
 This element has the following attributes.
 
@@ -1330,10 +1340,8 @@ Always @code{listwise}.
 @node SPV Detail sourceVariable Element
 @subsection The @code{sourceVariable} Element
 
 @node SPV Detail sourceVariable Element
 @subsection The @code{sourceVariable} Element
 
-@format
 Parent: @code{visualization} @*
 Contents: @code{extension}* (@code{format} @math{|} @code{stringFormat})?
 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
 
 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 +1385,8 @@ as value labels.
 @node SPV Detail derivedVariable Element
 @subsection The @code{derivedVariable} Element
 
 @node SPV Detail derivedVariable Element
 @subsection The @code{derivedVariable} Element
 
-@format
 Parent: @code{visualization} @*
 Contents: @code{extension}* (@code{format} @math{|} @code{stringFormat} @code{valueMapEntry}*)
 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
 
 Like @code{sourceVariable}, this element defines a variable whose
 values can be used elsewhere in the visualization.  Instead of being
@@ -1417,13 +1423,15 @@ viewer can work with them together.  For a group variable, this is the
 name of the corresponding categorical variable.
 @end defvr
 
 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
 
 @node SPV Detail valueMapEntry Element
 @subsubsection The @code{valueMapEntry} Element
 
-@format
 Parent: @code{derivedVariable} @*
 Contents: empty
 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
 
 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 +1508,96 @@ An integer or a name like ``dimension0''.
 @defvr {Required} helpId
 An identifier.
 @end defvr
 @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}@math{+}
+