view annotate.html @ 73:4bd5de7ac247

added Range, M and RC
author Henry S. Thompson <ht@markup.co.uk>
date Mon, 03 Jul 2017 16:25:49 +0100
parents 95faecfcc1b5
children
line wrap: on
line source

<?xml version="1.0" encoding="US-ASCII"?>
<!DOCTYPE html
  PUBLIC "-//HST//DTD XHTML5 1.0 Transitional//EN" "http://www.ltg.ed.ac.uk/~ht/xhtml5.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head><meta name="copyright" content="Copyright &#169; 2016"/><meta http-equiv="Content-type" content="text/html; charset=utf-8"/><style type="text/css">
       ul.nolabel { margin: 0; margin-left: -2.5em}
       ul.naked.nolabel {margin: 0; margin-left: 0; padding-left: 0}
       ul.cdefn {clear: both}
       div.ndli { margin-bottom: 1ex }
       div.hidden {display: none}

    ul.naked > li { list-style-type: none; background: none; margin-left: 2em;
margin-bottom: 0 }
    li ul.naked > li, dd ul.naked > li { list-style-type: none; background: none; margin-left: 0;
margin-bottom: 0 }
    li.cdefni {}
    li.cdefni span.cl {display: inline-block; vertical-align: bottom}
    li.cdefni span.cr {display: inline-block; margin-left: 1em; vertical-align: bottom}
   pre.code {display: inline-block}
   blockquote.vanilla {display: inline-block; margin-left: 1em;
        border: solid 1px; background: rgb(238,234,230);
                   padding: .5ex .5em}
   blockquote.vanilla ul.naked li {margin-left: 0 ! important;font-size: 100%}
    ol ol ol, ol ol ol li {list-style-type: lower-roman}
    ol ol, ol ol li {list-style-type: lower-alpha}
    i i {font-style: normal}
    li li {font-style: normal}
    li ul li {font-style: normal}
    li { line-height: 100%; margin-top: 0.3em}
    .math {font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', serif}
    .sub {font-size: 80%; vertical-align: sub}
    .termref {text-decoration: none; color: #606000}
       .licence {margin-left: 1em; font-size: 70%}
       .credits {margin-left: 1.5em; font-size: 70%}
    .right {position: absolute}
   .stackdown {vertical-align: text-top; margin-top: 0}
    body {font-size: 12pt}
     @page { size: A4 portrait; margin: 2cm;
             orphans: 2; widows: 2;} 
     @media screen {
     body {width: 20cm; margin-left: auto; margin-right: auto}
       }
     @media print {
        body {font-size: 10pt}
        h1, h2, h3, h4 {page-break-after: avoid}
     }
     pre.code {font-family: monospace;
 font-weight: bold;
 line-height: 120%;
 padding-top: 0.2em;
 padding-bottom: 0.2em;
 padding-left: 1em;
 padding-right: 1em;
 border-style: solid;
 border-left-width: 1em;
 border-top-width: thin;
 border-right-width: thin;
 border-bottom-width: thin;
 border-color: #95ABD0;
 color: #00428C;
 background-color: #E4E5E7;
}
       pre {margin-left: 0em}
       div.toc h2 {font-size: 120%; margin-top: 0em; margin-bottom: 0em}
       div.toc h4 {font-size: 100%; margin-top: 0em; margin-bottom: 0em;
                   margin-left: 1em}
       div.toc h1 {font-size: 140%; margin-bottom: 0em}
       div.toc ul {margin-top: 1ex}
       .byline {font-size: 120%}
       div.figure {margin-left: 2em}
       div.caption {font-style: italic; font-weight: bold; margin-top: 1em}
       i i {font-style: normal}
       img {border: 0}
       .copyright {font-size: 70%}
     </style><title>Spreadsheet annotation spec</title></head><body style="font-family: DejaVu Sans, Arial; background: rgb(254,250,246)"><div style="text-align: center" class="head"><hr/><h1>Spreadsheet annotation spec</h1><div class="byline">Henry S. Thompson</div><div class="byline">$Id$</div></div><div class="body"><div><h2>1.  Introduction</h2><p>This is a first pass at defining an annotation menu structure for
spreadsheets. The assumption is that we'll have an 'Annotate' entry in the Excel
right-button menu for selected regions, which will pop up region-appropriate
menus.</p></div><div><h2>2.  Top-level menus</h2><div style="width: 20%; float: right; clear: right; margin-left: .5em"><small><i>If the selection is a single cell I guess we try popping up a selection type menu,
with choices 'Row', 'Column', 'Matrix' and 'None' (the latter resulting in <code>_Nnnn</code>).</i></small></div><p>Right-clicking 'Annotate' when over a selected range will create a new
defined name of the form <code>_Xnnn</code>, where <code>X</code> is one of <code>R</code>,
<code>C</code> or <code>M</code> for <b>r</b>ows (horizontal range
selection), <b>c</b>olumns (vertical range selection) or
<b>m</b>atrix (for two-dimensional range selection) respectively, and
<code>nnn</code> is a serial number for the relevant selection type.</p><p>The comment field (attribute in the XML) of the defined name should contain a
feature-value dictionary, represented in JSON/Python style, that is, using the
following BNF</p>:
   <pre class="code"><code>fvd := '{' ( fvp ( ',' fvp )* )? '}'
fvp := key ':' value
key := string
value := string | number | fvp | array
string := '"' char* '"'
array := '[' ( value ( ',' value )* )? ']'</code></pre><p>with whitespace ignored, 'number' being the usual integer or decimal
representation and 'char' being ASCII-only (?).</p><p>If possible, the selected range should appear as the value of the new
name <i>without</i> single-quotes.</p><p>Some features can and should be computed, others require annotator
decision.  Some features and/or feature values are unique to a particular selection type, others are
shared across all or some types.</p><p>Accordingly, in order for the annotator to supply the required
information, a form should pop up with all the features appropriate to the
selection type.  Literal or array-valued form fields will just require a value
menu (allowing multiple selection in the array-valued case), but features with
dictionary values will require cascading sub-forms.</p><p>The next two sections document the annotator-supplied and
software-supplied features.  Except for 'comment', whose value is free text,
allowed values are tabulated.</p></div><div><h2>3.  Annotator-supplied features</h2><div><h4>3.1.  All types</h4><ul class="naked  "><li><a name="comment"><b>comment</b></a>
&#160;&#160;string: unconstrained.  By its nature difficult to
exploit, really should only be used to document a problem with the available
feature&amp;value vocabulary or structure.</li></ul></div><div><h4>3.2.  Both one-dimensional types</h4><ul class="naked  "><li><a name="type"><b>type</b></a>
&#160;&#160;string: <code>"data"|"key"|"label"</code><p>"key" is my preferred word for what Dresden call "attribute".  In the
simpler cases, think of it as what you find as the first row/column of the 2nd argument to an HLOOKUP/VLOOKUP call.</p></li><li><a name="content"><b>content</b></a>
&#160;&#160;fvd:
      <ul class="naked  "><li><a name="type"><b>type</b></a>
&#160;&#160;string: <code>"currency"|"date"|"datetime"|"integer"|"float"|"key"|"label"|"string"|"time"</code></li></ul><p>The "key" and "label" content types are for use (as in the Dresden
paper example) where compound keys/labels are indicated by row or column spans.</p></li></ul></div><div><h4>3.3.  Matrices</h4><ul class="naked  "><li><a name="type"><b>type</b></a>
&#160;&#160;string: <code>"table"|"data"|"label"|"condition"</code></li><li><a name="content"><b>content</b></a>
&#160;&#160;fvd:
      <ul class="naked  "><li><a name="type"><b>type</b></a>
&#160;&#160;string: <code>"rows"|"columns"|"cells"</code></li></ul></li></ul><p>When a form for a matrix is completed, if <code>type</code> is 'data' a pop-up should offer to auto-fill
based on <code>content/type</code>.  If chosen, this fills the matrix with
named ranges of the appropriate orientation (rows, columns or, in the case of
<code>cells</code>, both).  If
it's not too hard, it would be good to go on to pop up the form for each
generated range
in turn, either having asked in advance for appropriate
features whose values are the same for all the ranges, or carrying forward
values from one to the next as defaults.</p></div></div><div><h2>4.  Software-supplied features</h2></div><div><h2>5.  Issues</h2><div><h4>5.1.  Compound labels and keys</h4><p>There's a problem with
defining the structure I want for compound labels and keys, in that you can't
for example select the 6th column of rows 3 through 5 in the Dresden example,
to denote the "Group stage/Match 2/GA" column label:</p><img src="dresdenPlus.png" class="image" alt="table with three-row labels involving column spans, row and column labels added, F3:F5 highlighted" title="table with three-row labels involving column spans, row and column labels added, F3:F5 highlighted" width="75%"/><p>Excel would allow you to define a name for
F3:F5 in that spreadsheet, but I don't <i>think</i> you can select that
range with the mouse.</p></div><div><h4>5.2.  Metadata</h4><p>Nothing in the above proposal provides a way to annotate what Dresden
call 'Metadata'.  We could simply provide another 1-D type, e.g. 'meta', I suppose, or just allow uninteresting regions to remain unannotated. 
There is a difference between on the one hand informative prose such as occurs in the Dresden
example with the Metadata label, and regions whose type is just not obvious (as
e.g. lots in the Kenneth Lay sheet from the Enron dataset...</p></div></div></div></body></html>