dataforge docs
21
src/components/dataforge/docsLayout.js
Normal file
@ -0,0 +1,21 @@
|
||||
import React from "react"
|
||||
import PropTypes from "prop-types"
|
||||
|
||||
import Header from "./header"
|
||||
import Footer from "./footer"
|
||||
import "../../styles/dataforge/docs.css"
|
||||
|
||||
const DocsLayout = ({children}) => (
|
||||
<>
|
||||
<Header id="df"/>
|
||||
<main id="docs">{children}</main>
|
||||
<Footer id="df"/>
|
||||
</>
|
||||
)
|
||||
|
||||
|
||||
DocsLayout.propTypes = {
|
||||
children: PropTypes.node.isRequired,
|
||||
}
|
||||
|
||||
export default DocsLayout
|
28
src/components/dataforge/sidebar.js
Normal file
@ -0,0 +1,28 @@
|
||||
import React from "react"
|
||||
import { Link } from "gatsby"
|
||||
import { push as Menu } from "react-burger-menu"
|
||||
|
||||
const SideBar = ( props ) => {
|
||||
let curActive = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '];
|
||||
if (document.location.pathname === '/dataforge/docs/'){curActive[0] = 'active';}
|
||||
if (document.location.pathname === '/dataforge/docs/meta'){curActive[1] = 'active';}
|
||||
if (document.location.pathname === '/dataforge/docs/framework'){curActive[2] = 'active';}
|
||||
if (document.location.pathname === '/dataforge/docs/data_flow'){curActive[3] = 'active';}
|
||||
if (document.location.pathname === '/dataforge/docs/envelopes'){curActive[4] = 'active';}
|
||||
if (document.location.pathname === '/dataforge/docs/storage'){curActive[5] = 'active';}
|
||||
if (document.location.pathname === '/dataforge/docs/control'){curActive[6] = 'active';}
|
||||
if (document.location.pathname === '/dataforge/docs/extensions'){curActive[7] = 'active';}
|
||||
return(
|
||||
<Menu {...props}>
|
||||
<Link className="menu-item" id={`${curActive[0]}`} to="./dataforge/docs/">1 - How to read this documentation</Link>
|
||||
<Link className="menu-item" id={`${curActive[1]}`} to="./dataforge/docs/meta">2 - Meta-data processor</Link>
|
||||
<Link className="menu-item" id={`${curActive[2]}`} to="./dataforge/docs/framework">3 - Framework</Link>
|
||||
<Link className="menu-item" id={`${curActive[3]}`} to="./dataforge/docs/data_flow">4 - Data flow</Link>
|
||||
<Link className="menu-item" id={`${curActive[4]}`} to="./dataforge/docs/envelopes">5 - Envelopes</Link>
|
||||
<Link className="menu-item" id={`${curActive[5]}`} to="./dataforge/docs/storage">6 - Storage plugin</Link>
|
||||
<Link className="menu-item" id={`${curActive[6]}`} to="./dataforge/docs/control">7 - Control plugin</Link>
|
||||
<Link className="menu-item" id={`${curActive[7]}`} to="./dataforge/docs/extensions">8 - Language extensions</Link>
|
||||
</Menu>
|
||||
)}
|
||||
|
||||
export default SideBar
|
BIN
src/images/dataforge/actions.png
Normal file
After Width: | Height: | Size: 12 KiB |
196
src/images/dataforge/meta.svg
Normal file
@ -0,0 +1,196 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by Microsoft Visio, SVG Export meta.svg Page-1 -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
|
||||
xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="4.59173in" height="5.27184in"
|
||||
viewBox="0 0 330.605 379.573" xml:space="preserve" color-interpolation-filters="sRGB" class="st13">
|
||||
<v:documentProperties v:langID="1033" v:metric="true" v:viewMarkup="false">
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="msvSubprocessMaster" v:prompt="" v:val="VT4(Rectangle)"/>
|
||||
<v:ud v:nameU="msvNoAutoConnect" v:val="VT0(1):26"/>
|
||||
</v:userDefs>
|
||||
</v:documentProperties>
|
||||
|
||||
<style type="text/css">
|
||||
<![CDATA[
|
||||
.st1 {fill:#ffffff;stroke:#ed7d31;stroke-width:0.75}
|
||||
.st2 {fill:#ed7d31;font-family:Calibri;font-size:0.833336em}
|
||||
.st3 {visibility:visible}
|
||||
.st4 {fill:#5b9bd5;fill-opacity:0.25;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.25}
|
||||
.st5 {fill:#4f87bb;stroke:#40709c;stroke-width:0.75}
|
||||
.st6 {fill:#feffff;font-family:Calibri;font-size:0.833336em}
|
||||
.st7 {marker-end:url(#mrkr4-27);stroke:#5b9bd5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
|
||||
.st8 {fill:#5b9bd5;fill-opacity:1;stroke:#5b9bd5;stroke-opacity:1;stroke-width:0.28409090909091}
|
||||
.st9 {fill:url(#grad0-36);stroke:#61973d;stroke-width:0.75}
|
||||
.st10 {fill:#61973d;font-family:Calibri;font-size:0.833336em}
|
||||
.st11 {fill:#ffffff;stroke:#70ad47;stroke-width:0.75}
|
||||
.st12 {fill:#70ad47;font-family:Calibri;font-size:0.833336em}
|
||||
.st13 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
|
||||
]]>
|
||||
</style>
|
||||
|
||||
<defs id="Patterns_And_Gradients">
|
||||
<linearGradient id="grad0-36" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(60 0.5 0.5)">
|
||||
<stop offset="0" stop-color="#ebf1e8" stop-opacity="1"/>
|
||||
<stop offset="0.24" stop-color="#f5f8f4" stop-opacity="1"/>
|
||||
<stop offset="0.54" stop-color="#feffff" stop-opacity="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<defs id="Markers">
|
||||
<g id="lend4">
|
||||
<path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"/>
|
||||
</g>
|
||||
<marker id="mrkr4-27" class="st8" v:arrowType="4" v:arrowSize="2" v:setback="7.04" refX="-7.04" orient="auto"
|
||||
markerUnits="strokeWidth" overflow="visible">
|
||||
<use xlink:href="#lend4" transform="scale(-3.52,-3.52) "/>
|
||||
</marker>
|
||||
</defs>
|
||||
<defs id="Filters">
|
||||
<filter id="filter_2">
|
||||
<feGaussianBlur stdDeviation="2"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="msvThemeOrder" v:val="VT0(0):26"/>
|
||||
</v:userDefs>
|
||||
<title>Page-1</title>
|
||||
<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
|
||||
v:shadowOffsetY="-8.50394"/>
|
||||
<v:layer v:name="Connector" v:index="0"/>
|
||||
<g id="shape1-1" v:mID="1" v:groupContext="shape" transform="translate(18.75,-260.958)">
|
||||
<title>Rectangle</title>
|
||||
<desc>Meta</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st1"/>
|
||||
<text x="31.69" y="368.4" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Meta</text> </g>
|
||||
<g id="shape2-4" v:mID="2" v:groupContext="shape" transform="translate(139.222,-331.824)">
|
||||
<title>Rectangle.2</title>
|
||||
<desc>someValue</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<g id="shadow2-5" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
|
||||
transform="matrix(1,0,0,1,0.345598,1.97279)" class="st3">
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st4"/>
|
||||
</g>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st5"/>
|
||||
<text x="19.95" y="368.4" class="st6" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>someValue</text> </g>
|
||||
<g id="shape3-10" v:mID="3" v:groupContext="shape" transform="translate(139.222,-303.477)">
|
||||
<title>Rectangle.3</title>
|
||||
<desc>otherValue[0]</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<g id="shadow3-11" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
|
||||
transform="matrix(1,0,0,1,0.345598,1.97279)" class="st3">
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st4"/>
|
||||
</g>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st5"/>
|
||||
<text x="14.26" y="368.4" class="st6" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>otherValue[0]</text> </g>
|
||||
<g id="shape4-16" v:mID="4" v:groupContext="shape" transform="translate(223.845,-303.477)">
|
||||
<title>Rectangle.4</title>
|
||||
<desc>otherValue[1]</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<g id="shadow4-17" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
|
||||
transform="matrix(1,0,0,1,0.345598,1.97279)" class="st3">
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st4"/>
|
||||
</g>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st5"/>
|
||||
<text x="14.26" y="368.4" class="st6" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>otherValue[1]</text> </g>
|
||||
<g id="shape5-22" v:mID="5" v:groupContext="shape" v:layerMember="0" transform="translate(61.2697,-289.304)">
|
||||
<title>Dynamic connector</title>
|
||||
<path d="M0 379.57 L0 322.88 L70.91 322.88" class="st7"/>
|
||||
</g>
|
||||
<g id="shape6-28" v:mID="6" v:groupContext="shape" v:layerMember="0" transform="translate(61.2697,-289.304)">
|
||||
<title>Dynamic connector.6</title>
|
||||
<path d="M0 379.57 L0 351.23 L70.91 351.23" class="st7"/>
|
||||
</g>
|
||||
<g id="shape7-33" v:mID="7" v:groupContext="shape" transform="translate(139.222,-210.101)">
|
||||
<title>Rectangle.7</title>
|
||||
<desc>childMeta[0]</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st9"/>
|
||||
<text x="16.42" y="368.4" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>childMeta[0]</text> </g>
|
||||
<g id="shape8-38" v:mID="8" v:groupContext="shape" transform="translate(139.222,-116.724)">
|
||||
<title>Rectangle.8</title>
|
||||
<desc>childValue</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<g id="shadow8-39" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
|
||||
transform="matrix(1,0,0,1,0.345598,1.97279)" class="st3">
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st4"/>
|
||||
</g>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st5"/>
|
||||
<text x="21.36" y="368.4" class="st6" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>childValue</text> </g>
|
||||
<g id="shape9-44" v:mID="9" v:groupContext="shape" transform="translate(223.845,-116.724)">
|
||||
<title>Rectangle.9</title>
|
||||
<desc>grandChild</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st11"/>
|
||||
<text x="20.56" y="368.4" class="st12" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>grandChild</text> </g>
|
||||
<g id="shape10-47" v:mID="10" v:groupContext="shape" transform="translate(223.845,-210.101)">
|
||||
<title>Rectangle.10</title>
|
||||
<desc>childMeta[1]</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st9"/>
|
||||
<text x="16.42" y="368.4" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>childMeta[1]</text> </g>
|
||||
<g id="shape11-51" v:mID="11" v:groupContext="shape" v:layerMember="0" transform="translate(61.2697,-260.958)">
|
||||
<title>Dynamic connector.11</title>
|
||||
<path d="M0 379.57 L0 416.26 L70.91 416.26" class="st7"/>
|
||||
</g>
|
||||
<g id="shape12-56" v:mID="12" v:groupContext="shape" v:layerMember="0" transform="translate(174.656,-210.101)">
|
||||
<title>Dynamic connector.12</title>
|
||||
<path d="M7.09 379.57 L7.09 437.56" class="st7"/>
|
||||
</g>
|
||||
<g id="shape13-61" v:mID="13" v:groupContext="shape" v:layerMember="0" transform="translate(259.278,-210.101)">
|
||||
<title>Dynamic connector.13</title>
|
||||
<path d="M7.09 379.57 L7.09 437.56" class="st7"/>
|
||||
</g>
|
||||
<g id="shape14-66" v:mID="14" v:groupContext="shape" transform="translate(223.845,-23.3478)">
|
||||
<title>Rectangle.14</title>
|
||||
<desc>grandChildValue</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<g id="shadow14-67" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
|
||||
transform="matrix(1,0,0,1,0.345598,1.97279)" class="st3">
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st4"/>
|
||||
</g>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st5"/>
|
||||
<text x="9.06" y="368.4" class="st6" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>grandChildValue</text> </g>
|
||||
<g id="shape15-72" v:mID="15" v:groupContext="shape" v:layerMember="0" transform="translate(259.278,-116.724)">
|
||||
<title>Dynamic connector.15</title>
|
||||
<path d="M7.09 379.57 L7.09 437.56" class="st7"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 10 KiB |
BIN
src/images/dataforge/metadata-processor-classic.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
src/images/dataforge/metadata-processor.png
Normal file
After Width: | Height: | Size: 20 KiB |
100
src/images/dataforge/naming.svg
Normal file
@ -0,0 +1,100 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by Microsoft Visio, SVG Export naming.svg Page-1 -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="8.60048in" height="2.35953in"
|
||||
viewBox="0 0 619.235 169.886" xml:space="preserve" color-interpolation-filters="sRGB" class="st9">
|
||||
<v:documentProperties v:langID="1033" v:metric="true" v:viewMarkup="false">
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="msvSubprocessMaster" v:prompt="" v:val="VT4(Rectangle)"/>
|
||||
<v:ud v:nameU="msvNoAutoConnect" v:val="VT0(1):26"/>
|
||||
</v:userDefs>
|
||||
</v:documentProperties>
|
||||
|
||||
<style type="text/css">
|
||||
<![CDATA[
|
||||
.st1 {fill:none;stroke:none;stroke-width:0.25}
|
||||
.st2 {fill:#5b9bd5;font-family:Calibri;font-size:1.5em}
|
||||
.st3 {stroke:#5b9bd5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
|
||||
.st4 {fill:#ffffff;stroke:none;stroke-linecap:butt;stroke-width:7.2}
|
||||
.st5 {fill:#4f87bb;font-family:Calibri;font-size:1.00001em}
|
||||
.st6 {fill:#5b9bd5;font-family:Calibri;font-size:1.00001em}
|
||||
.st7 {marker-end:url(#mrkr4-22);stroke:#5b9bd5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
|
||||
.st8 {fill:#5b9bd5;fill-opacity:1;stroke:#5b9bd5;stroke-opacity:1;stroke-width:0.28409090909091}
|
||||
.st9 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
|
||||
]]>
|
||||
</style>
|
||||
|
||||
<defs id="Markers">
|
||||
<g id="lend4">
|
||||
<path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"/>
|
||||
</g>
|
||||
<marker id="mrkr4-22" class="st8" v:arrowType="4" v:arrowSize="2" v:setback="7.04" refX="-7.04" orient="auto"
|
||||
markerUnits="strokeWidth" overflow="visible">
|
||||
<use xlink:href="#lend4" transform="scale(-3.52,-3.52) "/>
|
||||
</marker>
|
||||
</defs>
|
||||
<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="msvThemeOrder" v:val="VT0(0):26"/>
|
||||
</v:userDefs>
|
||||
<title>Page-1</title>
|
||||
<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
|
||||
v:shadowOffsetY="-8.50394"/>
|
||||
<v:layer v:name="Connector" v:index="0"/>
|
||||
<g id="shape1-1" v:mID="1" v:groupContext="shape" transform="translate(18.25,-67.9383)">
|
||||
<title>Sheet.1</title>
|
||||
<desc>target::my.strange[2].path/otherTarget::simplePath/something</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="291.367" cy="159.886" width="582.74" height="20"/>
|
||||
<rect x="0" y="149.886" width="582.735" height="20" class="st1"/>
|
||||
<text x="59.37" y="165.29" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>target::my.strange[2].path/otherTarget::simplePath/something</text> </g>
|
||||
<g id="shape2-4" v:mID="2" v:groupContext="shape" transform="translate(269.331,271.833) rotate(180)">
|
||||
<title>Bracket</title>
|
||||
<desc>segment</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(1,3,1,1)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="113.386" cy="155.713" width="70.87" height="70.8661" transform="rotate(180)"/>
|
||||
<path d="M0 169.89 A4.01075 4.01075 0 0 1 3.54 166.34 L94.47 166.34 A4.01075 4.01075 -180 0 0 98.01 162.8 A4.01075 4.01075
|
||||
-180 0 0 101.55 166.34 L189.05 166.34 A4.01075 4.01075 0 0 1 192.59 169.89" class="st3"/>
|
||||
<rect v:rectContext="textBkgnd" x="-123.147" y="-162.913" width="42.1938" height="14.4001" transform="rotate(180)"
|
||||
class="st4"/>
|
||||
<text x="-123.15" y="-152.11" transform="rotate(180)" class="st5" v:langID="1033"><v:paragraph v:horizAlign="2"/><v:tabList/>segment</text> </g>
|
||||
<g id="shape5-9" v:mID="5" v:groupContext="shape" transform="translate(132.601,-87.9383)">
|
||||
<title>Bracket.5</title>
|
||||
<desc>name</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(1,3,1,1)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="54.7602" cy="155.713" width="70.87" height="70.8661"/>
|
||||
<path d="M0 169.89 A4.01075 4.01075 0 0 1 3.54 166.34 L68.59 166.34 A4.01075 4.01075 -180 0 0 72.13 162.8 A4.01075 4.01075
|
||||
-180 0 0 75.67 166.34 L138.19 166.34 A4.01075 4.01075 0 0 1 141.73 169.89" class="st3"/>
|
||||
<rect v:rectContext="textBkgnd" x="59.5835" y="148.512" width="27.6097" height="14.4001" class="st4"/>
|
||||
<text x="59.58" y="159.31" class="st5" v:langID="1033"><v:paragraph v:horizAlign="2"/><v:tabList/>name</text> </g>
|
||||
<g id="shape11-14" v:mID="11" v:groupContext="shape" transform="translate(269.331,-131.636)">
|
||||
<title>Sheet.11</title>
|
||||
<desc>target</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="76" cy="159.886" width="152" height="20"/>
|
||||
<rect x="0" y="149.886" width="152" height="20" class="st1"/>
|
||||
<text x="61.21" y="163.49" class="st6" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>target</text> </g>
|
||||
<g id="shape13-17" v:mID="13" v:groupContext="shape" v:layerMember="0" transform="translate(340.197,-131.636)">
|
||||
<title>Dynamic connector</title>
|
||||
<path d="M0 169.89 L-24.52 207.68" class="st7"/>
|
||||
</g>
|
||||
<g id="shape14-23" v:mID="14" v:groupContext="shape" transform="translate(411.063,-18.25)">
|
||||
<title>Sheet.14</title>
|
||||
<desc>default target</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="76" cy="159.886" width="152" height="20"/>
|
||||
<rect x="0" y="149.886" width="152" height="20" class="st1"/>
|
||||
<text x="42.47" y="163.49" class="st6" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>default target</text> </g>
|
||||
<g id="shape16-26" v:mID="16" v:groupContext="shape" v:layerMember="0" transform="translate(481.929,-38.25)">
|
||||
<title>Dynamic connector.16</title>
|
||||
<path d="M0 169.89 L-11.14 146.55" class="st7"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.8 KiB |
BIN
src/images/dataforge/tasks.png
Normal file
After Width: | Height: | Size: 16 KiB |
@ -1,11 +1,11 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_control"
|
||||
title: "Control plugin"
|
||||
ordering: [2000]
|
||||
label: "control"
|
||||
version: 1.0
|
||||
date: 2016-02-08
|
||||
published: true
|
||||
order: 1
|
||||
---
|
||||
DataForge control subsystem defines a general api for data acquisition processes. It could be used to issue commands to devices, read data and communicate with storage system or other devices.
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_data"
|
||||
title: "Push model"
|
||||
ordering: [20,1]
|
||||
label: "actions"
|
||||
version: 1.0
|
||||
date: 2015-08-27
|
||||
published: true
|
||||
order: 2
|
||||
---
|
||||
Actions
|
||||
![Push data flow model](${r '/docs/images/actions.png'})
|
||||
<img src="/images/dataforge/actions.png" width="800px" alt="push"/>
|
@ -1,10 +1,11 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_data"
|
||||
title: "Data flow"
|
||||
ordering: [20]
|
||||
label: "data_flow"
|
||||
version: 1.0
|
||||
date: 2015-08-27
|
||||
published: true
|
||||
order: 1
|
||||
---
|
||||
One of the most important features of DataForge framework is the data flow control. Any
|
||||
|
@ -1,11 +1,11 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_data"
|
||||
title: "Tasks"
|
||||
ordering: [20,2]
|
||||
label: "tasks"
|
||||
version: 1.0
|
||||
date: 2015-08-27
|
||||
published: true
|
||||
order: 3
|
||||
---
|
||||
![Pull data flow model](${r '/docs/images/tasks.png'})
|
||||
Tasks
|
||||
<img src="/images/dataforge/tasks.png" width="800px" alt="Pull data flow model"/>
|
@ -1,20 +1,21 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_env"
|
||||
title: "Binary meta"
|
||||
chapter: envelope
|
||||
ordering: 50
|
||||
label: "binary_meta"
|
||||
published: false
|
||||
order: 5
|
||||
---
|
||||
Binary meta format is made to limit size and simplify parsing to automatic messages. The notation for the node looks the following way (all numeric values use BigEndian encoding):
|
||||
|
||||
<br>
|
||||
All strings are encoded in a following way: 2 bytes for string length, byte array of given length representing UTF-8 encoded string.
|
||||
<br>
|
||||
|
||||
1. Meta name as string.
|
||||
2. 2 bytes unsigned integer representing the number of values in the node. Could be zero.
|
||||
3. For each of values an encoded name of the value and then:
|
||||
<br>
|
||||
All strings are encoded in a following way: 2 bytes for string length, byte array of given length representing UTF-8 encoded string.
|
||||
<br>
|
||||
|
||||
1. Meta name as string.
|
||||
2. 2 bytes unsigned integer representing the number of values in the node. Could be zero.
|
||||
3. For each of values an encoded name of the value and then:
|
||||
* `0` for Null value.
|
||||
* `T` for `TIME` value, followed by two unsigned long values representing epoch second and nanosecond adjustment.
|
||||
* `S` for `STRING` value followed by encoded string.
|
||||
@ -24,8 +25,8 @@ Binary meta format is made to limit size and simplify parsing to automatic messa
|
||||
* `+` for boolean `true`.
|
||||
* `-` for boolean `false`.
|
||||
* `L` for list value and then 2-byte list size followed by sequence of values (as in item 3, but without a name).
|
||||
4. 2 bytes unsigned integer representing the number of child nodes in this node. Could be zero.
|
||||
5. For each of child nodes:
|
||||
4. 2 bytes unsigned integer representing the number of child nodes in this node. Could be zero.
|
||||
5. For each of child nodes:
|
||||
* child node name,
|
||||
* 2-byte unsigned integer representing number of children with this name.
|
||||
* The sequence of nodes with given name encoding like the root node, but without name.
|
@ -1,10 +1,11 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_env"
|
||||
title: "Streaming envelope format"
|
||||
chapter: envelope
|
||||
ordering: 1
|
||||
label: "envelope_format"
|
||||
published: true
|
||||
order: 2
|
||||
---
|
||||
|
||||
The default envelope format is developed for storage of binary data or transferring data via byte stream. The structure of this format is the following:
|
||||
|
@ -1,10 +1,11 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_env"
|
||||
title: "Envelope description"
|
||||
chapter: envelope
|
||||
ordering: 20
|
||||
label: "envelope_description"
|
||||
published: true
|
||||
order: 4
|
||||
---
|
||||
Interpretation of envelope contents is basically left for user, but for convenience purposes there is convention for envelope description encoded inside meta block.
|
||||
|
||||
|
@ -1,11 +1,12 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_env"
|
||||
title: "Envelopes"
|
||||
chapter: envelope
|
||||
label: "envelopes"
|
||||
version: 1.0
|
||||
date: 2016-02-08
|
||||
published: true
|
||||
order: 1
|
||||
---
|
||||
|
||||
The DataForge functionality is largely based on metadata exchange and therefore the main medium for messages between different parts of the system is `Meta` object and its derivatives. But sometimes one needs not only to transfer metadata but some binary or object data as well. For this DataForge supports an 'Envelope' entity, which contains both meta block and binary data block. Envelope could be automatically serialized to or from a byte stream.
|
||||
|
@ -1,11 +1,12 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_env"
|
||||
title: "Tagless envelope format"
|
||||
chapter: envelope
|
||||
ordering: 2
|
||||
label: "tagless_format"
|
||||
version: 1.0
|
||||
published: true
|
||||
order: 3
|
||||
---
|
||||
Tagless format is developed to store textual data without need for binary block at the beginning. It is not recommended to use it for binary data or for streaming. The structure of this format is the following:
|
||||
|
||||
|
@ -1,9 +1,10 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_extensions"
|
||||
title: "Language extensions"
|
||||
chapter: extensions
|
||||
label: "extensions"
|
||||
version: 1.0
|
||||
published: true
|
||||
order: 1
|
||||
---
|
||||
DataForge also supports a number of language extensions inside JVM.
|
@ -1,11 +1,12 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_extensions"
|
||||
title: "GRoovy INteractive Dataforge"
|
||||
chapter: extensions
|
||||
ordering: 1
|
||||
label: "grind"
|
||||
version: 1.0
|
||||
published: true
|
||||
order: 2
|
||||
---
|
||||
Grind is a thin layer overlay for DataForge framework written in dynamic Java dialect [Groovy](http://groovy-lang.org/). Groovy is a great language to write fast dynamic scripts with Java interoperability. Also it is used to work with interactive environments like [beaker](http://beakernotebook.com/).
|
||||
|
||||
|
@ -1,10 +1,11 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_extensions"
|
||||
title: "KOtlin Dataforge EXtension"
|
||||
chapter: extensions
|
||||
ordering: 2
|
||||
label: "kodex"
|
||||
version: 1.0
|
||||
published: true
|
||||
order: 3
|
||||
---
|
||||
Kotlin is one of the best efforts to make a "better Java". The language is probably not the best way to write a complex architecture like the one used in DataForge, but it definitely should be used in end-user application. KODEX contains some basic DataForge classes extensions as well as operator override for values and metas. It is planned to also include a JavaFX extension library based on the great [tornadofx](https://github.com/edvin/tornadofx).
|
17
src/pages/content/dataforge/docs/framework/context.md
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
content_type: "doc_framework"
|
||||
title: "Context"
|
||||
label: "context"
|
||||
version: 1.0
|
||||
date: 2015-08-27
|
||||
published: true
|
||||
order: 1
|
||||
---
|
||||
|
||||
The important part of DataForge architecture is the context encapsulation. One of the major problems hindering parallel applications development is existence of mutable global states and environment variables. One of the possible solutions to this problem is to run any process in its own personal sandbox carrying copies of all required values, another one is to make all environment values immutable. Another problem in modular system is dynamic loading of modules and changing of their states.
|
||||
|
||||
In DataForge all these problems are solved by `Context` object (the idea is inspired by Android platform contexts). Context holds all global states (called *context properties*), but could in fact be different for different processes. Most of complicated actions require a context as a parameter. Context not only stores values, but also works as a base for [plugin system](#plugin) and could be used as a [dependency injection](https://en.wikipedia.org/wiki/Dependency_injection) base. Context does not store copies of global values and plugins, instead one context could inherit from another. When some code requests value or plugin from the context, the framework checks if this context contains required feature. If it is present, it is returned. If not and context has a parent, then parent will be requested for the same feature.
|
||||
|
||||
There is only one context that is allowed not to have parent. It is a [singleton](https://en.wikipedia.org/wiki/Singleton_pattern) called `Global`. Global inherits its values directly form system environment. It is possible to load plugins directly to Global (in this case they will be available for all active context), though it is discouraged in large projects. Each context has its own unique name used for distinction and logging.
|
||||
|
||||
The runtime immutability of context is supported via *context locks*. Any runtime object could request to lock context and forbid any changes done to the context. After critical runtime actions are done, object can unlock context back. Context supports unlimited number of simultaneous locks, so it won't be mutable until all locking objects would release it. If one needs to change something in the context while it is locked, the only way to do so is to create an unlocked child context (*fork* it) and work with it.
|
8
src/pages/content/dataforge/docs/framework/framework.md
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
title: "Framework"
|
||||
ordering: [10]
|
||||
label: "framework"
|
||||
version: 1.0
|
||||
published: true
|
||||
---
|
62
src/pages/content/dataforge/docs/framework/navigation.md
Normal file
@ -0,0 +1,62 @@
|
||||
---
|
||||
content_type: "doc_framework"
|
||||
title: "Providers and navigation"
|
||||
ordering: [10,3]
|
||||
label: "navigation"
|
||||
version: 1.0
|
||||
date: 2015-08-27
|
||||
published: true
|
||||
order: 3
|
||||
---
|
||||
### Providers
|
||||
The navigation inside DataForge object hierarchy is done via `Provider` interface. A provider can give access to one of many *targets*. A target is a string that designates specific type of provided object (a type in user understanding, not in computer language one). For given target provider resolves a *name* and returns needed object if it is present (provided).
|
||||
|
||||
### Names
|
||||
The *name* itself could be a plain string or consist of a number of name *tokens* separated by `.` symbol. Multiple name tokens are usually used to describe a name inside tree-like structures. Each of name tokens could also have *query* part enclosed in square brackets: `[]`. The name could look like this:
|
||||
|
||||
```
|
||||
token1.token2[3].token3[key = value]
|
||||
```
|
||||
|
||||
### Paths
|
||||
|
||||
A target and a name could be combined into single string using *path* notation: `<target>::<name>`, where `::` is a target separating symbol. If the provided object is provider itself, then one can use *chain path* notation to access objects provided by it. Chain path consists of path segments separated by `/` symbol. Each of the segments is a fully qualified path. The resolution of chain path begins with the first segment and moves forward until path is fully resolved. If some path names not provided or the objects themselves are not providers, the resolution fails.
|
||||
|
||||
<img src="/images/dataforge/naming.svg" alt="navigation"/>
|
||||
|
||||
### Default targets
|
||||
|
||||
In order to simplify paths, providers could define default targets. If not target is provided (either path string does not contain `::` or it starts with `::`), the default target is used. Also provider can define default chain target, meaning that this target will be used by default in the next path segment.
|
||||
|
||||
For example `Meta` itself is a provider and has two targets: `meta` and `value`. The default target for `Meta` is `meta`, but default chain target is `value`, meaning that chain path `child.grandchild/key` is equivalent of `meta::child.grandchild/value::key` and will point to the value `key` of the node `child.grandchild`.
|
||||
|
||||
<hr>
|
||||
|
||||
**Note** The same result in case of `Meta` could be achieved by some additional ways:
|
||||
|
||||
* `child/meta:grandchild/key` utilizing the fact that each meta in the hierarchy is provider;
|
||||
|
||||
* `value::child.grandchild.key` using value search syntax.
|
||||
|
||||
Still the path `child.grandchild/key` is the preferred way to access values in meta.
|
||||
|
||||
<hr>
|
||||
|
||||
### Restrictions and recommendations
|
||||
|
||||
Due to chain path notation, there are some restrictions on symbols available in names:
|
||||
|
||||
* Symbol `/` is not allowed in names.
|
||||
|
||||
* Symbols `[]` are restricted to queries
|
||||
|
||||
* Symbol `::` allowed in name only if target is explicitly provided. It is strongly discouraged to use it in name.
|
||||
|
||||
* Symbol `.` should be used with care when not using tree structures.
|
||||
|
||||
* DataForge uses `UTF-8` encoding, so it is possible to use any non-ASCII symbols in names.
|
||||
|
||||
|
||||
### Implementation
|
||||
|
||||
<img src="/images/projects/math/gears_animated.gif" alt="in progress"/> This section is under construction
|
26
src/pages/content/dataforge/docs/framework/plugins.md
Normal file
@ -0,0 +1,26 @@
|
||||
---
|
||||
content_type: "doc_framework"
|
||||
title: "Context plugins"
|
||||
label: "plugins"
|
||||
version: 1.0
|
||||
published: true
|
||||
order: 2
|
||||
---
|
||||
|
||||
Plugin system allows to dynamically adjust what modules are used in the specific computation. `Plugin` is an object that could be loaded into the context. Plugins fully support *context inheritance* system, meaning that if requested plugin is not found in current context, the request is moved up to parent context. It is possible to store different instances of the same plugin in child and parent context. In this case actual context plugin will be used (some plugins are able to sense the same plugin in the parent context and use it).
|
||||
|
||||
Context can provide plugins either by its type (class) or by string tag, consisting of plugin group, name and version (using gradle-like notation `<group>:<name>:<version>`).
|
||||
|
||||
<hr>
|
||||
|
||||
**Note:** It is possible to have different plugins implementing the same type in the context. In this case request plugin by type becomes ambiguous. Framework will throw an exception if two ore more plugins satisfy plugin resolution criterion in the same context.
|
||||
|
||||
<hr>
|
||||
|
||||
A plugin has a mutable state, but is automatically locked alongside with owning context. Plugin resolution by default uses Java SPI tool, but it is possible to implement a plugin repository and use it to load plugins.
|
||||
|
||||
<hr>
|
||||
|
||||
**Note:** While most of modules provide their own plugins, there is no rule that module has strictly one plugin. Some modules could export a number of plugins, while some of them could export none.
|
||||
|
||||
<hr>
|
@ -1,5 +1,5 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_main"
|
||||
title: "How to read this documentation"
|
||||
chapter: "howto"
|
||||
label: "how_to_read"
|
||||
@ -7,12 +7,20 @@ version: 1.1
|
||||
date: 2015-09-02
|
||||
published: true
|
||||
order: 1
|
||||
path: /dataforge/docs/
|
||||
---
|
||||
An important feature of DataForge framework is ability to work with [meta-data](#meta).
|
||||
This documentation is automatically generated by [grain](http://sysgears.com/grain/)
|
||||
script from [markdown](https://en.wikipedia.org/wiki/Markdown) and html pieces.
|
||||
Such pieces are called shards. The shard consists of data in one of supported formats and meta-data header.
|
||||
The ordering of shards is automatically inferred from meta-data by the [script](https://bitbucket.org/Altavir/dataforge-grain).
|
||||
An important feature of DataForge framework is ability to work with [meta-data](/dataforge/docs/meta).
|
||||
This documentation is automatically generated by [gatsby](https://www.gatsbyjs.org/)
|
||||
script from [markdown](https://en.wikipedia.org/wiki/Markdown) pages.
|
||||
|
||||
The meta-data of each shards includes version of this precise shard last update date,
|
||||
it's label for reference and ordering information.
|
||||
The meta-data of each page includes version of this precise shard last update date,
|
||||
it's label for reference and ordering information.
|
||||
|
||||
Choose documentation section:
|
||||
* [Meta-data processor](/dataforge/docs/meta)
|
||||
* [Framework](/dataforge/docs/framework)
|
||||
* [Data flow](/dataforge/docs/data_flow)
|
||||
* [Envelopes](/dataforge/docs/envelopes)
|
||||
* [Storage plugin](/dataforge/docs/storage)
|
||||
* [Control plugin](/dataforge/docs/control)
|
||||
* [Language extensions](/dataforge/docs/extensions)
|
@ -1,5 +1,5 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_meta"
|
||||
title: "Configuration"
|
||||
chapter: "meta"
|
||||
ordering: 6
|
||||
@ -7,6 +7,7 @@ label: "configuration"
|
||||
version: 1.0
|
||||
date: 2015-08-27
|
||||
published: true
|
||||
order: 4
|
||||
---
|
||||
The configuration is a very important extension of basic [Meta](#meta_structure) class.
|
||||
It is basically a mutable meta which incorporates
|
||||
|
@ -1,11 +1,12 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_meta"
|
||||
title: "Hidden values"
|
||||
chapter: "meta"
|
||||
ordering: 10
|
||||
label: "hidden_values"
|
||||
version: 1.0
|
||||
published: true
|
||||
order: 5
|
||||
---
|
||||
|
||||
Meta structure supports so-called *hidden* values and nodes. These values and nodes exist in the meta and could be requested either by user or framework, but are not shown by casual listing. These values and nodes are considered *system* and are not intended to be defined by user in most cases.
|
||||
|
@ -1,11 +1,12 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_meta"
|
||||
title: "Meta-data processor"
|
||||
chapter: "meta"
|
||||
label: "meta"
|
||||
version: 2.0
|
||||
date: 2015-08-27
|
||||
published: true
|
||||
order: 1
|
||||
---
|
||||
The main and the most distinguishing feature of DataForge framework is a concept of data analysis as a meta-data processor.
|
||||
First of all, one need to define main terms:
|
||||
|
@ -1,11 +1,12 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_meta"
|
||||
title: "Meta-data composition"
|
||||
chapter: "meta"
|
||||
ordering: 5
|
||||
label: "meta-layers"
|
||||
version: 1.0
|
||||
published: true
|
||||
order: 3
|
||||
---
|
||||
|
||||
An important part of working with meta is *composition*. Let us work with two use-cases:
|
||||
|
@ -1,5 +1,5 @@
|
||||
---
|
||||
content_type: "doc_shard"
|
||||
content_type: "doc_meta"
|
||||
title: "Meta-data object structure"
|
||||
chapter: "meta"
|
||||
ordering: 4
|
||||
@ -7,13 +7,14 @@ label: "meta_structure"
|
||||
version: 1.1
|
||||
date: 2015-08-27
|
||||
published: true
|
||||
order: 2
|
||||
---
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<img src="${img 'meta.svg'}" alt="Meta structure"/>
|
||||
<tr style="height: 400px">
|
||||
<td style="padding: 0; width: 400px">
|
||||
<img src="../../../../../images/dataforge/meta.svg" alt="Meta structure"/>
|
||||
</td>
|
||||
<td>
|
||||
<td style="padding: 0;">
|
||||
<p>
|
||||
The Meta object is a tree-like structure, which can contain other meta objects as branches (which are
|
||||
called
|
||||
|
10
src/pages/content/dataforge/docs/storage/storage.md
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
content_type: doc_storage
|
||||
title: File storage
|
||||
published: true
|
||||
order: 1
|
||||
---
|
||||
|
||||
The `FileStorage` is the default implementation of storage API.
|
||||
|
||||
<img src="/images/projects/math/gears_animated.gif" alt="in progress"/> This section is under construction...
|
@ -1,7 +1,8 @@
|
||||
---
|
||||
content_type: df-index
|
||||
---
|
||||
<h1 style="margin-top: 75px"> Welcome to the DataForge </h1>
|
||||
|
||||
<h1> Welcome to the DataForge </h1>
|
||||
|
||||
### The Dataforge documentation and this site is currently under construction so please be patient and contact developers if you need information.
|
||||
|
||||
@ -9,9 +10,9 @@ Source code could be found at <a href="https://bitbucket.org/Altavir/dataforge">
|
||||
|
||||
Please use <a href="https://bitbucket.org/Altavir/dataforge/issues?status=new&status=open">Issue tracker</a> to report problems or request enhancements.
|
||||
|
||||
For questions no covered by <a href="http://npm.mipt.ru/dataforge/docs.html">documentation</a> please see our <a href="https://groups.google.com/d/forum/dataforge-dev">our Google group</a>.
|
||||
For questions no covered by <a href="http://npm.mipt.ru/dataforge/docs">documentation</a> please see our <a href="https://groups.google.com/d/forum/dataforge-dev">our Google group</a>.
|
||||
|
||||
<hr>
|
||||
<br/>
|
||||
|
||||
# Questions and Answers
|
||||
In this section we will try to cover DataForge main ideas in the form of questions and answers.
|
||||
|
@ -4,7 +4,7 @@ id: iaxo
|
||||
shortTitle: IAXO
|
||||
title: Международная коллаборация IAXO
|
||||
order: 6
|
||||
published: true
|
||||
published: false
|
||||
---
|
||||
|
||||
**IAXO** (International Axion Observatory) - это новое поколение аксионного гелиоскопа, чья основная задача - обнаружение аксионов (или других элементарных частиц), в большом количестве излучаемых ядром Солнца.
|
||||
|
@ -4,6 +4,6 @@ id: spectMatter
|
||||
shortTitle: Спектаторная материя
|
||||
title: Спектаторная материя
|
||||
order: 5
|
||||
published: true
|
||||
published: false
|
||||
---
|
||||
|
||||
|
@ -4,7 +4,7 @@ id: tge/tgf
|
||||
shortTitle: TGE/TGF
|
||||
title: Изучение TGE и TGF
|
||||
order: 4
|
||||
published: true
|
||||
published: false
|
||||
---
|
||||
|
||||
**Наземные гамма-вспышки (TGF) и переходное гамма-излучение (TGE)** - загадочные явления, происходящие в атмосфере и регистрируемые на Земле. Для того чтобы объяснить их, используется механизм **RREA** (Relativistic Runaway Electron Avalanche), который также может объяснить возникновение молний.
|
||||
|
@ -1,31 +0,0 @@
|
||||
import React from "react"
|
||||
|
||||
const DocsPage = () => (
|
||||
<ul class="list-group">
|
||||
<li class="list-group-item" style={{textIndent: `20px`}}><a href="http://npm.mipt.ru/dataforge/docs#how_to_read">1 How to read this documentation</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `20px`}}><a href="http://npm.mipt.ru/dataforge/docs#meta">2 Meta-data processor</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `40px`}}><a href="http://npm.mipt.ru/dataforge/docs#meta_structure">2.1 Meta-data object structure</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `40px`}}><a href="http://npm.mipt.ru/dataforge/docs#meta-layers">2.2 Meta-data composition</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `40px`}}><a href="http://npm.mipt.ru/dataforge/docs#configuration">2.3 Configuration</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `40px`}}><a href="http://npm.mipt.ru/dataforge/docs#hidden_values">2.4 Hidden values</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `20px`}}><a href="http://npm.mipt.ru/dataforge/docs#framework">3 Framework</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `40px`}}><a href="http://npm.mipt.ru/dataforge/docs#context">3.1 Context</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `40px`}}><a href="http://npm.mipt.ru/dataforge/docs#plugins">3.2 Context plugins</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `40px`}}><a href="http://npm.mipt.ru/dataforge/docs#navigation">3.3 Providers and navigation</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `20px`}}><a href="http://npm.mipt.ru/dataforge/docs#data_flow">4 Data flow</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `40px`}}><a href="http://npm.mipt.ru/dataforge/docs#actions">4.1 Push model</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `40px`}}><a href="http://npm.mipt.ru/dataforge/docs#tasks">4.2 Tasks</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `20px`}}><a href="http://npm.mipt.ru/dataforge/docs#envelopes">5 Envelopes</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `40px`}}><a href="http://npm.mipt.ru/dataforge/docs#envelope_format">5.1 Streaming envelope format</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `40px`}}><a href="http://npm.mipt.ru/dataforge/docs#tagless_format">5.2 Tagless envelope format</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `40px`}}><a href="http://npm.mipt.ru/dataforge/docs#envelope_description">5.3 Envelope description</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `20px`}}><a href="http://npm.mipt.ru/dataforge/docs#storage">6 Storage plugin</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `40px`}}><a href="http://npm.mipt.ru/dataforge/docs#file_storage">6.1 File storage</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `20px`}}><a href="http://npm.mipt.ru/dataforge/docs#control">7 Control plugin</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `20px`}}><a href="http://npm.mipt.ru/dataforge/docs#extensions">8 Language extensions</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `40px`}}><a href="http://npm.mipt.ru/dataforge/docs#grind">8.1 GRoovy INteractive Dataforge</a></li>
|
||||
<li class="list-group-item" style={{textIndent: `40px`}}><a href="http://npm.mipt.ru/dataforge/docs#kodex">8.2 KOtlin Dataforge EXtension</a></li>
|
||||
</ul>
|
||||
)
|
||||
|
||||
export default DocsPage
|
42
src/pages/dataforge/docs/control.js
Normal file
@ -0,0 +1,42 @@
|
||||
import React from "react"
|
||||
import { graphql } from "gatsby"
|
||||
import DocsLayout from "../../../components/dataforge/docsLayout"
|
||||
import SideBar from "../../../components/dataforge/sidebar"
|
||||
import "../../../styles/dataforge/sidebar.css"
|
||||
|
||||
const DocsControlPage = ({ data }) => {
|
||||
|
||||
return (
|
||||
<DocsLayout>
|
||||
<div id="docs">
|
||||
<SideBar pageWrapId={"page-wrap"} outerContainerId={"docs"} />
|
||||
<div id="page-wrap">
|
||||
{data.main.nodes.map(main => {
|
||||
const title = main.frontmatter.title;
|
||||
return(
|
||||
<>
|
||||
<h1 style={{marginTop: `25px`}}>{title}</h1>
|
||||
<p style={{marginBottom: `40px`, marginTop: `0`}} dangerouslySetInnerHTML = {{__html: main.html,}}/>
|
||||
</>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</DocsLayout>
|
||||
);
|
||||
}
|
||||
|
||||
export default DocsControlPage
|
||||
|
||||
export const query = graphql`
|
||||
query {
|
||||
main: allMarkdownRemark(filter: {frontmatter: {content_type: {eq: "doc_control"}, published: {eq: true}}},
|
||||
sort: {fields: frontmatter___order, order: ASC}) {
|
||||
nodes {
|
||||
html
|
||||
frontmatter {
|
||||
title
|
||||
}
|
||||
}
|
||||
}
|
||||
}`
|
43
src/pages/dataforge/docs/data_flow.js
Normal file
@ -0,0 +1,43 @@
|
||||
import React from "react"
|
||||
import { graphql } from "gatsby"
|
||||
import DocsLayout from "../../../components/dataforge/docsLayout"
|
||||
import SideBar from "../../../components/dataforge/sidebar"
|
||||
import "../../../styles/dataforge/sidebar.css"
|
||||
|
||||
const DocsDataPage = ({ data }) => {
|
||||
|
||||
return (
|
||||
<DocsLayout>
|
||||
<div id="docs">
|
||||
<SideBar pageWrapId={"page-wrap"} outerContainerId={"docs"} />
|
||||
<div id="page-wrap">
|
||||
{data.main.nodes.map(main => {
|
||||
const title = main.frontmatter.title;
|
||||
return(
|
||||
<div style={{textAlign: `center`}}>
|
||||
<h1 style={{marginTop: `25px`}}>{title}</h1>
|
||||
<p style={{marginBottom: `40px`, marginTop: `0`}} dangerouslySetInnerHTML = {{__html: main.html,}}/>
|
||||
</div>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</DocsLayout>
|
||||
);
|
||||
}
|
||||
|
||||
export default DocsDataPage
|
||||
|
||||
export const query = graphql`
|
||||
query {
|
||||
main: allMarkdownRemark(filter: {frontmatter: {content_type: {eq: "doc_data"}, published: {eq: true}}},
|
||||
sort: {fields: frontmatter___order, order: ASC}) {
|
||||
nodes {
|
||||
html
|
||||
frontmatter {
|
||||
title
|
||||
order
|
||||
}
|
||||
}
|
||||
}
|
||||
}`
|
42
src/pages/dataforge/docs/envelopes.js
Normal file
@ -0,0 +1,42 @@
|
||||
import React from "react"
|
||||
import { graphql } from "gatsby"
|
||||
import DocsLayout from "../../../components/dataforge/docsLayout"
|
||||
import SideBar from "../../../components/dataforge/sidebar"
|
||||
import "../../../styles/dataforge/sidebar.css"
|
||||
|
||||
const DocsEnvelopesPage = ({ data }) => {
|
||||
|
||||
return (
|
||||
<DocsLayout>
|
||||
<div id="docs">
|
||||
<SideBar pageWrapId={"page-wrap"} outerContainerId={"docs"} />
|
||||
<div id="page-wrap">
|
||||
{data.main.nodes.map(main => {
|
||||
const title = main.frontmatter.title;
|
||||
return(
|
||||
<>
|
||||
<h1 style={{marginTop: `25px`}}>{title}</h1>
|
||||
<p style={{marginBottom: `40px`, marginTop: `0`}} dangerouslySetInnerHTML = {{__html: main.html,}}/>
|
||||
</>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</DocsLayout>
|
||||
);
|
||||
}
|
||||
|
||||
export default DocsEnvelopesPage
|
||||
|
||||
export const query = graphql`
|
||||
query {
|
||||
main: allMarkdownRemark(filter: {frontmatter: {content_type: {eq: "doc_env"}, published: {eq: true}}},
|
||||
sort: {fields: frontmatter___order, order: ASC}) {
|
||||
nodes {
|
||||
html
|
||||
frontmatter {
|
||||
title
|
||||
}
|
||||
}
|
||||
}
|
||||
}`
|
42
src/pages/dataforge/docs/extensions.js
Normal file
@ -0,0 +1,42 @@
|
||||
import React from "react"
|
||||
import { graphql } from "gatsby"
|
||||
import DocsLayout from "../../../components/dataforge/docsLayout"
|
||||
import SideBar from "../../../components/dataforge/sidebar"
|
||||
import "../../../styles/dataforge/sidebar.css"
|
||||
|
||||
const DocsExtensionsPage = ({ data }) => {
|
||||
|
||||
return (
|
||||
<DocsLayout>
|
||||
<div id="docs">
|
||||
<SideBar pageWrapId={"page-wrap"} outerContainerId={"docs"} />
|
||||
<div id="page-wrap">
|
||||
{data.main.nodes.map(main => {
|
||||
const title = main.frontmatter.title;
|
||||
return(
|
||||
<>
|
||||
<h1 style={{marginTop: `25px`}}>{title}</h1>
|
||||
<p style={{marginBottom: `40px`, marginTop: `0`}} dangerouslySetInnerHTML = {{__html: main.html,}}/>
|
||||
</>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</DocsLayout>
|
||||
);
|
||||
}
|
||||
|
||||
export default DocsExtensionsPage
|
||||
|
||||
export const query = graphql`
|
||||
query {
|
||||
main: allMarkdownRemark(filter: {frontmatter: {content_type: {eq: "doc_extensions"}, published: {eq: true}}},
|
||||
sort: {fields: frontmatter___order, order: ASC}) {
|
||||
nodes {
|
||||
html
|
||||
frontmatter {
|
||||
title
|
||||
}
|
||||
}
|
||||
}
|
||||
}`
|
42
src/pages/dataforge/docs/framework.js
Normal file
@ -0,0 +1,42 @@
|
||||
import React from "react"
|
||||
import { graphql } from "gatsby"
|
||||
import DocsLayout from "../../../components/dataforge/docsLayout"
|
||||
import SideBar from "../../../components/dataforge/sidebar"
|
||||
import "../../../styles/dataforge/sidebar.css"
|
||||
|
||||
const DocsFrameworkPage = ({ data }) => {
|
||||
|
||||
return (
|
||||
<DocsLayout>
|
||||
<div id="docs">
|
||||
<SideBar pageWrapId={"page-wrap"} outerContainerId={"docs"} />
|
||||
<div id="page-wrap">
|
||||
{data.main.nodes.map(main => {
|
||||
const title = main.frontmatter.title;
|
||||
return(
|
||||
<>
|
||||
<h1 style={{marginTop: `25px`}}>{title}</h1>
|
||||
<p style={{marginBottom: `40px`, marginTop: `0`}} dangerouslySetInnerHTML = {{__html: main.html,}}/>
|
||||
</>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</DocsLayout>
|
||||
);
|
||||
}
|
||||
|
||||
export default DocsFrameworkPage
|
||||
|
||||
export const query = graphql`
|
||||
query {
|
||||
main: allMarkdownRemark(filter: {frontmatter: {content_type: {eq: "doc_framework"}, published: {eq: true}}},
|
||||
sort: {fields: frontmatter___order, order: ASC}) {
|
||||
nodes {
|
||||
html
|
||||
frontmatter {
|
||||
title
|
||||
}
|
||||
}
|
||||
}
|
||||
}`
|
42
src/pages/dataforge/docs/index.js
Normal file
@ -0,0 +1,42 @@
|
||||
import React from "react"
|
||||
import { graphql } from "gatsby"
|
||||
import DocsLayout from "../../../components/dataforge/docsLayout"
|
||||
import SideBar from "../../../components/dataforge/sidebar"
|
||||
import "../../../styles/dataforge/sidebar.css"
|
||||
|
||||
const DocsIndexPage = ({ data }) => {
|
||||
|
||||
return (
|
||||
<DocsLayout>
|
||||
<div id="docs">
|
||||
<SideBar pageWrapId={"page-wrap"} outerContainerId={"docs"} />
|
||||
<div id="page-wrap">
|
||||
{data.main.nodes.map(main => {
|
||||
const title = main.frontmatter.title;
|
||||
return(
|
||||
<>
|
||||
<h1 style={{marginTop: `25px`}}>{title}</h1>
|
||||
<p style={{marginBottom: `40px`}} dangerouslySetInnerHTML = {{__html: main.html,}}/>
|
||||
</>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</DocsLayout>
|
||||
);
|
||||
}
|
||||
|
||||
export default DocsIndexPage
|
||||
|
||||
export const query = graphql`
|
||||
query {
|
||||
main: allMarkdownRemark(filter: {frontmatter: {content_type: {eq: "doc_main"}, published: {eq: true}}},
|
||||
sort: {fields: frontmatter___order, order: ASC}) {
|
||||
nodes {
|
||||
html
|
||||
frontmatter {
|
||||
title
|
||||
}
|
||||
}
|
||||
}
|
||||
}`
|
42
src/pages/dataforge/docs/meta.js
Normal file
@ -0,0 +1,42 @@
|
||||
import React from "react"
|
||||
import { graphql } from "gatsby"
|
||||
import DocsLayout from "../../../components/dataforge/docsLayout"
|
||||
import SideBar from "../../../components/dataforge/sidebar"
|
||||
import "../../../styles/dataforge/sidebar.css"
|
||||
|
||||
const DocsMetaPage = ({ data }) => {
|
||||
|
||||
return (
|
||||
<DocsLayout>
|
||||
<div id="docs">
|
||||
<SideBar pageWrapId={"page-wrap"} outerContainerId={"docs"} />
|
||||
<div id="page-wrap">
|
||||
{data.main.nodes.map(main => {
|
||||
const title = main.frontmatter.title;
|
||||
return(
|
||||
<>
|
||||
<h1 style={{marginTop: `25px`, }}>{title}</h1>
|
||||
<p style={{marginBottom: `40px`, marginTop: `0`}} dangerouslySetInnerHTML = {{__html: main.html,}}/>
|
||||
</>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</DocsLayout>
|
||||
);
|
||||
}
|
||||
|
||||
export default DocsMetaPage
|
||||
|
||||
export const query = graphql`
|
||||
query {
|
||||
main: allMarkdownRemark(filter: {frontmatter: {content_type: {eq: "doc_meta"}, published: {eq: true}}},
|
||||
sort: {fields: frontmatter___order, order: ASC}) {
|
||||
nodes {
|
||||
html
|
||||
frontmatter {
|
||||
title
|
||||
}
|
||||
}
|
||||
}
|
||||
}`
|
42
src/pages/dataforge/docs/storage.js
Normal file
@ -0,0 +1,42 @@
|
||||
import React from "react"
|
||||
import { graphql } from "gatsby"
|
||||
import DocsLayout from "../../../components/dataforge/docsLayout"
|
||||
import SideBar from "../../../components/dataforge/sidebar"
|
||||
import "../../../styles/dataforge/sidebar.css"
|
||||
|
||||
const DocsStoragePage = ({ data }) => {
|
||||
|
||||
return (
|
||||
<DocsLayout>
|
||||
<div id="docs">
|
||||
<SideBar pageWrapId={"page-wrap"} outerContainerId={"docs"} />
|
||||
<div id="page-wrap">
|
||||
{data.main.nodes.map(main => {
|
||||
const title = main.frontmatter.title;
|
||||
return(
|
||||
<>
|
||||
<h1 style={{marginTop: `25px`}}>{title}</h1>
|
||||
<p style={{marginBottom: `40px`, marginTop: `0`}} dangerouslySetInnerHTML = {{__html: main.html,}}/>
|
||||
</>
|
||||
)
|
||||
})}
|
||||
</div>
|
||||
</div>
|
||||
</DocsLayout>
|
||||
);
|
||||
}
|
||||
|
||||
export default DocsStoragePage
|
||||
|
||||
export const query = graphql`
|
||||
query {
|
||||
main: allMarkdownRemark(filter: {frontmatter: {content_type: {eq: "doc_storage"}, published: {eq: true}}},
|
||||
sort: {fields: frontmatter___order, order: ASC}) {
|
||||
nodes {
|
||||
html
|
||||
frontmatter {
|
||||
title
|
||||
}
|
||||
}
|
||||
}
|
||||
}`
|
32
src/styles/dataforge/docs.css
Normal file
@ -0,0 +1,32 @@
|
||||
main#docs {
|
||||
margin-top: 0;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
min-height: 85vh; }
|
||||
|
||||
main#docs p {
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
font-size: 20px;
|
||||
font-weight: 400; }
|
||||
|
||||
main#docs h1 {
|
||||
font-size: 48px;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
font-weight: 500; }
|
||||
|
||||
main#docs h2 {
|
||||
font-size: 43px;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
font-weight: 500; }
|
||||
|
||||
main#docs h3 {
|
||||
font-size: 34px;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
font-size: 500; }
|
||||
|
||||
main#docs a { color: rgb(35, 133, 236); }
|
||||
main#docs a:hover { color: rgb(35, 133, 236); text-decoration: underline; }
|
||||
main#docs a:visited { color: rgb(35, 133, 236); }
|
||||
|
||||
main#docs ul li a { color: rgb(35, 133, 236); }
|
||||
main#docs ul li a:hover { color: rgb(35, 133, 236); }
|
||||
main#docs ul li a:visited { color: rgb(35, 133, 236); }
|
52
src/styles/dataforge/sidebar.css
Normal file
@ -0,0 +1,52 @@
|
||||
main#docs[style="overflow: hidden;"] div#docs div#page-wrap { margin-left: 20px; }
|
||||
#docs {
|
||||
margin-top: 4px;
|
||||
font-family: sans-serif;
|
||||
min-height: 100vh; }
|
||||
|
||||
.bm-overlay { background: rgba(255, 255, 255, 0) !important; }
|
||||
.bm-menu {
|
||||
background: rgb(48,48,48);
|
||||
padding: 50px 0 0 0;
|
||||
font-size: 1.15em;
|
||||
color: white; }
|
||||
|
||||
.bm-item-list { color: #b8b7ad; }
|
||||
main#docs a.bm-item.menu-item#active { color: white; background-color: rgb(36, 35, 35); }
|
||||
main#docs a.bm-item.menu-item:hover { color: white; text-decoration: none; }
|
||||
main#docs a.bm-item.menu-item:visited { color: #d1d1d1 }
|
||||
main#docs a.bm-item.menu-item:visited:hover { color: white; }
|
||||
main#docs a.bm-item.menu-item {
|
||||
display: inline-block;
|
||||
text-decoration: none;
|
||||
padding: 20px;
|
||||
color: #d1d1d1;
|
||||
transition: color 0.2s;
|
||||
outline: none; }
|
||||
|
||||
.bm-cross { background: #bdc3c7; }
|
||||
.bm-cross-button { height: 30px; width: 24px; }
|
||||
|
||||
.bm-burger-bars { background: rgb(48,48,48); }
|
||||
.bm-burger-button:active { outline: none; }
|
||||
.bm-burger-button {
|
||||
position: fixed;
|
||||
width: 36px;
|
||||
height: 30px;
|
||||
left: 36px;
|
||||
top: 36px;
|
||||
margin-top: 70px;
|
||||
outline: none; }
|
||||
|
||||
#page-wrap {
|
||||
position: relative;
|
||||
margin-left: 100px;
|
||||
text-align: left;
|
||||
overflow: auto; }
|
||||
|
||||
/* ----- media ------------------- */
|
||||
@media(max-width: 769px){
|
||||
.bm-burger-button { left: 20px; }
|
||||
#page-wrap { margin-left: 80px; margin-right: 5px; }
|
||||
main#docs h1 { font-size: 40px; }
|
||||
}
|
BIN
static/images/dataforge/actions.png
Normal file
After Width: | Height: | Size: 12 KiB |
196
static/images/dataforge/meta.svg
Normal file
@ -0,0 +1,196 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by Microsoft Visio, SVG Export meta.svg Page-1 -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events"
|
||||
xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="4.59173in" height="5.27184in"
|
||||
viewBox="0 0 330.605 379.573" xml:space="preserve" color-interpolation-filters="sRGB" class="st13">
|
||||
<v:documentProperties v:langID="1033" v:metric="true" v:viewMarkup="false">
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="msvSubprocessMaster" v:prompt="" v:val="VT4(Rectangle)"/>
|
||||
<v:ud v:nameU="msvNoAutoConnect" v:val="VT0(1):26"/>
|
||||
</v:userDefs>
|
||||
</v:documentProperties>
|
||||
|
||||
<style type="text/css">
|
||||
<![CDATA[
|
||||
.st1 {fill:#ffffff;stroke:#ed7d31;stroke-width:0.75}
|
||||
.st2 {fill:#ed7d31;font-family:Calibri;font-size:0.833336em}
|
||||
.st3 {visibility:visible}
|
||||
.st4 {fill:#5b9bd5;fill-opacity:0.25;filter:url(#filter_2);stroke:#5b9bd5;stroke-opacity:0.25}
|
||||
.st5 {fill:#4f87bb;stroke:#40709c;stroke-width:0.75}
|
||||
.st6 {fill:#feffff;font-family:Calibri;font-size:0.833336em}
|
||||
.st7 {marker-end:url(#mrkr4-27);stroke:#5b9bd5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
|
||||
.st8 {fill:#5b9bd5;fill-opacity:1;stroke:#5b9bd5;stroke-opacity:1;stroke-width:0.28409090909091}
|
||||
.st9 {fill:url(#grad0-36);stroke:#61973d;stroke-width:0.75}
|
||||
.st10 {fill:#61973d;font-family:Calibri;font-size:0.833336em}
|
||||
.st11 {fill:#ffffff;stroke:#70ad47;stroke-width:0.75}
|
||||
.st12 {fill:#70ad47;font-family:Calibri;font-size:0.833336em}
|
||||
.st13 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
|
||||
]]>
|
||||
</style>
|
||||
|
||||
<defs id="Patterns_And_Gradients">
|
||||
<linearGradient id="grad0-36" x1="0" y1="0" x2="1" y2="0" gradientTransform="rotate(60 0.5 0.5)">
|
||||
<stop offset="0" stop-color="#ebf1e8" stop-opacity="1"/>
|
||||
<stop offset="0.24" stop-color="#f5f8f4" stop-opacity="1"/>
|
||||
<stop offset="0.54" stop-color="#feffff" stop-opacity="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<defs id="Markers">
|
||||
<g id="lend4">
|
||||
<path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"/>
|
||||
</g>
|
||||
<marker id="mrkr4-27" class="st8" v:arrowType="4" v:arrowSize="2" v:setback="7.04" refX="-7.04" orient="auto"
|
||||
markerUnits="strokeWidth" overflow="visible">
|
||||
<use xlink:href="#lend4" transform="scale(-3.52,-3.52) "/>
|
||||
</marker>
|
||||
</defs>
|
||||
<defs id="Filters">
|
||||
<filter id="filter_2">
|
||||
<feGaussianBlur stdDeviation="2"/>
|
||||
</filter>
|
||||
</defs>
|
||||
<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="msvThemeOrder" v:val="VT0(0):26"/>
|
||||
</v:userDefs>
|
||||
<title>Page-1</title>
|
||||
<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
|
||||
v:shadowOffsetY="-8.50394"/>
|
||||
<v:layer v:name="Connector" v:index="0"/>
|
||||
<g id="shape1-1" v:mID="1" v:groupContext="shape" transform="translate(18.75,-260.958)">
|
||||
<title>Rectangle</title>
|
||||
<desc>Meta</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st1"/>
|
||||
<text x="31.69" y="368.4" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>Meta</text> </g>
|
||||
<g id="shape2-4" v:mID="2" v:groupContext="shape" transform="translate(139.222,-331.824)">
|
||||
<title>Rectangle.2</title>
|
||||
<desc>someValue</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<g id="shadow2-5" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
|
||||
transform="matrix(1,0,0,1,0.345598,1.97279)" class="st3">
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st4"/>
|
||||
</g>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st5"/>
|
||||
<text x="19.95" y="368.4" class="st6" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>someValue</text> </g>
|
||||
<g id="shape3-10" v:mID="3" v:groupContext="shape" transform="translate(139.222,-303.477)">
|
||||
<title>Rectangle.3</title>
|
||||
<desc>otherValue[0]</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<g id="shadow3-11" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
|
||||
transform="matrix(1,0,0,1,0.345598,1.97279)" class="st3">
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st4"/>
|
||||
</g>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st5"/>
|
||||
<text x="14.26" y="368.4" class="st6" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>otherValue[0]</text> </g>
|
||||
<g id="shape4-16" v:mID="4" v:groupContext="shape" transform="translate(223.845,-303.477)">
|
||||
<title>Rectangle.4</title>
|
||||
<desc>otherValue[1]</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<g id="shadow4-17" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
|
||||
transform="matrix(1,0,0,1,0.345598,1.97279)" class="st3">
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st4"/>
|
||||
</g>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st5"/>
|
||||
<text x="14.26" y="368.4" class="st6" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>otherValue[1]</text> </g>
|
||||
<g id="shape5-22" v:mID="5" v:groupContext="shape" v:layerMember="0" transform="translate(61.2697,-289.304)">
|
||||
<title>Dynamic connector</title>
|
||||
<path d="M0 379.57 L0 322.88 L70.91 322.88" class="st7"/>
|
||||
</g>
|
||||
<g id="shape6-28" v:mID="6" v:groupContext="shape" v:layerMember="0" transform="translate(61.2697,-289.304)">
|
||||
<title>Dynamic connector.6</title>
|
||||
<path d="M0 379.57 L0 351.23 L70.91 351.23" class="st7"/>
|
||||
</g>
|
||||
<g id="shape7-33" v:mID="7" v:groupContext="shape" transform="translate(139.222,-210.101)">
|
||||
<title>Rectangle.7</title>
|
||||
<desc>childMeta[0]</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st9"/>
|
||||
<text x="16.42" y="368.4" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>childMeta[0]</text> </g>
|
||||
<g id="shape8-38" v:mID="8" v:groupContext="shape" transform="translate(139.222,-116.724)">
|
||||
<title>Rectangle.8</title>
|
||||
<desc>childValue</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<g id="shadow8-39" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
|
||||
transform="matrix(1,0,0,1,0.345598,1.97279)" class="st3">
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st4"/>
|
||||
</g>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st5"/>
|
||||
<text x="21.36" y="368.4" class="st6" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>childValue</text> </g>
|
||||
<g id="shape9-44" v:mID="9" v:groupContext="shape" transform="translate(223.845,-116.724)">
|
||||
<title>Rectangle.9</title>
|
||||
<desc>grandChild</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st11"/>
|
||||
<text x="20.56" y="368.4" class="st12" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>grandChild</text> </g>
|
||||
<g id="shape10-47" v:mID="10" v:groupContext="shape" transform="translate(223.845,-210.101)">
|
||||
<title>Rectangle.10</title>
|
||||
<desc>childMeta[1]</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st9"/>
|
||||
<text x="16.42" y="368.4" class="st10" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>childMeta[1]</text> </g>
|
||||
<g id="shape11-51" v:mID="11" v:groupContext="shape" v:layerMember="0" transform="translate(61.2697,-260.958)">
|
||||
<title>Dynamic connector.11</title>
|
||||
<path d="M0 379.57 L0 416.26 L70.91 416.26" class="st7"/>
|
||||
</g>
|
||||
<g id="shape12-56" v:mID="12" v:groupContext="shape" v:layerMember="0" transform="translate(174.656,-210.101)">
|
||||
<title>Dynamic connector.12</title>
|
||||
<path d="M7.09 379.57 L7.09 437.56" class="st7"/>
|
||||
</g>
|
||||
<g id="shape13-61" v:mID="13" v:groupContext="shape" v:layerMember="0" transform="translate(259.278,-210.101)">
|
||||
<title>Dynamic connector.13</title>
|
||||
<path d="M7.09 379.57 L7.09 437.56" class="st7"/>
|
||||
</g>
|
||||
<g id="shape14-66" v:mID="14" v:groupContext="shape" transform="translate(223.845,-23.3478)">
|
||||
<title>Rectangle.14</title>
|
||||
<desc>grandChildValue</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="42.5197" cy="365.399" width="85.04" height="28.3465"/>
|
||||
<g id="shadow14-67" v:groupContext="shadow" v:shadowOffsetX="0.345598" v:shadowOffsetY="-1.97279" v:shadowType="1"
|
||||
transform="matrix(1,0,0,1,0.345598,1.97279)" class="st3">
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st4"/>
|
||||
</g>
|
||||
<rect x="0" y="351.226" width="85.0394" height="28.3465" class="st5"/>
|
||||
<text x="9.06" y="368.4" class="st6" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>grandChildValue</text> </g>
|
||||
<g id="shape15-72" v:mID="15" v:groupContext="shape" v:layerMember="0" transform="translate(259.278,-116.724)">
|
||||
<title>Dynamic connector.15</title>
|
||||
<path d="M7.09 379.57 L7.09 437.56" class="st7"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 10 KiB |
BIN
static/images/dataforge/metadata-processor-classic.png
Normal file
After Width: | Height: | Size: 29 KiB |
BIN
static/images/dataforge/metadata-processor.png
Normal file
After Width: | Height: | Size: 20 KiB |
100
static/images/dataforge/naming.svg
Normal file
@ -0,0 +1,100 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<!-- Generated by Microsoft Visio, SVG Export naming.svg Page-1 -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/" width="8.60048in" height="2.35953in"
|
||||
viewBox="0 0 619.235 169.886" xml:space="preserve" color-interpolation-filters="sRGB" class="st9">
|
||||
<v:documentProperties v:langID="1033" v:metric="true" v:viewMarkup="false">
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="msvSubprocessMaster" v:prompt="" v:val="VT4(Rectangle)"/>
|
||||
<v:ud v:nameU="msvNoAutoConnect" v:val="VT0(1):26"/>
|
||||
</v:userDefs>
|
||||
</v:documentProperties>
|
||||
|
||||
<style type="text/css">
|
||||
<![CDATA[
|
||||
.st1 {fill:none;stroke:none;stroke-width:0.25}
|
||||
.st2 {fill:#5b9bd5;font-family:Calibri;font-size:1.5em}
|
||||
.st3 {stroke:#5b9bd5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
|
||||
.st4 {fill:#ffffff;stroke:none;stroke-linecap:butt;stroke-width:7.2}
|
||||
.st5 {fill:#4f87bb;font-family:Calibri;font-size:1.00001em}
|
||||
.st6 {fill:#5b9bd5;font-family:Calibri;font-size:1.00001em}
|
||||
.st7 {marker-end:url(#mrkr4-22);stroke:#5b9bd5;stroke-linecap:round;stroke-linejoin:round;stroke-width:1}
|
||||
.st8 {fill:#5b9bd5;fill-opacity:1;stroke:#5b9bd5;stroke-opacity:1;stroke-width:0.28409090909091}
|
||||
.st9 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
|
||||
]]>
|
||||
</style>
|
||||
|
||||
<defs id="Markers">
|
||||
<g id="lend4">
|
||||
<path d="M 2 1 L 0 0 L 2 -1 L 2 1 " style="stroke:none"/>
|
||||
</g>
|
||||
<marker id="mrkr4-22" class="st8" v:arrowType="4" v:arrowSize="2" v:setback="7.04" refX="-7.04" orient="auto"
|
||||
markerUnits="strokeWidth" overflow="visible">
|
||||
<use xlink:href="#lend4" transform="scale(-3.52,-3.52) "/>
|
||||
</marker>
|
||||
</defs>
|
||||
<g v:mID="0" v:index="1" v:groupContext="foregroundPage">
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="msvThemeOrder" v:val="VT0(0):26"/>
|
||||
</v:userDefs>
|
||||
<title>Page-1</title>
|
||||
<v:pageProperties v:drawingScale="0.0393701" v:pageScale="0.0393701" v:drawingUnits="24" v:shadowOffsetX="8.50394"
|
||||
v:shadowOffsetY="-8.50394"/>
|
||||
<v:layer v:name="Connector" v:index="0"/>
|
||||
<g id="shape1-1" v:mID="1" v:groupContext="shape" transform="translate(18.25,-67.9383)">
|
||||
<title>Sheet.1</title>
|
||||
<desc>target::my.strange[2].path/otherTarget::simplePath/something</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="291.367" cy="159.886" width="582.74" height="20"/>
|
||||
<rect x="0" y="149.886" width="582.735" height="20" class="st1"/>
|
||||
<text x="59.37" y="165.29" class="st2" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>target::my.strange[2].path/otherTarget::simplePath/something</text> </g>
|
||||
<g id="shape2-4" v:mID="2" v:groupContext="shape" transform="translate(269.331,271.833) rotate(180)">
|
||||
<title>Bracket</title>
|
||||
<desc>segment</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(1,3,1,1)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="113.386" cy="155.713" width="70.87" height="70.8661" transform="rotate(180)"/>
|
||||
<path d="M0 169.89 A4.01075 4.01075 0 0 1 3.54 166.34 L94.47 166.34 A4.01075 4.01075 -180 0 0 98.01 162.8 A4.01075 4.01075
|
||||
-180 0 0 101.55 166.34 L189.05 166.34 A4.01075 4.01075 0 0 1 192.59 169.89" class="st3"/>
|
||||
<rect v:rectContext="textBkgnd" x="-123.147" y="-162.913" width="42.1938" height="14.4001" transform="rotate(180)"
|
||||
class="st4"/>
|
||||
<text x="-123.15" y="-152.11" transform="rotate(180)" class="st5" v:langID="1033"><v:paragraph v:horizAlign="2"/><v:tabList/>segment</text> </g>
|
||||
<g id="shape5-9" v:mID="5" v:groupContext="shape" transform="translate(132.601,-87.9383)">
|
||||
<title>Bracket.5</title>
|
||||
<desc>name</desc>
|
||||
<v:userDefs>
|
||||
<v:ud v:nameU="visVersion" v:val="VT0(15):26"/>
|
||||
</v:userDefs>
|
||||
<v:textBlock v:margins="rect(1,3,1,1)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="54.7602" cy="155.713" width="70.87" height="70.8661"/>
|
||||
<path d="M0 169.89 A4.01075 4.01075 0 0 1 3.54 166.34 L68.59 166.34 A4.01075 4.01075 -180 0 0 72.13 162.8 A4.01075 4.01075
|
||||
-180 0 0 75.67 166.34 L138.19 166.34 A4.01075 4.01075 0 0 1 141.73 169.89" class="st3"/>
|
||||
<rect v:rectContext="textBkgnd" x="59.5835" y="148.512" width="27.6097" height="14.4001" class="st4"/>
|
||||
<text x="59.58" y="159.31" class="st5" v:langID="1033"><v:paragraph v:horizAlign="2"/><v:tabList/>name</text> </g>
|
||||
<g id="shape11-14" v:mID="11" v:groupContext="shape" transform="translate(269.331,-131.636)">
|
||||
<title>Sheet.11</title>
|
||||
<desc>target</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="76" cy="159.886" width="152" height="20"/>
|
||||
<rect x="0" y="149.886" width="152" height="20" class="st1"/>
|
||||
<text x="61.21" y="163.49" class="st6" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>target</text> </g>
|
||||
<g id="shape13-17" v:mID="13" v:groupContext="shape" v:layerMember="0" transform="translate(340.197,-131.636)">
|
||||
<title>Dynamic connector</title>
|
||||
<path d="M0 169.89 L-24.52 207.68" class="st7"/>
|
||||
</g>
|
||||
<g id="shape14-23" v:mID="14" v:groupContext="shape" transform="translate(411.063,-18.25)">
|
||||
<title>Sheet.14</title>
|
||||
<desc>default target</desc>
|
||||
<v:textBlock v:margins="rect(4,4,4,4)" v:tabSpace="42.5197"/>
|
||||
<v:textRect cx="76" cy="159.886" width="152" height="20"/>
|
||||
<rect x="0" y="149.886" width="152" height="20" class="st1"/>
|
||||
<text x="42.47" y="163.49" class="st6" v:langID="1033"><v:paragraph v:horizAlign="1"/><v:tabList/>default target</text> </g>
|
||||
<g id="shape16-26" v:mID="16" v:groupContext="shape" v:layerMember="0" transform="translate(481.929,-38.25)">
|
||||
<title>Dynamic connector.16</title>
|
||||
<path d="M0 169.89 L-11.14 146.55" class="st7"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 5.8 KiB |
BIN
static/images/dataforge/sms_logo.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
static/images/dataforge/tasks.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
static/images/index/logo_white.png
Normal file
After Width: | Height: | Size: 147 KiB |