Merge branch 'main' of git.odin.cse.buffalo.edu:VizierDB/paper-Vizier-SpreadsheetOverlay
commit
cd1a2329d8
Binary file not shown.
|
@ -0,0 +1,729 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="154.11223mm"
|
||||
height="48.864624mm"
|
||||
viewBox="0 0 154.11223 48.864624"
|
||||
version="1.1"
|
||||
id="svg5"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
sodipodi:docname="forms-of-spreadsheet.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview7"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
showgrid="false"
|
||||
inkscape:zoom="2.587745"
|
||||
inkscape:cx="330.98316"
|
||||
inkscape:cy="78.44668"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1011"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs2">
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="marker6665"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto-start-reverse"
|
||||
inkscape:stockid="TriangleStart"
|
||||
markerWidth="8.3240004"
|
||||
markerHeight="9.6231213"
|
||||
viewBox="0 0 5.3244081 6.1553851"
|
||||
inkscape:isstock="true"
|
||||
inkscape:collect="always"
|
||||
preserveAspectRatio="xMidYMid">
|
||||
<path
|
||||
transform="scale(0.5)"
|
||||
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
|
||||
d="M 5.77,0 -2.88,5 V -5 Z"
|
||||
id="path6663" />
|
||||
</marker>
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="Arrow2"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto-start-reverse"
|
||||
inkscape:stockid="Arrow2"
|
||||
markerWidth="7.6999998"
|
||||
markerHeight="5.5999999"
|
||||
viewBox="0 0 7.7 5.6"
|
||||
inkscape:isstock="true"
|
||||
inkscape:collect="always"
|
||||
preserveAspectRatio="xMidYMid">
|
||||
<path
|
||||
transform="scale(0.7)"
|
||||
d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
|
||||
style="fill:context-stroke;fill-rule:evenodd;stroke:none"
|
||||
id="arrow2L" />
|
||||
</marker>
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="TriangleStart"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto-start-reverse"
|
||||
inkscape:stockid="TriangleStart"
|
||||
markerWidth="5.3239999"
|
||||
markerHeight="6.1549134"
|
||||
viewBox="0 0 5.3244081 6.1553851"
|
||||
inkscape:isstock="true"
|
||||
inkscape:collect="always"
|
||||
preserveAspectRatio="xMidYMid">
|
||||
<path
|
||||
transform="scale(0.5)"
|
||||
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
|
||||
d="M 5.77,0 -2.88,5 V -5 Z"
|
||||
id="path135" />
|
||||
</marker>
|
||||
<marker
|
||||
style="overflow:visible"
|
||||
id="Arrow2-5"
|
||||
refX="0"
|
||||
refY="0"
|
||||
orient="auto-start-reverse"
|
||||
inkscape:stockid="Arrow2"
|
||||
markerWidth="7.6999998"
|
||||
markerHeight="5.5999999"
|
||||
viewBox="0 0 7.7 5.6"
|
||||
inkscape:isstock="true"
|
||||
inkscape:collect="always"
|
||||
preserveAspectRatio="xMidYMid">
|
||||
<path
|
||||
transform="scale(0.7)"
|
||||
d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
|
||||
style="fill:context-stroke;fill-rule:evenodd;stroke:none"
|
||||
id="arrow2L-3" />
|
||||
</marker>
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-14.571606,-10.486426)">
|
||||
<g
|
||||
id="g6351"
|
||||
transform="translate(1.9161877)">
|
||||
<g
|
||||
id="g4627">
|
||||
<g
|
||||
id="g4338">
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect1151"
|
||||
width="7.5076909"
|
||||
height="7.5076909"
|
||||
x="16.242188"
|
||||
y="14.529357" />
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect1396"
|
||||
width="7.5076909"
|
||||
height="7.5076909"
|
||||
x="26.825521"
|
||||
y="14.529357" />
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect1398"
|
||||
width="7.5076909"
|
||||
height="7.5076909"
|
||||
x="37.408855"
|
||||
y="14.529357" />
|
||||
<path
|
||||
style="fill:none;stroke:#2c2ca0;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#TriangleStart)"
|
||||
d="m 40.819218,18.204756 c -3.660315,-8.5795686 -17.502389,-7.971314 -20.574359,0"
|
||||
id="path1771"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:none;stroke:#2c2ca0;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#TriangleStart)"
|
||||
d="m 40.819218,18.204756 c -3.660315,-8.5795686 -9.768532,-2.868862 -10.354477,0"
|
||||
id="path1779"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect2668"
|
||||
width="7.5076909"
|
||||
height="7.5076909"
|
||||
x="26.825521"
|
||||
y="14.529357" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#rect1396"
|
||||
id="use4226" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#rect2668"
|
||||
id="use4240" />
|
||||
</g>
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#g4338"
|
||||
id="use4380"
|
||||
transform="translate(0,11.1125)" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#use4380"
|
||||
id="use4382"
|
||||
transform="translate(0,11.1125)" />
|
||||
</g>
|
||||
<g
|
||||
id="g4656">
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#g4364"
|
||||
id="use4384"
|
||||
transform="translate(0,11.1125)" />
|
||||
<g
|
||||
id="g4364">
|
||||
<rect
|
||||
style="fill:none;stroke:#d40000;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect1400"
|
||||
width="7.5076909"
|
||||
height="7.5076909"
|
||||
x="47.992191"
|
||||
y="14.529357" />
|
||||
<path
|
||||
style="fill:none;stroke:#d40000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2)"
|
||||
d="M 51.673937,18.133864 H 42.78024"
|
||||
id="path2554"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#g4364"
|
||||
id="use4386"
|
||||
transform="translate(0,22.225001)" />
|
||||
<path
|
||||
style="fill:none;stroke:#d40000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2-5)"
|
||||
d="M 51.739837,29.366921 V 20.491576"
|
||||
id="path4388"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:none;stroke:#d40000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2-5)"
|
||||
d="M 51.739837,40.479422 V 31.604077"
|
||||
id="path4614"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g5802"
|
||||
transform="matrix(0.7126818,0,0,0.7126818,17.510213,-6.4390366)">
|
||||
<g
|
||||
id="g4949"
|
||||
transform="translate(-4.8674092,24.039098)">
|
||||
<g
|
||||
id="g4730"
|
||||
transform="translate(3.1316448,-15.611894)"
|
||||
inkscape:tile-cx="88.776394"
|
||||
inkscape:tile-cy="24.396455"
|
||||
inkscape:tile-w="19.09103"
|
||||
inkscape:tile-h="8.5076929"
|
||||
inkscape:tile-x0="79.230879"
|
||||
inkscape:tile-y0="20.142608">
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect1151-2"
|
||||
width="7.5076909"
|
||||
height="7.5076909"
|
||||
x="76.599236"
|
||||
y="36.254505" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#rect2668"
|
||||
id="use4240-9"
|
||||
transform="translate(60.357054,21.725146)" />
|
||||
</g>
|
||||
<g
|
||||
id="g4883"
|
||||
transform="translate(-0.11322685,-0.07422867)">
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:tiled-clone-of="#g4730"
|
||||
xlink:href="#g4730"
|
||||
id="use4768" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:tiled-clone-of="#g4730"
|
||||
xlink:href="#g4730"
|
||||
transform="translate(0,8.9330776)"
|
||||
id="use4770" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:tiled-clone-of="#g4730"
|
||||
xlink:href="#g4730"
|
||||
transform="translate(0,17.866155)"
|
||||
id="use4772" />
|
||||
</g>
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect4826"
|
||||
width="25.165388"
|
||||
height="32.153976"
|
||||
x="76.080475"
|
||||
y="17.178316" />
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#d40000;stroke-width:0.565;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleStart)"
|
||||
d="m 116.76997,63.460172 c 10.42317,0.698248 19.60803,1.663115 19.50948,-4.731286"
|
||||
id="path5752"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<g
|
||||
id="g4967"
|
||||
transform="translate(3.6876007,17.653993)">
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect4965"
|
||||
width="36.816898"
|
||||
height="32.153976"
|
||||
x="76.080475"
|
||||
y="17.178316" />
|
||||
<g
|
||||
id="g4963"
|
||||
transform="translate(0.42086127,-0.07422867)">
|
||||
<g
|
||||
id="use4957"
|
||||
transform="translate(3.1316448,-15.611894)"
|
||||
inkscape:tile-x0="85.632959"
|
||||
inkscape:tile-y0="40.42387"
|
||||
inkscape:tile-cx="100.47014"
|
||||
inkscape:tile-cy="44.677717"
|
||||
inkscape:tile-w="29.674364"
|
||||
inkscape:tile-h="8.5076929">
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect4969"
|
||||
width="7.5076909"
|
||||
height="7.5076909"
|
||||
x="76.599236"
|
||||
y="36.254505" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#rect2668"
|
||||
id="use4971"
|
||||
transform="translate(60.357054,21.725146)" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#rect2668"
|
||||
id="use4975"
|
||||
transform="translate(70.940388,21.725146)" />
|
||||
</g>
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:tiled-clone-of="#use4957"
|
||||
xlink:href="#use4957"
|
||||
id="use4977" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:tiled-clone-of="#use4957"
|
||||
xlink:href="#use4957"
|
||||
transform="translate(0,8.9330776)"
|
||||
id="use4979" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:tiled-clone-of="#use4957"
|
||||
xlink:href="#use4957"
|
||||
transform="translate(0,17.866155)"
|
||||
id="use4981" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g5055"
|
||||
transform="translate(19.562601,7.0706593)">
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect5037"
|
||||
width="47.668419"
|
||||
height="32.153976"
|
||||
x="76.080475"
|
||||
y="17.178316" />
|
||||
<g
|
||||
id="g5329"
|
||||
inkscape:tile-cx="119.32509"
|
||||
inkscape:tile-cy="31.373039"
|
||||
inkscape:tile-w="40.221492"
|
||||
inkscape:tile-h="8.5076929"
|
||||
inkscape:tile-x0="99.214341"
|
||||
inkscape:tile-y0="27.119193">
|
||||
<g
|
||||
id="g5053"
|
||||
transform="translate(0.42086163,-0.0940746)">
|
||||
<g
|
||||
id="g5045"
|
||||
transform="translate(3.1316448,-15.611894)"
|
||||
inkscape:tile-x0="85.632959"
|
||||
inkscape:tile-y0="40.42387"
|
||||
inkscape:tile-cx="100.47014"
|
||||
inkscape:tile-cy="44.677717"
|
||||
inkscape:tile-w="29.674364"
|
||||
inkscape:tile-h="8.5076929">
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect5039"
|
||||
width="7.5076909"
|
||||
height="7.5076909"
|
||||
x="76.599236"
|
||||
y="36.254505" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#rect2668"
|
||||
id="use5041"
|
||||
transform="translate(60.357054,21.725146)" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#rect2668"
|
||||
id="use5043"
|
||||
transform="translate(70.940388,21.725146)" />
|
||||
</g>
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:tiled-clone-of="#use4957"
|
||||
xlink:href="#use4957"
|
||||
id="use5047" />
|
||||
</g>
|
||||
<g
|
||||
id="g5204"
|
||||
transform="translate(10.583333,0.01984703)">
|
||||
<rect
|
||||
style="fill:none;stroke:#d40000;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect1400-7"
|
||||
width="7.5076909"
|
||||
height="7.5076909"
|
||||
x="101.28221"
|
||||
y="20.528688" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g5340"
|
||||
transform="translate(0.15219571)">
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:tiled-clone-of="#g5329"
|
||||
xlink:href="#g5329"
|
||||
id="use5331" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:tiled-clone-of="#g5329"
|
||||
xlink:href="#g5329"
|
||||
transform="translate(0,8.9330776)"
|
||||
id="use5333" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:tiled-clone-of="#g5329"
|
||||
xlink:href="#g5329"
|
||||
transform="translate(0,17.866155)"
|
||||
id="use5335" />
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.565;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleStart)"
|
||||
d="m 96.533022,71.500232 c 9.853508,0.929697 16.811308,3.968961 16.682788,-2.042305"
|
||||
id="path5426"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:none;stroke-width:0.523847;stroke-dasharray:none"
|
||||
id="rect5632"
|
||||
width="7.3404536"
|
||||
height="7.7885733"
|
||||
x="101.85653"
|
||||
y="68.684906" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;stroke-width:0.264583"
|
||||
x="102.05072"
|
||||
y="75.11834"
|
||||
id="text4939"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4937"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto Mono';-inkscape-font-specification:'Noto Mono';stroke-width:0.264583"
|
||||
x="102.05072"
|
||||
y="75.11834">π</tspan></text>
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:none;stroke-width:0.523847;stroke-dasharray:none"
|
||||
id="rect5756"
|
||||
width="6.5564413"
|
||||
height="7.7885742"
|
||||
x="119.84821"
|
||||
y="58.630737" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:10.5833px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;fill:#d40000;stroke-width:0.264583"
|
||||
x="119.74588"
|
||||
y="66.839859"
|
||||
id="text4985"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4983"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto Mono';-inkscape-font-specification:'Noto Mono';fill:#d40000;stroke-width:0.264583"
|
||||
x="119.74588"
|
||||
y="66.839859">Σ</tspan></text>
|
||||
</g>
|
||||
<g
|
||||
id="g6315"
|
||||
transform="matrix(0.68076508,0,0,0.68076508,44.184283,5.8587649)">
|
||||
<g
|
||||
id="g4949-2"
|
||||
transform="matrix(0.7126818,0,0,0.7126818,70.774401,20.538557)">
|
||||
<g
|
||||
id="g4730-2"
|
||||
transform="translate(3.1316448,-15.611894)"
|
||||
inkscape:tile-cx="88.776394"
|
||||
inkscape:tile-cy="24.396455"
|
||||
inkscape:tile-w="19.09103"
|
||||
inkscape:tile-h="8.5076929"
|
||||
inkscape:tile-x0="79.230879"
|
||||
inkscape:tile-y0="20.142608">
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect1151-2-8"
|
||||
width="7.5076909"
|
||||
height="7.5076909"
|
||||
x="76.599236"
|
||||
y="36.254505" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#rect2668"
|
||||
id="use4240-9-9"
|
||||
transform="translate(60.357054,21.725146)" />
|
||||
</g>
|
||||
<g
|
||||
id="g4883-7"
|
||||
transform="translate(-0.11322685,-0.07422867)">
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:tiled-clone-of="#g4730-2"
|
||||
xlink:href="#g4730-2"
|
||||
id="use4768-3" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:tiled-clone-of="#g4730-2"
|
||||
xlink:href="#g4730-2"
|
||||
transform="translate(0,8.9330776)"
|
||||
id="use4770-6" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
inkscape:tiled-clone-of="#g4730-2"
|
||||
xlink:href="#g4730-2"
|
||||
transform="translate(0,17.866155)"
|
||||
id="use4772-1" />
|
||||
</g>
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect4826-2"
|
||||
width="25.165388"
|
||||
height="32.153976"
|
||||
x="76.080475"
|
||||
y="17.178316" />
|
||||
</g>
|
||||
<g
|
||||
id="g6188"
|
||||
transform="translate(6.0752876,0.31969252)">
|
||||
<rect
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:0.712682;stroke-dasharray:none"
|
||||
id="rect4826-2-9"
|
||||
width="48.463848"
|
||||
height="38.089653"
|
||||
x="127.98633"
|
||||
y="8.9268599" />
|
||||
<g
|
||||
id="g6159"
|
||||
transform="translate(-0.06946268,-0.33844343)">
|
||||
<g
|
||||
id="g5834"
|
||||
transform="translate(116.41668)">
|
||||
<g
|
||||
id="g5828">
|
||||
<rect
|
||||
style="fill:none;stroke:#999999;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect5812"
|
||||
width="7.5076909"
|
||||
height="7.5076909"
|
||||
x="16.242188"
|
||||
y="14.529357" />
|
||||
<rect
|
||||
style="fill:none;stroke:#999999;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect5814"
|
||||
width="7.5076909"
|
||||
height="7.5076909"
|
||||
x="26.825521"
|
||||
y="14.529357" />
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect5816"
|
||||
width="7.5076909"
|
||||
height="7.5076909"
|
||||
x="37.408855"
|
||||
y="14.529357" />
|
||||
<path
|
||||
style="fill:none;stroke:#2c2ca0;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#TriangleStart)"
|
||||
d="m 40.819218,18.204756 c -3.660315,-8.5795686 -17.502389,-7.971314 -20.574359,0"
|
||||
id="path5818"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:none;stroke:#2c2ca0;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#TriangleStart)"
|
||||
d="m 40.819218,18.204756 c -3.660315,-8.5795686 -9.768532,-2.868862 -10.354477,0"
|
||||
id="path5820"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#g5828"
|
||||
id="use5912"
|
||||
transform="translate(0,11.1125)" />
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#g5828"
|
||||
id="use5916"
|
||||
transform="translate(0,22.225001)" />
|
||||
</g>
|
||||
<g
|
||||
id="g5850"
|
||||
transform="translate(116.41668)">
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#g4364"
|
||||
id="use5836"
|
||||
transform="translate(0,11.1125)" />
|
||||
<g
|
||||
id="g5842">
|
||||
<rect
|
||||
style="fill:none;stroke:#d40000;stroke-width:1;stroke-dasharray:none"
|
||||
id="rect5838"
|
||||
width="7.5076909"
|
||||
height="7.5076909"
|
||||
x="47.992191"
|
||||
y="14.529357" />
|
||||
<path
|
||||
style="fill:none;stroke:#d40000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2)"
|
||||
d="M 51.673937,18.133864 H 42.78024"
|
||||
id="path5840"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
<use
|
||||
x="0"
|
||||
y="0"
|
||||
xlink:href="#g4364"
|
||||
id="use5844"
|
||||
transform="translate(0,22.225001)" />
|
||||
<path
|
||||
style="fill:none;stroke:#d40000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2-5)"
|
||||
d="M 51.739837,29.366921 V 20.491576"
|
||||
id="path5846"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:none;stroke:#d40000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2-5)"
|
||||
d="M 51.739837,40.479422 V 31.604077"
|
||||
id="path5848"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<path
|
||||
style="fill:none;stroke:#999999;stroke-width:0.465;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker6665)"
|
||||
d="m 142.21581,19.285158 c -2.50508,0.63113 -11.03133,-0.794123 -14.16314,4.695735 -1.70323,2.98566 -0.38946,5.857624 -0.38946,5.857624"
|
||||
id="path6190"
|
||||
sodipodi:nodetypes="csc" />
|
||||
<path
|
||||
style="fill:none;stroke:#999999;stroke-width:0.465;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 152.74586,19.17136 c -0.16358,3.270201 -19.86514,-1.603955 -24.69319,4.809533"
|
||||
id="path6250"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:none;stroke:#999999;stroke-width:0.465;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 152.74889,30.328748 c -0.16358,3.270201 -19.86817,-12.761343 -24.69622,-6.347855"
|
||||
id="path6258"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:none;stroke:#999999;stroke-width:0.465;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 142.31796,30.3228 c -0.13003,4.162047 -9.43724,-12.755395 -14.26529,-6.341907"
|
||||
id="path6260"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:none;stroke:#999999;stroke-width:0.465;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 152.6546,41.520854 C 150.73848,46.86171 132.88072,17.567405 128.05267,23.980893"
|
||||
id="path6262"
|
||||
sodipodi:nodetypes="cc" />
|
||||
<path
|
||||
style="fill:none;stroke:#999999;stroke-width:0.465;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 142.32247,41.461448 c -1.993,6.622311 -9.44175,-23.894043 -14.2698,-17.480555"
|
||||
id="path6264"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:8.46667px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;stroke-width:0.264583"
|
||||
x="14.004339"
|
||||
y="57.759315"
|
||||
id="text6325"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan6323"
|
||||
style="font-size:8.46667px;stroke-width:0.264583"
|
||||
x="14.004339"
|
||||
y="57.759315">Materialized</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:8.46667px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;stroke-width:0.264583"
|
||||
x="81.033951"
|
||||
y="57.759315"
|
||||
id="text6363"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan6361"
|
||||
style="font-size:8.46667px;stroke-width:0.264583"
|
||||
x="81.033951"
|
||||
y="57.759315">Virtual</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:8.46667px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;stroke-width:0.264583"
|
||||
x="133.92386"
|
||||
y="57.759315"
|
||||
id="text6367"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan6365"
|
||||
style="font-size:8.46667px;stroke-width:0.264583"
|
||||
x="133.92386"
|
||||
y="57.759315">Overlay</tspan></text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 26 KiB |
1
main.tex
1
main.tex
|
@ -159,6 +159,7 @@
|
|||
\input{sections/introduction}
|
||||
\input{sections/overview}
|
||||
\input{sections/formalism}
|
||||
\input{sections/system}
|
||||
\input{sections/data}
|
||||
\input{sections/relwork}
|
||||
|
||||
|
|
|
@ -46,7 +46,9 @@ $$E = \bigcup_{\cell \in \columnDomain \times \rowDomain}
|
|||
\{\;\cell \rightarrow \cell'\;|\;\cell' \in \depsOf{\spreadsheet(\cell)}\;\} $$
|
||||
We use $\TDG{\spreadsheet}$ to denote the graph $\tuple{V,E^*}$ where $E^*$ is the transitive closure of $E$, i.e., $\TDG{\spreadsheet}$ stores both direct and indirect dependencies among the cells in the spreadsheet.
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{Compressed Updates}
|
||||
We adopt a common assumption in relational data: that $\columnDomain$ is small and $\rowDomain$ is large for a typical spreadsheet.
|
||||
Accordingly, we define $\rowDomain$ for a spreadsheet with $N$ rows to be the range $[1,N]$, with rows identified by their position in the spreadsheet.
|
||||
|
|
|
@ -12,11 +12,11 @@ We refer to these as the virtual and materialized approach, respectively.
|
|||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\begin{figure}
|
||||
\includegraphics[width=0.6\columnwidth]{graphics/overlay.png}
|
||||
\includegraphics[width=0.9\columnwidth]{graphics/forms-of-spreadsheet.pdf}
|
||||
\Description{
|
||||
Two layers. At the bottom, a classical relational table including column headers and miscellaneous data values. Stacked over it is a set of edits: cells with dependencies marked by arrows.
|
||||
Three architectures: First, a materialized approach depicted by a 4 by 3 grid of cells with arrows indicating dependencies. The cells of the 3rd column point to cells in the same row in the 1st and 2nd columns. The cells of the 4th column are marked red and point to the cell in the 3rd column of the same row, and the cell of the 4th column in the preceding row. Second, a virtual approach depicted by three boxes: The first box contains a 2 by 3 grid of cells. An arrow labeled with a pi (projection) connects it to the second box, which contains a 3 by 3 grid of cells. An arrow labeled with a sigma (aggregation) connects it to the third box, which contains a 4 by 3 grid of cells. The sigma, its arrow, and the 4th column of cells are marked in red. Finally, an overlay approach depicted by 2 boxes. The 2nd box is nearly identical to the materialized approach, but the 1st and 2nd columns of the grid are greyed out with arrows pointing to the first box; The first box is the same 2 by 3 grid from the virtual approach.
|
||||
}
|
||||
\caption{Architecture of an overlay spreadsheet}
|
||||
\caption{Approaches to scalable spreadsheet design}
|
||||
\label{fig:overlay}
|
||||
\end{figure}
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
%!TEX root = ../main.tex
|
||||
\section{System Design}
|
||||
\label{sec:system}
|
||||
|
||||
\begin{figure}
|
||||
\includegraphics[width=0.8\columnwidth]{graphics/systemdesign.png}
|
||||
\caption{Overlay system design.}
|
||||
\label{fig:systemdesign}
|
||||
\end{figure}
|
||||
|
||||
As illustrated in \Cref{fig:systemdesign}, we decompose Overlay into several distinct layers.
|
||||
The \textbf{Update Index} is responsible for storing a mutable encoded spreadsheet ($\encodedSpreadsheet$), and providing efficient access to cells, and answers to reachability queries over the dependency graph.
|
||||
The \textbf{Execution} layer is responsible for evaluating cell values, and maintianing a materialized view over the spreadsheet's values.
|
||||
This layer specifically overlays values computed from expressions stored in the update index, on top of a raw dataset obtained from Apache Spark.
|
||||
A thin \textbf{Cache} layer provides the execution layer with random access to the cells of the dataframe.
|
||||
Finally, a \textbf{Presentation} layer defines syntactic sugar over the execution layer to provide a spreadsheet-like API to client applications.
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
\subsection{Update Index}
|
||||
The update index stores an encoded spreadsheet: a mapping from ranges of cells to expression patterns.
|
||||
|
||||
|
||||
|
||||
An update index stores an encoded spreadsheet
|
||||
|
||||
|
||||
Evaluating a cell in a spreadsheet requires evaluating transitive dependencies;
|
||||
The spreadsheet may thus be viewed as a graph, with one node for each cell and one edge for each dependency.
|
||||
The update index maintains
|
||||
|
||||
|
Loading…
Reference in New Issue