Added: tinkerpop/site/docs/4.0.0-beta.1/reference/index.html URL: http://svn.apache.org/viewvc/tinkerpop/site/docs/4.0.0-beta.1/reference/index.html?rev=1923192&view=auto ============================================================================== --- tinkerpop/site/docs/4.0.0-beta.1/reference/index.html (added) +++ tinkerpop/site/docs/4.0.0-beta.1/reference/index.html Fri Jan 17 22:45:40 2025 @@ -0,0 +1,32590 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<meta charset="UTF-8"> +<meta http-equiv="X-UA-Compatible" content="IE=edge"> +<meta name="viewport" content="width=device-width, initial-scale=1.0"> +<meta name="generator" content="Asciidoctor 2.0.18"> +<title>TinkerPop Documentation</title> +<style> +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +/*! normalize.css v2.1.2 | MIT License | git.io/normalize */ +/* ========================================================================== HTML5 display definitions ========================================================================== */ +/** Correct `block` display not defined in IE 8/9. */ +@import url(http://cdnjs.cloudflare.com/ajax/libs/font-awesome/3.2.1/css/font-awesome.css); +article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; } + +/** Correct `inline-block` display not defined in IE 8/9. */ +audio, canvas, video { display: inline-block; } + +/** Prevent modern browsers from displaying `audio` without controls. Remove excess height in iOS 5 devices. */ +audio:not([controls]) { display: none; height: 0; } + +/** Address `[hidden]` styling not present in IE 8/9. Hide the `template` element in IE, Safari, and Firefox < 22. */ +[hidden], template { display: none; } + +script { display: none !important; } + +/* ========================================================================== Base ========================================================================== */ +/** 1. Set default font family to sans-serif. 2. Prevent iOS text size adjust after orientation change, without disabling user zoom. */ +html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ } + +/** Remove default margin. */ +body { margin: 0; } + +/* ========================================================================== Links ========================================================================== */ +/** Remove the gray background color from active links in IE 10. */ +a { background: transparent; } + +/** Address `outline` inconsistency between Chrome and other browsers. */ +a:focus { outline: thin dotted; } + +/** Improve readability when focused and also mouse hovered in all browsers. */ +a:active, a:hover { outline: 0; } + +/* ========================================================================== Typography ========================================================================== */ +/** Address variable `h1` font-size and margin within `section` and `article` contexts in Firefox 4+, Safari 5, and Chrome. */ +h1 { font-size: 2em; margin: 0.67em 0; } + +/** Address styling not present in IE 8/9, Safari 5, and Chrome. */ +abbr[title] { border-bottom: 1px dotted; } + +/** Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. */ +b, strong { font-weight: bold; } + +/** Address styling not present in Safari 5 and Chrome. */ +dfn { font-style: italic; } + +/** Address differences between Firefox and other browsers. */ +hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } + +/** Address styling not present in IE 8/9. */ +mark { background: #ff0; color: #000; } + +/** Correct font family set oddly in Safari 5 and Chrome. */ +code, kbd, pre, samp { font-family: monospace, serif; font-size: 1em; } + +/** Improve readability of pre-formatted text in all browsers. */ +pre { white-space: pre-wrap; } + +/** Set consistent quote types. */ +q { quotes: "\201C" "\201D" "\2018" "\2019"; } + +/** Address inconsistent and variable font size in all browsers. */ +small { font-size: 80%; } + +/** Prevent `sub` and `sup` affecting `line-height` in all browsers. */ +sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } + +sup { top: -0.5em; } + +sub { bottom: -0.25em; } + +/* ========================================================================== Embedded content ========================================================================== */ +/** Remove border when inside `a` element in IE 8/9. */ +img { border: 0; } + +/** Correct overflow displayed oddly in IE 9. */ +svg:not(:root) { overflow: hidden; } + +/* ========================================================================== Figures ========================================================================== */ +/** Address margin not present in IE 8/9 and Safari 5. */ +figure { margin: 0; } + +/* ========================================================================== Forms ========================================================================== */ +/** Define consistent border, margin, and padding. */ +fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; } + +/** 1. Correct `color` not being inherited in IE 8/9. 2. Remove padding so people aren't caught out if they zero out fieldsets. */ +legend { border: 0; /* 1 */ padding: 0; /* 2 */ } + +/** 1. Correct font family not being inherited in all browsers. 2. Correct font size not being inherited in all browsers. 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. */ +button, input, select, textarea { font-family: inherit; /* 1 */ font-size: 100%; /* 2 */ margin: 0; /* 3 */ } + +/** Address Firefox 4+ setting `line-height` on `input` using `!important` in the UA stylesheet. */ +button, input { line-height: normal; } + +/** Address inconsistent `text-transform` inheritance for `button` and `select`. All other form control elements do not inherit `text-transform` values. Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. Correct `select` style inheritance in Firefox 4+ and Opera. */ +button, select { text-transform: none; } + +/** 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. 2. Correct inability to style clickable `input` types in iOS. 3. Improve usability and consistency of cursor style between image-type `input` and others. */ +button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; /* 2 */ cursor: pointer; /* 3 */ } + +/** Re-set default cursor for disabled elements. */ +button[disabled], html input[disabled] { cursor: default; } + +/** 1. Address box sizing set to `content-box` in IE 8/9. 2. Remove excess padding in IE 8/9. */ +input[type="checkbox"], input[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */ } + +/** 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome (include `-moz` to future-proof). */ +input[type="search"] { -webkit-appearance: textfield; /* 1 */ -moz-box-sizing: content-box; -webkit-box-sizing: content-box; /* 2 */ box-sizing: content-box; } + +/** Remove inner padding and search cancel button in Safari 5 and Chrome on OS X. */ +input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; } + +/** Remove inner padding and border in Firefox 4+. */ +button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; } + +/** 1. Remove default vertical scrollbar in IE 8/9. 2. Improve readability and alignment in all browsers. */ +textarea { overflow: auto; /* 1 */ vertical-align: top; /* 2 */ } + +/* ========================================================================== Tables ========================================================================== */ +/** Remove most spacing between table cells. */ +table { border-collapse: collapse; border-spacing: 0; } + +meta.foundation-mq-small { font-family: "only screen and (min-width: 768px)"; width: 768px; } + +meta.foundation-mq-medium { font-family: "only screen and (min-width:1280px)"; width: 1280px; } + +meta.foundation-mq-large { font-family: "only screen and (min-width:1440px)"; width: 1440px; } + +*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } + +html, body { font-size: 100%; } + +body { background: white; color: #222222; padding: 0; margin: 0; font-family: "Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif; font-weight: normal; font-style: normal; line-height: 1; position: relative; cursor: auto; } + +a:hover { cursor: pointer; } + +img, object, embed { max-width: 100%; height: auto; } + +object, embed { height: 100%; } + +img { -ms-interpolation-mode: bicubic; } + +#map_canvas img, #map_canvas embed, #map_canvas object, .map_canvas img, .map_canvas embed, .map_canvas object { max-width: none !important; } + +.left { float: left !important; } + +.right { float: right !important; } + +.text-left { text-align: left !important; } + +.text-right { text-align: right !important; } + +.text-center { text-align: center !important; } + +.text-justify { text-align: justify !important; } + +.hide { display: none; } + +.antialiased, body { -webkit-font-smoothing: antialiased; } + +img { display: inline-block; vertical-align: middle; } + +textarea { height: auto; min-height: 50px; } + +select { width: 100%; } + +p.lead, .paragraph.lead > p, #preamble > .sectionbody > .paragraph:first-of-type p { font-size: 1.21875em; line-height: 1.6; } + +.subheader, #content #toctitle, .admonitionblock td.content > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .mathblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, .sidebarblock > .title, .tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title, .tableblock > caption { line-height: 1.4; color: #6c818f; font-weight: 300; margin-top: 0.2em; margin-bottom: 0.5em; } + +/* Typography resets */ +div, dl, dt, dd, ul, ol, li, h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6, pre, form, p, blockquote, th, td { margin: 0; padding: 0; direction: ltr; } + +/* Default Link Styles */ +a { color: #444444; text-decoration: underline; line-height: inherit; } +a:hover, a:focus { color: #111111; } +a img { border: none; } + +/* Default paragraph styles */ +p { font-family: inherit; font-weight: normal; font-size: 1em; line-height: 1.5; margin-bottom: 1.25em; text-rendering: optimizeLegibility; } +p aside { font-size: 0.875em; line-height: 1.35; font-style: italic; } + +/* Default header styles */ +h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { font-family: ff-meta-web-pro-1, ff-meta-web-pro-2, Arial, "Helvetica Neue", sans-serif; font-weight: bold; font-style: normal; color: #465158; text-rendering: optimizeLegibility; margin-top: 1em; margin-bottom: 0.5em; line-height: 1.2125em; } +h1 small, h2 small, h3 small, #toctitle small, .sidebarblock > .content > .title small, h4 small, h5 small, h6 small { font-size: 60%; color: #909ea7; line-height: 0; } + +h1 { font-size: 2.125em; } + +h2 { font-size: 1.6875em; } + +h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.375em; } + +h4 { font-size: 1.125em; } + +h5 { font-size: 1.125em; } + +h6 { font-size: 1em; } + +hr { border: solid #dddddd; border-width: 1px 0 0; clear: both; margin: 1.25em 0 1.1875em; height: 0; } + +/* Helpful Typography Defaults */ +em, i { font-style: italic; line-height: inherit; } + +strong, b { font-weight: bold; line-height: inherit; } + +small { font-size: 60%; line-height: inherit; } + +code { font-family: "Consolas", "Deja Vu Sans Mono", "Bitstream Vera Sans Mono", monospace; font-weight: normal; color: #444444; } + +/* Lists */ +ul, ol, dl { font-size: 1em; line-height: 1.5; margin-bottom: 1.25em; list-style-position: outside; font-family: inherit; } + +ul, ol { margin-left: 0; } +ul.no-bullet, ol.no-bullet { margin-left: 0; } + +/* Unordered Lists */ +ul li ul, ul li ol { margin-left: 1.25em; margin-bottom: 0; font-size: 1em; /* Override nested font-size change */ } +ul.square li ul, ul.circle li ul, ul.disc li ul { list-style: inherit; } +ul.square { list-style-type: square; } +ul.circle { list-style-type: circle; } +ul.disc { list-style-type: disc; } +ul.no-bullet { list-style: none; } + +/* Ordered Lists */ +ol li ul, ol li ol { margin-left: 1.25em; margin-bottom: 0; } + +/* Definition Lists */ +dl dt { margin-bottom: 0.3em; font-weight: bold; } +dl dd { margin-bottom: 0.75em; } + +/* Abbreviations */ +abbr, acronym { text-transform: uppercase; font-size: 90%; color: black; border-bottom: 1px dotted #dddddd; cursor: help; } + +abbr { text-transform: none; } + +/* Blockquotes */ +blockquote { margin: 0 0 1.25em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #dddddd; } +blockquote cite { display: block; font-size: 0.8125em; color: #748590; } +blockquote cite:before { content: "\2014 \0020"; } +blockquote cite a, blockquote cite a:visited { color: #748590; } + +blockquote, blockquote p { line-height: 1.5; color: #909ea7; } + +/* Microformats */ +.vcard { display: inline-block; margin: 0 0 1.25em 0; border: 1px solid #dddddd; padding: 0.625em 0.75em; } +.vcard li { margin: 0; display: block; } +.vcard .fn { font-weight: bold; font-size: 0.9375em; } + +.vevent .summary { font-weight: bold; } +.vevent abbr { cursor: auto; text-decoration: none; font-weight: bold; border: none; padding: 0 0.0625em; } + +@media only screen and (min-width: 768px) { h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 { line-height: 1.4; } + h1 { font-size: 2.75em; } + h2 { font-size: 2.3125em; } + h3, #toctitle, .sidebarblock > .content > .title { font-size: 1.6875em; } + h4 { font-size: 1.4375em; } } +/* Print styles. Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/ Credit to Paul Irish and HTML5 Boilerplate (html5boilerplate.com) +*/ +.print-only { display: none !important; } + +@media print { * { background: transparent !important; color: #000 !important; /* Black prints faster: h5bp.com/s */ box-shadow: none !important; text-shadow: none !important; } + a, a:visited { text-decoration: underline; } + a[href]:after { content: " (" attr(href) ")"; } + abbr[title]:after { content: " (" attr(title) ")"; } + .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; } + pre, blockquote { border: 1px solid #999; page-break-inside: avoid; } + thead { display: table-header-group; /* h5bp.com/t */ } + tr, img { page-break-inside: avoid; } + img { max-width: 100% !important; } + @page { margin: 0.5cm; } + p, h2, h3, #toctitle, .sidebarblock > .content > .title { orphans: 3; widows: 3; } + h2, h3, #toctitle, .sidebarblock > .content > .title { page-break-after: avoid; } + .hide-on-print { display: none !important; } + .print-only { display: block !important; } + .hide-for-print { display: none !important; } + .show-for-print { display: inherit !important; } } +/* Tables */ +table { background: white; margin-bottom: 1.25em; border: solid 0 #dddddd; } +table thead, table tfoot { background: none; font-weight: bold; } +table thead tr th, table thead tr td, table tfoot tr th, table tfoot tr td { padding: 1px 8px 1px 5px; font-size: 1em; color: #222222; text-align: left; } +table tr th, table tr td { padding: 1px 8px 1px 5px; font-size: 1em; color: #222222; } +table tr.even, table tr.alt, table tr:nth-of-type(even) { background: none; } +table thead tr th, table tfoot tr th, table tbody tr td, table tr td, table tfoot tr td { display: table-cell; line-height: 1.5; } + +.clearfix:before, .clearfix:after, .float-group:before, .float-group:after { content: " "; display: table; } +.clearfix:after, .float-group:after { clear: both; } + +*:not(pre) > code { font-size: 0.95em; padding: 0; white-space: nowrap; background-color: #f2f2f2; border: 0 solid #dddddd; -webkit-border-radius: 6px; border-radius: 6px; text-shadow: none; } + +pre, pre > code { line-height: 1.2; color: inherit; font-family: "Consolas", "Deja Vu Sans Mono", "Bitstream Vera Sans Mono", monospace; font-weight: normal; } + +.keyseq { color: #333333; } + +kbd:not(.keyseq) { display: inline-block; color: black; font-size: 0.75em; line-height: 1.4; background-color: #F7F7F7; border: 1px solid #ccc; -webkit-border-radius: 3px; border-radius: 3px; -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 0 0 2px white inset; margin: -0.15em 0.15em 0 0.15em; padding: 0.2em 0.6em 0.2em 0.5em; vertical-align: middle; white-space: nowrap; } + +.keyseq kbd:first-child { margin-left: 0; } + +.keyseq kbd:last-child { margin-right: 0; } + +.menuseq, .menu { color: black; } + +b.button:before, b.button:after { position: relative; top: -1px; font-weight: normal; } + +b.button:before { content: "["; padding: 0 3px 0 2px; } + +b.button:after { content: "]"; padding: 0 2px 0 3px; } + +p a > code:hover { color: #373737; } + +#header, #content, #footnotes, #footer { width: 100%; margin-left: auto; margin-right: auto; margin-top: 0; margin-bottom: 0; max-width: 62.5em; *zoom: 1; position: relative; padding-left: 0.9375em; padding-right: 0.9375em; } +#header:before, #header:after, #content:before, #content:after, #footnotes:before, #footnotes:after, #footer:before, #footer:after { content: " "; display: table; } +#header:after, #content:after, #footnotes:after, #footer:after { clear: both; } + +#header { margin-bottom: 2.5em; } +#header > h1 { color: #111111; font-weight: bold; border-bottom: 1px solid #dddddd; margin-bottom: -28px; padding-bottom: 32px; } +#header span { color: #909ea7; } +#header #revnumber { text-transform: capitalize; } +#header br { display: none; } +#header br + span { padding-left: 3px; } +#header br + span:before { content: "\2013 \0020"; } +#header br + span.author { padding-left: 0; } +#header br + span.author:before { content: ", "; } + +#toc { border-bottom: 1px solid #dddddd; padding-bottom: 1.25em; } +#toc > ul { margin-left: 0.25em; } +#toc ul.sectlevel0 > li > a { font-style: italic; } +#toc ul.sectlevel0 ul.sectlevel1 { margin-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; } +#toc ul { list-style-type: none; } + +#toctitle { color: #6c818f; } + +@media only screen and (min-width: 768px) { body.toc2 { padding-left: 15em; padding-right: 0; } + #toc.toc2 { position: fixed; width: 15em; left: 0; top: 0; border-right: 1px solid #dddddd; border-bottom: 0; z-index: 1000; padding: 1em; height: 100%; overflow: auto; } + #toc.toc2 #toctitle { margin-top: 0; font-size: 1.2em; } + #toc.toc2 > ul { font-size: .90em; } + #toc.toc2 ul ul { margin-left: 0; padding-left: 1em; } + #toc.toc2 ul.sectlevel0 ul.sectlevel1 { padding-left: 0; margin-top: 0.5em; margin-bottom: 0.5em; } + body.toc2.toc-right { padding-left: 0; padding-right: 15em; } + body.toc2.toc-right #toc.toc2 { border-right: 0; border-left: 1px solid #dddddd; left: auto; right: 0; } } +@media only screen and (min-width: 1280px) { body.toc2 { padding-left: 20em; padding-right: 0; } + #toc.toc2 { width: 20em; } + #toc.toc2 #toctitle { font-size: 1.375em; } + #toc.toc2 > ul { font-size: 0.95em; } + #toc.toc2 ul ul { padding-left: 1.25em; } + body.toc2.toc-right { padding-left: 0; padding-right: 20em; } } +#content #toc { border-style: solid; border-width: 1px; border-color: #d9d9d9; margin-bottom: 1.25em; padding: 1.25em; background: #f2f2f2; border-width: 0; -webkit-border-radius: 6px; border-radius: 6px; } +#content #toc > :first-child { margin-top: 0; } +#content #toc > :last-child { margin-bottom: 0; } +#content #toc a { text-decoration: none; } + +#content #toctitle { font-weight: bold; font-family: ff-meta-web-pro-1, ff-meta-web-pro-2, Arial, "Helvetica Neue", sans-serif; font-size: 1em; padding-left: 0.125em; } + +#footer { max-width: 100%; background-color: black; padding: 1.25em; } + +#footer-text { color: white; line-height: 1.35; } + +.sect1 { padding-bottom: 1.25em; } + +.sect1 + .sect1 { border-top: 1px solid #dddddd; } + +#content h1 > a.anchor, h2 > a.anchor, h3 > a.anchor, #toctitle > a.anchor, .sidebarblock > .content > .title > a.anchor, h4 > a.anchor, h5 > a.anchor, h6 > a.anchor { position: absolute; width: 1em; margin-left: -1em; display: block; text-decoration: none; visibility: hidden; text-align: center; font-weight: normal; } +#content h1 > a.anchor:before, h2 > a.anchor:before, h3 > a.anchor:before, #toctitle > a.anchor:before, .sidebarblock > .content > .title > a.anchor:before, h4 > a.anchor:before, h5 > a.anchor:before, h6 > a.anchor:before { content: '\00A7'; font-size: .85em; vertical-align: text-top; display: block; margin-top: 0.05em; } +#content h1:hover > a.anchor, #content h1 > a.anchor:hover, h2:hover > a.anchor, h2 > a.anchor:hover, h3:hover > a.anchor, #toctitle:hover > a.anchor, .sidebarblock > .content > .title:hover > a.anchor, h3 > a.anchor:hover, #toctitle > a.anchor:hover, .sidebarblock > .content > .title > a.anchor:hover, h4:hover > a.anchor, h4 > a.anchor:hover, h5:hover > a.anchor, h5 > a.anchor:hover, h6:hover > a.anchor, h6 > a.anchor:hover { visibility: visible; } +#content h1 > a.link, h2 > a.link, h3 > a.link, #toctitle > a.link, .sidebarblock > .content > .title > a.link, h4 > a.link, h5 > a.link, h6 > a.link { color: #465158; text-decoration: none; } +#content h1 > a.link:hover, h2 > a.link:hover, h3 > a.link:hover, #toctitle > a.link:hover, .sidebarblock > .content > .title > a.link:hover, h4 > a.link:hover, h5 > a.link:hover, h6 > a.link:hover { color: #3b444a; } + +.imageblock, .literalblock, .listingblock, .mathblock, .verseblock, .videoblock { margin-bottom: 1.25em; } + +.admonitionblock td.content > .title, .exampleblock > .title, .imageblock > .title, .listingblock > .title, .literalblock > .title, .mathblock > .title, .openblock > .title, .paragraph > .title, .quoteblock > .title, .sidebarblock > .title, .tableblock > .title, .verseblock > .title, .videoblock > .title, .dlist > .title, .olist > .title, .ulist > .title, .qlist > .title, .hdlist > .title { text-align: left; font-weight: bold; } + +.tableblock > caption { text-align: left; font-weight: bold; white-space: nowrap; overflow: visible; max-width: 0; } + +table.tableblock #preamble > .sectionbody > .paragraph:first-of-type p { font-size: inherit; } + +.admonitionblock > table { border: 0; background: none; width: 100%; } +.admonitionblock > table td.icon { text-align: center; width: 80px; } +.admonitionblock > table td.icon img { max-width: none; } +.admonitionblock > table td.icon .title { font-weight: bold; text-transform: uppercase; } +.admonitionblock > table td.content { padding-left: 1.125em; padding-right: 1.25em; border-left: 1px solid #dddddd; color: #909ea7; } +.admonitionblock > table td.content > :last-child > :last-child { margin-bottom: 0; } + +.exampleblock > .content { border-style: solid; border-width: 1px; border-color: #e6e6e6; margin-bottom: 1.25em; padding: 1.25em; background: white; -webkit-border-radius: 6px; border-radius: 6px; } +.exampleblock > .content > :first-child { margin-top: 0; } +.exampleblock > .content > :last-child { margin-bottom: 0; } +.exampleblock > .content h1, .exampleblock > .content h2, .exampleblock > .content h3, .exampleblock > .content #toctitle, .sidebarblock.exampleblock > .content > .title, .exampleblock > .content h4, .exampleblock > .content h5, .exampleblock > .content h6, .exampleblock > .content p { color: #333333; } +.exampleblock > .content h1, .exampleblock > .content h2, .exampleblock > .content h3, .exampleblock > .content #toctitle, .sidebarblock.exampleblock > .content > .title, .exampleblock > .content h4, .exampleblock > .content h5, .exampleblock > .content h6 { line-height: 1; margin-bottom: 0.625em; } +.exampleblock > .content h1.subheader, .exampleblock > .content h2.subheader, .exampleblock > .content h3.subheader, .exampleblock > .content .subheader#toctitle, .sidebarblock.exampleblock > .content > .subheader.title, .exampleblock > .content h4.subheader, .exampleblock > .content h5.subheader, .exampleblock > .content h6.subheader { line-height: 1.4; } + +.exampleblock.result > .content { -webkit-box-shadow: 0 1px 8px #d9d9d9; box-shadow: 0 1px 8px #d9d9d9; } + +.sidebarblock { border-style: solid; border-width: 1px; border-color: #d9d9d9; margin-bottom: 1.25em; padding: 1.25em; background: #f2f2f2; -webkit-border-radius: 6px; border-radius: 6px; } +.sidebarblock > :first-child { margin-top: 0; } +.sidebarblock > :last-child { margin-bottom: 0; } +.sidebarblock h1, .sidebarblock h2, .sidebarblock h3, .sidebarblock #toctitle, .sidebarblock > .content > .title, .sidebarblock h4, .sidebarblock h5, .sidebarblock h6, .sidebarblock p { color: #333333; } +.sidebarblock h1, .sidebarblock h2, .sidebarblock h3, .sidebarblock #toctitle, .sidebarblock > .content > .title, .sidebarblock h4, .sidebarblock h5, .sidebarblock h6 { line-height: 1; margin-bottom: 0.625em; } +.sidebarblock h1.subheader, .sidebarblock h2.subheader, .sidebarblock h3.subheader, .sidebarblock .subheader#toctitle, .sidebarblock > .content > .subheader.title, .sidebarblock h4.subheader, .sidebarblock h5.subheader, .sidebarblock h6.subheader { line-height: 1.4; } +.sidebarblock > .content > .title { color: #6c818f; margin-top: 0; line-height: 1.5; } + +.exampleblock > .content > :last-child > :last-child, .exampleblock > .content .olist > ol > li:last-child > :last-child, .exampleblock > .content .ulist > ul > li:last-child > :last-child, .exampleblock > .content .qlist > ol > li:last-child > :last-child, .sidebarblock > .content > :last-child > :last-child, .sidebarblock > .content .olist > ol > li:last-child > :last-child, .sidebarblock > .content .ulist > ul > li:last-child > :last-child, .sidebarblock > .content .qlist > ol > li:last-child > :last-child { margin-bottom: 0; } + +.literalblock pre:not([class]), .listingblock pre:not([class]) { background: #eeeeee; } +.literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { border-width: 1px; border-style: solid; border-color: #cccccc; -webkit-border-radius: 6px; border-radius: 6px; padding: 0.5em; word-wrap: break-word; } +.literalblock pre.nowrap, .literalblock pre[class].nowrap, .listingblock pre.nowrap, .listingblock pre[class].nowrap { overflow-x: auto; white-space: pre; word-wrap: normal; } +.literalblock pre > code, .literalblock pre[class] > code, .listingblock pre > code, .listingblock pre[class] > code { display: block; } +@media only screen { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.76em; } } +@media only screen and (min-width: 768px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.855em; } } +@media only screen and (min-width: 1280px) { .literalblock pre, .literalblock pre[class], .listingblock pre, .listingblock pre[class] { font-size: 0.95em; } } + +.listingblock pre.highlight { padding: 0; } +.listingblock pre.highlight > code { padding: 0.5em; } + +.listingblock > .content { position: relative; } + +.listingblock:hover code[class*=" language-"]:before { text-transform: uppercase; font-size: 0.9em; color: #999; position: absolute; top: 0.375em; right: 0.375em; } + +.listingblock:hover code.asciidoc:before { content: "asciidoc"; } +.listingblock:hover code.clojure:before { content: "clojure"; } +.listingblock:hover code.css:before { content: "css"; } +.listingblock:hover code.groovy:before { content: "groovy"; } +.listingblock:hover code.html:before { content: "html"; } +.listingblock:hover code.java:before { content: "java"; } +.listingblock:hover code.javascript:before { content: "javascript"; } +.listingblock:hover code.python:before { content: "python"; } +.listingblock:hover code.ruby:before { content: "ruby"; } +.listingblock:hover code.sass:before { content: "sass"; } +.listingblock:hover code.scss:before { content: "scss"; } +.listingblock:hover code.xml:before { content: "xml"; } +.listingblock:hover code.yaml:before { content: "yaml"; } + +.listingblock.terminal pre .command:before { content: attr(data-prompt); padding-right: 0.5em; color: #999; } + +.listingblock.terminal pre .command:not([data-prompt]):before { content: '$'; } + +table.pyhltable { border: 0; margin-bottom: 0; } + +table.pyhltable td { vertical-align: top; padding-top: 0; padding-bottom: 0; } + +table.pyhltable td.code { padding-left: .75em; padding-right: 0; } + +.highlight.pygments .lineno, table.pyhltable td:not(.code) { color: #999; padding-left: 0; padding-right: .5em; border-right: 1px solid #dddddd; } + +.highlight.pygments .lineno { display: inline-block; margin-right: .25em; } + +table.pyhltable .linenodiv { background-color: transparent !important; padding-right: 0 !important; } + +.quoteblock { margin: 0 0 1.25em; padding: 0.5625em 1.25em 0 1.1875em; border-left: 1px solid #dddddd; } +.quoteblock blockquote { margin: 0 0 1.25em 0; padding: 0 0 0.5625em 0; border: 0; } +.quoteblock blockquote > .paragraph:last-child p { margin-bottom: 0; } +.quoteblock .attribution { margin-top: -.25em; padding-bottom: 0.5625em; font-size: 0.8125em; color: #748590; } +.quoteblock .attribution br { display: none; } +.quoteblock .attribution cite { display: block; margin-bottom: 0.625em; } + +table thead th, table tfoot th { font-weight: bold; } + +table.tableblock.grid-all { border-collapse: separate; border-spacing: 1px; -webkit-border-radius: 6px; border-radius: 6px; border-top: 0 solid #dddddd; border-bottom: 0 solid #dddddd; } + +table.tableblock.frame-topbot, table.tableblock.frame-none { border-left: 0; border-right: 0; } + +table.tableblock.frame-sides, table.tableblock.frame-none { border-top: 0; border-bottom: 0; } + +table.tableblock td .paragraph:last-child p > p:last-child, table.tableblock th > p:last-child, table.tableblock td > p:last-child { margin-bottom: 0; } + +th.tableblock.halign-left, td.tableblock.halign-left { text-align: left; } + +th.tableblock.halign-right, td.tableblock.halign-right { text-align: right; } + +th.tableblock.halign-center, td.tableblock.halign-center { text-align: center; } + +th.tableblock.valign-top, td.tableblock.valign-top { vertical-align: top; } + +th.tableblock.valign-bottom, td.tableblock.valign-bottom { vertical-align: bottom; } + +th.tableblock.valign-middle, td.tableblock.valign-middle { vertical-align: middle; } + +tbody tr th { display: table-cell; line-height: 1.5; background: none; } + +tbody tr th, tbody tr th p, tfoot tr th, tfoot tr th p { color: #222222; font-weight: bold; } + +td > div.verse { white-space: pre; } + +ol { margin-left: 0.25em; } + +ul li ol { margin-left: 0; } + +dl dd { margin-left: 1.125em; } + +dl dd:last-child, dl dd:last-child > :last-child { margin-bottom: 0; } + +ol > li p, ul > li p, ul dd, ol dd, .olist .olist, .ulist .ulist, .ulist .olist, .olist .ulist { margin-bottom: 0.625em; } + +ul.unstyled, ol.unnumbered, ul.checklist, ul.none { list-style-type: none; } + +ul.unstyled, ol.unnumbered, ul.checklist { margin-left: 0.625em; } + +ul.checklist li > p:first-child > i[class^="icon-check"]:first-child, ul.checklist li > p:first-child > input[type="checkbox"]:first-child { margin-right: 0.25em; } + +ul.checklist li > p:first-child > input[type="checkbox"]:first-child { position: relative; top: 1px; } + +ul.inline { margin: 0 auto 0.625em auto; margin-left: -1.375em; margin-right: 0; padding: 0; list-style: none; overflow: hidden; } +ul.inline > li { list-style: none; float: left; margin-left: 1.375em; display: block; } +ul.inline > li > * { display: block; } + +.unstyled dl dt { font-weight: normal; font-style: normal; } + +ol.arabic { list-style-type: decimal; } + +ol.decimal { list-style-type: decimal-leading-zero; } + +ol.loweralpha { list-style-type: lower-alpha; } + +ol.upperalpha { list-style-type: upper-alpha; } + +ol.lowerroman { list-style-type: lower-roman; } + +ol.upperroman { list-style-type: upper-roman; } + +ol.lowergreek { list-style-type: lower-greek; } + +.hdlist > table, .colist > table { border: 0; background: none; } +.hdlist > table > tbody > tr, .colist > table > tbody > tr { background: none; } + +td.hdlist1 { padding-right: .75em; font-weight: bold; } + +td.hdlist1, td.hdlist2 { vertical-align: top; } + +.literalblock + .colist, .listingblock + .colist { margin-top: -0.5em; } + +.colist > table tr > td:first-of-type { padding: 0 .75em; line-height: 1; } +.colist > table tr > td:last-of-type { padding: 0.25em 0; } + +.qanda > ol > li > p > em:only-child { color: #373737; } + +.thumb, .th { line-height: 0; display: inline-block; border: solid 4px white; -webkit-box-shadow: 0 0 0 1px #dddddd; box-shadow: 0 0 0 1px #dddddd; } + +.imageblock.left, .imageblock[style*="float: left"] { margin: 0.25em 0.625em 1.25em 0; } +.imageblock.right, .imageblock[style*="float: right"] { margin: 0.25em 0 1.25em 0.625em; } +.imageblock > .title { margin-bottom: 0; } +.imageblock.thumb, .imageblock.th { border-width: 6px; } +.imageblock.thumb > .title, .imageblock.th > .title { padding: 0 0.125em; } + +.image.left, .image.right { margin-top: 0.25em; margin-bottom: 0.25em; display: inline-block; line-height: 0; } +.image.left { margin-right: 0.625em; } +.image.right { margin-left: 0.625em; } + +a.image { text-decoration: none; } + +span.footnote, span.footnoteref { vertical-align: super; font-size: 0.875em; } +span.footnote a, span.footnoteref a { text-decoration: none; } + +#footnotes { padding-top: 0.75em; padding-bottom: 0.75em; margin-bottom: 0.625em; } +#footnotes hr { width: 20%; min-width: 6.25em; margin: -.25em 0 .75em 0; border-width: 1px 0 0 0; } +#footnotes .footnote { padding: 0 0.375em; line-height: 1.3; font-size: 0.875em; margin-left: 1.2em; text-indent: -1.2em; margin-bottom: .2em; } +#footnotes .footnote a:first-of-type { font-weight: bold; text-decoration: none; } +#footnotes .footnote:last-of-type { margin-bottom: 0; } + +#content #footnotes { margin-top: -0.625em; margin-bottom: 0; padding: 0.75em 0; } + +.gist .file-data > table { border: none; background: #fff; width: 100%; margin-bottom: 0; } +.gist .file-data > table td.line-data { width: 99%; } + +div.unbreakable { page-break-inside: avoid; } + +.big { font-size: larger; } + +.small { font-size: smaller; } + +.underline { text-decoration: underline; } + +.overline { text-decoration: overline; } + +.line-through { text-decoration: line-through; } + +.aqua { color: #00bfbf; } + +.aqua-background { background-color: #00fafa; } + +.black { color: black; } + +.black-background { background-color: black; } + +.blue { color: #0000bf; } + +.blue-background { background-color: #0000fa; } + +.fuchsia { color: #bf00bf; } + +.fuchsia-background { background-color: #fa00fa; } + +.gray { color: #606060; } + +.gray-background { background-color: #7d7d7d; } + +.green { color: #006000; } + +.green-background { background-color: #007d00; } + +.lime { color: #00bf00; } + +.lime-background { background-color: #00fa00; } + +.maroon { color: #600000; } + +.maroon-background { background-color: #7d0000; } + +.navy { color: #000060; } + +.navy-background { background-color: #00007d; } + +.olive { color: #606000; } + +.olive-background { background-color: #7d7d00; } + +.purple { color: #600060; } + +.purple-background { background-color: #7d007d; } + +.red { color: #bf0000; } + +.red-background { background-color: #fa0000; } + +.silver { color: #909090; } + +.silver-background { background-color: #bcbcbc; } + +.teal { color: #006060; } + +.teal-background { background-color: #007d7d; } + +.white { color: #bfbfbf; } + +.white-background { background-color: #fafafa; } + +.yellow { color: #bfbf00; } + +.yellow-background { background-color: #fafa00; } + +span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } + +.admonitionblock td.icon [class^="icon-"]:before { font-size: 2.5em; text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.5); cursor: default; } +.admonitionblock td.icon .icon-note:before { content: "\f05a"; color: #444444; color: #333333; } +.admonitionblock td.icon .icon-tip:before { content: "\f0eb"; text-shadow: 1px 1px 2px rgba(155, 155, 0, 0.8); color: #111; } +.admonitionblock td.icon .icon-warning:before { content: "\f071"; color: #bf6900; } +.admonitionblock td.icon .icon-caution:before { content: "\f06d"; color: #bf3400; } +.admonitionblock td.icon .icon-important:before { content: "\f06a"; color: #bf0000; } + +.conum { display: inline-block; color: white !important; background-color: black; -webkit-border-radius: 100px; border-radius: 100px; text-align: center; width: 20px; height: 20px; font-size: 12px; font-weight: bold; line-height: 20px; font-family: Arial, sans-serif; font-style: normal; position: relative; top: -2px; letter-spacing: -1px; } +.conum * { color: white !important; } +.conum + b { display: none; } +.conum:after { content: attr(data-value); } +.conum:not([data-value]):empty { display: none; } + +.listingblock code { white-space: pre; overflow: auto; overflow-wrap: normal; /* needed for webkit browsers */ } + +#toc ul.sectlevel0 > li > a { font-style: normal; font-weight: bold; } + +h4 { color: #6c818f; } + +.literalblock > .content > pre, .listingblock > .content > pre { -webkit-border-radius: 6px; border-radius: 6px; margin-left: 2em; margin-right: 2em; } + +.admonitionblock { margin-left: 2em; margin-right: 2em; } +.admonitionblock > table { border: 1px solid #609060; border-top-width: 1.5em; background-color: #e9ffe9; border-collapse: separate; -webkit-border-radius: 0; border-radius: 0; } +.admonitionblock > table td.icon { padding-top: .5em; padding-bottom: .5em; } +.admonitionblock > table td.content { padding: .5em 1em; color: black; font-size: .9em; border-left: none; } + +.sidebarblock { background-color: #e8ecef; border-color: #ccc; } +.sidebarblock > .content > .title { color: #444444; } + +table.tableblock.grid-all { border-collapse: collapse; -webkit-border-radius: 0; border-radius: 0; } +table.tableblock.grid-all th.tableblock, table.tableblock.grid-all td.tableblock { border-bottom: 1px solid #aaa; } + +#footer { background-color: #465158; padding: 2em; } + +#footer-text { color: #eee; font-size: 0.8em; text-align: center; } +.tabs{position:relative;margin:40px auto;width:1024px;max-width:100%;overflow:hidden;padding-top:10px;margin-bottom:60px}.tabs input{position:absolute;z-index:1000;height:50px;left:0;top:0;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);cursor:pointer;margin:0}.tabs input:hover+label{background:#e08f24}.tabs label{background:#e9ffe9;color:#1a1a1a;font-size:15px;line-height:50px;height:60px;position:relative;top:0;padding:0 20px;float:left;display:block;letter-spacing:1px;text-transform:uppercase;font-weight:bold;text-align:center;box-shadow:2px 0 2px rgba(0,0,0,0.1),-2px 0 2px rgba(0,0,0,0.1);box-sizing:border-box;-webkit-transition:all 150ms ease 0s;transition:all 150ms ease 0s}.tabs label:hover{cursor:pointer}.tabs label:after{content:'';background:#609060;position:absolute;bottom:-2px;left:0;width:100%;height:2px;display:block}.tabs-2 input{width:50%}.tabs-2 input.tab-selector-1{left:0%}.tabs-2 input.tab-selector-2{left:50%}.tabs- 2 label{width:50%}.tabs-3 input{width:33.3333333333%}.tabs-3 input.tab-selector-1{left:0%}.tabs-3 input.tab-selector-2{left:33.3333333333%}.tabs-3 input.tab-selector-3{left:66.6666666667%}.tabs-3 label{width:33.3333333333%}.tabs-4 input{width:25%}.tabs-4 input.tab-selector-1{left:0%}.tabs-4 input.tab-selector-2{left:25%}.tabs-4 input.tab-selector-3{left:50%}.tabs-4 input.tab-selector-4{left:75%}.tabs-4 label{width:25%}.tabs-5 input{width:20%}.tabs-5 input.tab-selector-1{left:0%}.tabs-5 input.tab-selector-2{left:20%}.tabs-5 input.tab-selector-3{left:40%}.tabs-5 input.tab-selector-4{left:60%}.tabs-5 input.tab-selector-5{left:80%}.tabs-5 label{width:20%}.tabs-6 input{width:16.6666666667%}.tabs-6 input.tab-selector-1{left:0%}.tabs-6 input.tab-selector-2{left:16.6666666667%}.tabs-6 input.tab-selector-3{left:33.3333333333%}.tabs-6 input.tab-selector-4{left:50%}.tabs-6 input.tab-selector-5{left:66.6666666667%}.tabs-6 input.tab-selector-6{left:83.3333333333%}.tabs-6 label{width:16.666666666 7%}.tabs-7 input{width:14.2857142857%}.tabs-7 input.tab-selector-1{left:0%}.tabs-7 input.tab-selector-2{left:14.2857142857%}.tabs-7 input.tab-selector-3{left:28.5714285714%}.tabs-7 input.tab-selector-4{left:42.8571428571%}.tabs-7 input.tab-selector-5{left:57.1428571429%}.tabs-7 input.tab-selector-6{left:71.4285714286%}.tabs-7 input.tab-selector-7{left:85.7142857143%}.tabs-7 label{width:14.2857142857%}.tabs label:first-of-type{z-index:4}.tab-label-2{z-index:4}.tab-label-3{z-index:3}.tab-label-4{z-index:2}.tabs input:checked+label{background:#609060;color:#fefefe;z-index:6}.clear-shadow{clear:both}.tabcontent{height:auto;width:100%;float:left;position:relative;z-index:5;background:#eee;top:-10px;box-sizing:border-box}.tabcontent>div{position:relative;float:left;width:0;height:0;box-sizing:border-box;top:0;left:0;z-index:1;opacity:0;background:#eee}.tabcontent .CodeRay{background-color:#fefefe}.tabs .tab-selector-1:checked ~ .tabcontent .tabcontent-1{z-index:100;-ms-filter:"progid:DXIm ageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}.tabs .tab-selector-2:checked ~ .tabcontent .tabcontent-2{z-index:100;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}.tabs .tab-selector-3:checked ~ .tabcontent .tabcontent-3{z-index:100;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}.tabs .tab-selector-4:checked ~ .tabcontent .tabcontent-4{z-index:100;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}.tabs .tab-selector-5:checked ~ .tabcontent .tabcontent-5{z-index:100;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(o pacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}.tabs .tab-selector-6:checked ~ .tabcontent .tabcontent-6{z-index:100;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px}.tabs .tab-selector-7:checked ~ .tabcontent .tabcontent-7{z-index:100;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";filter:alpha(opacity=100);opacity:1;width:100%;height:auto;width:100%;height:auto;padding-top:30px} + +.invisible {color: rgba(0,0,0,0); font-size: 0;} +</style> +<style> +/*! Stylesheet for CodeRay to loosely match GitHub themes | MIT License */ +pre.CodeRay{background:#f7f7f8} +.CodeRay .line-numbers{border-right:1px solid;opacity:.35;padding:0 .5em 0 0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +.CodeRay span.line-numbers{display:inline-block;margin-right:.75em} +.CodeRay .line-numbers strong{color:#000} +table.CodeRay{border-collapse:separate;border:0;margin-bottom:0;background:none} +table.CodeRay td{vertical-align:top;line-height:inherit} +table.CodeRay td.line-numbers{text-align:right} +table.CodeRay td.code{padding:0 0 0 .75em} +.CodeRay .debug{color:#fff!important;background:navy!important} +.CodeRay .annotation{color:#007} +.CodeRay .attribute-name{color:navy} +.CodeRay .attribute-value{color:#700} +.CodeRay .binary{color:#509} +.CodeRay .comment{color:#998;font-style:italic} +.CodeRay .char{color:#04d} +.CodeRay .char .content{color:#04d} +.CodeRay .char .delimiter{color:#039} +.CodeRay .class{color:#458;font-weight:bold} +.CodeRay .complex{color:#a08} +.CodeRay .constant,.CodeRay .predefined-constant{color:teal} +.CodeRay .color{color:#099} +.CodeRay .class-variable{color:#369} +.CodeRay .decorator{color:#b0b} +.CodeRay .definition{color:#099} +.CodeRay .delimiter{color:#000} +.CodeRay .doc{color:#970} +.CodeRay .doctype{color:#34b} +.CodeRay .doc-string{color:#d42} +.CodeRay .escape{color:#666} +.CodeRay .entity{color:#800} +.CodeRay .error{color:#808} +.CodeRay .exception{color:inherit} +.CodeRay .filename{color:#099} +.CodeRay .function{color:#900;font-weight:bold} +.CodeRay .global-variable{color:teal} +.CodeRay .hex{color:#058} +.CodeRay .integer,.CodeRay .float{color:#099} +.CodeRay .include{color:#555} +.CodeRay .inline{color:#000} +.CodeRay .inline .inline{background:#ccc} +.CodeRay .inline .inline .inline{background:#bbb} +.CodeRay .inline .inline-delimiter{color:#d14} +.CodeRay .inline-delimiter{color:#d14} +.CodeRay .important{color:#555;font-weight:bold} +.CodeRay .interpreted{color:#b2b} +.CodeRay .instance-variable{color:teal} +.CodeRay .label{color:#970} +.CodeRay .local-variable{color:#963} +.CodeRay .octal{color:#40e} +.CodeRay .predefined{color:#369} +.CodeRay .preprocessor{color:#579} +.CodeRay .pseudo-class{color:#555} +.CodeRay .directive{font-weight:bold} +.CodeRay .type{font-weight:bold} +.CodeRay .predefined-type{color:inherit} +.CodeRay .reserved,.CodeRay .keyword{color:#000;font-weight:bold} +.CodeRay .key{color:#808} +.CodeRay .key .delimiter{color:#606} +.CodeRay .key .char{color:#80f} +.CodeRay .value{color:#088} +.CodeRay .regexp .delimiter{color:#808} +.CodeRay .regexp .content{color:#808} +.CodeRay .regexp .modifier{color:#808} +.CodeRay .regexp .char{color:#d14} +.CodeRay .regexp .function{color:#404;font-weight:bold} +.CodeRay .string{color:#d20} +.CodeRay .string .string .string{background:#ffd0d0} +.CodeRay .string .content{color:#d14} +.CodeRay .string .char{color:#d14} +.CodeRay .string .delimiter{color:#d14} +.CodeRay .shell{color:#d14} +.CodeRay .shell .delimiter{color:#d14} +.CodeRay .symbol{color:#990073} +.CodeRay .symbol .content{color:#a60} +.CodeRay .symbol .delimiter{color:#630} +.CodeRay .tag{color:teal} +.CodeRay .tag-special{color:#d70} +.CodeRay .variable{color:#036} +.CodeRay .insert{background:#afa} +.CodeRay .delete{background:#faa} +.CodeRay .change{color:#aaf;background:#007} +.CodeRay .head{color:#f8f;background:#505} +.CodeRay .insert .insert{color:#080} +.CodeRay .delete .delete{color:#800} +.CodeRay .change .change{color:#66f} +.CodeRay .head .head{color:#f4f} +</style> +<!-- +--> +<!-- Matomo --> +<script> + var _paq = window._paq = window._paq || []; + /* We explicitly disable cookie tracking to avoid privacy issues */ + _paq.push(['disableCookies']); + /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ + _paq.push(['trackPageView']); + _paq.push(['enableLinkTracking']); + (function() { + var u="https://analytics.apache.org/"; + _paq.push(['setTrackerUrl', u+'matomo.php']); + _paq.push(['setSiteId', '27']); + var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; + g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); + })(); +</script> +<!-- End Matomo Code --> +</head> +<body class="book toc2 toc-left"> +<div id="header"> +<div id="toc" class="toc2"> +<div id="toctitle">Table of Contents</div> +<ul class="sectlevel0"> +<li><a href="#_tinkerpop_documentation">TinkerPop Documentation</a></li> +<li><a href="#preface">Preface</a> +<ul class="sectlevel1"> +<li><a href="#_tinkerpop0">TinkerPop0</a></li> +<li><a href="#_tinkerpop1">TinkerPop1</a></li> +<li><a href="#_tinkerpop2">TinkerPop2</a></li> +<li><a href="#_tinkerpop3">TinkerPop3</a></li> +</ul> +</li> +<li><a href="#intro">Introduction</a> +<ul class="sectlevel1"> +<li><a href="#graph-computing">Graph Computing</a> +<ul class="sectlevel2"> +<li><a href="#graph-structure">The Graph Structure</a></li> +<li><a href="#the-graph-process">The Graph Process</a> +<ul class="sectlevel3"> +<li><a href="#_the_traverser">The Traverser</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#connecting-gremlin">Connecting Gremlin</a> +<ul class="sectlevel2"> +<li><a href="#connecting-embedded">Embedded</a></li> +<li><a href="#connecting-gremlin-server">Gremlin Server</a> +<ul class="sectlevel3"> +<li><a href="#connecting-gremlin-server-limitations">Limitations</a></li> +</ul> +</li> +<li><a href="#connecting-rgp">Remote Gremlin Provider</a></li> +</ul> +</li> +<li><a href="#basic-gremlin">Basic Gremlin</a></li> +<li><a href="#staying-agnostic">Staying Agnostic</a></li> +</ul> +</li> +<li><a href="#graph">The Graph</a> +<ul class="sectlevel1"> +<li><a href="#_features">Features</a></li> +<li><a href="#vertex-properties">Vertex Properties</a></li> +<li><a href="#_graph_variables">Graph Variables</a></li> +<li><a href="#_namespace_conventions">Namespace Conventions</a></li> +</ul> +</li> +<li><a href="#traversal">The Traversal</a> +<ul class="sectlevel1"> +<li><a href="#transactions">Traversal Transactions</a> +<ul class="sectlevel2"> +<li><a href="#tx-embedded">Embedded</a> +<ul class="sectlevel3"> +<li><a href="#_configuring">Configuring</a></li> +</ul> +</li> +<li><a href="#tx-gremlin-server">Gremlin Server</a></li> +<li><a href="#tx-rgp">Remote Gremlin Providers</a></li> +</ul> +</li> +<li><a href="#configuration-steps">Configuration Steps</a> +<ul class="sectlevel2"> +<li><a href="#configuration-steps-with">With Configuration</a></li> +<li><a href="#configuration-steps-withbulk">WithBulk Configuration</a></li> +<li><a href="#configuration-steps-withcomputer">WithComputer Configuration</a></li> +<li><a href="#configuration-steps-withsack">WithSack Configuration</a></li> +<li><a href="#configuration-steps-withsideeffect">WithSideEffect Configuration</a></li> +<li><a href="#configuration-steps-withstrategies">WithStrategies Configuration</a></li> +<li><a href="#configuration-steps-withoutstrategies">WithoutStrategies Configuration</a></li> +</ul> +</li> +<li><a href="#start-steps">Start Steps</a></li> +<li><a href="#graph-traversal-steps">Graph Traversal Steps</a> +<ul class="sectlevel2"> +<li><a href="#general-steps">General Steps</a></li> +<li><a href="#terminal-steps">Terminal Steps</a></li> +<li><a href="#addedge-step">AddE Step</a></li> +<li><a href="#addvertex-step">AddV Step</a></li> +<li><a href="#aggregate-step">Aggregate Step</a></li> +<li><a href="#all-step">All Step</a></li> +<li><a href="#and-step">And Step</a></li> +<li><a href="#any-step">Any Step</a></li> +<li><a href="#as-step">As Step</a></li> +<li><a href="#asString-step">AsString Step</a></li> +<li><a href="#asDate-step">AsDate Step</a></li> +<li><a href="#barrier-step">Barrier Step</a></li> +<li><a href="#branch-step">Branch Step</a></li> +<li><a href="#by-step">By Step</a></li> +<li><a href="#call-step">Call Step</a></li> +<li><a href="#cap-step">Cap Step</a></li> +<li><a href="#choose-step">Choose Step</a></li> +<li><a href="#coalesce-step">Coalesce Step</a></li> +<li><a href="#coin-step">Coin Step</a></li> +<li><a href="#combine-step">Combine Step</a></li> +<li><a href="#concat-step">Concat Step</a></li> +<li><a href="#conjoin-step">Conjoin Step</a></li> +<li><a href="#connectedcomponent-step">ConnectedComponent Step</a></li> +<li><a href="#constant-step">Constant Step</a></li> +<li><a href="#count-step">Count Step</a></li> +<li><a href="#cyclicpath-step">CyclicPath Step</a></li> +<li><a href="#dateAdd-step">DateAdd Step</a></li> +<li><a href="#dateDiff-step">DateDiff Step</a></li> +<li><a href="#dedup-step">Dedup Step</a></li> +<li><a href="#difference-step">Difference Step</a></li> +<li><a href="#discard-step">Discard Step</a></li> +<li><a href="#disjunct-step">Disjunct Step</a></li> +<li><a href="#drop-step">Drop Step</a></li> +<li><a href="#e-step">E Step</a></li> +<li><a href="#element-step">Element Step</a></li> +<li><a href="#elementmap-step">ElementMap Step</a></li> +<li><a href="#emit-step">Emit Step</a></li> +<li><a href="#explain-step">Explain Step</a></li> +<li><a href="#fail-step">Fail Step</a></li> +<li><a href="#filter-step">Filter Step</a></li> +<li><a href="#flatmap-step">FlatMap Step</a></li> +<li><a href="#format-step">Format Step</a></li> +<li><a href="#fold-step">Fold Step</a></li> +<li><a href="#from-step">From Step</a></li> +<li><a href="#group-step">Group Step</a></li> +<li><a href="#groupcount-step">GroupCount Step</a></li> +<li><a href="#has-step">Has Step</a></li> +<li><a href="#id-step">Id Step</a></li> +<li><a href="#identity-step">Identity Step</a></li> +<li><a href="#index-step">Index Step</a></li> +<li><a href="#inject-step">Inject Step</a></li> +<li><a href="#intersect-step">Intersect Step</a></li> +<li><a href="#io-step">IO Step</a> +<ul class="sectlevel3"> +<li><a href="#graphml">GraphML</a></li> +<li><a href="#graphson">GraphSON</a></li> +<li><a href="#gryo">Gryo</a></li> +</ul> +</li> +<li><a href="#is-step">Is Step</a></li> +<li><a href="#key-step">Key Step</a></li> +<li><a href="#label-step">Label Step</a></li> +<li><a href="#length-step">Length Step</a></li> +<li><a href="#limit-step">Limit Step</a></li> +<li><a href="#local-step">Local Step</a></li> +<li><a href="#loops-step">Loops Step</a></li> +<li><a href="#lTrim-step">LTrim Step</a></li> +<li><a href="#map-step">Map Step</a></li> +<li><a href="#match-step">Match Step</a> +<ul class="sectlevel3"> +<li><a href="#using-where-with-match">Using Where with Match</a></li> +</ul> +</li> +<li><a href="#math-step">Math Step</a></li> +<li><a href="#max-step">Max Step</a></li> +<li><a href="#mean-step">Mean Step</a></li> +<li><a href="#merge-step">Merge Step</a></li> +<li><a href="#mergeedge-step">MergeEdge Step</a></li> +<li><a href="#mergevertex-step">MergeVertex Step</a></li> +<li><a href="#min-step">Min Step</a></li> +<li><a href="#none-step">None Step</a></li> +<li><a href="#not-step">Not Step</a></li> +<li><a href="#option-step">Option Step</a></li> +<li><a href="#optional-step">Optional Step</a></li> +<li><a href="#or-step">Or Step</a></li> +<li><a href="#order-step">Order Step</a></li> +<li><a href="#pagerank-step">PageRank Step</a></li> +<li><a href="#path-step">Path Step</a> +<ul class="sectlevel3"> +<li><a href="#path-data-structure">Path Data Structure</a></li> +</ul> +</li> +<li><a href="#peerpressure-step">PeerPressure Step</a></li> +<li><a href="#product-step">Product Step</a></li> +<li><a href="#profile-step">Profile Step</a></li> +<li><a href="#project-step">Project Step</a></li> +<li><a href="#program-step">Program Step</a></li> +<li><a href="#properties-step">Properties Step</a></li> +<li><a href="#property-step">Property Step</a></li> +<li><a href="#propertymap-step">PropertyMap Step</a></li> +<li><a href="#range-step">Range Step</a></li> +<li><a href="#read-step">Read Step</a></li> +<li><a href="#repeat-step">Repeat Step</a></li> +<li><a href="#replace-step">Replace Step</a></li> +<li><a href="#reverse-step">Reverse Step</a></li> +<li><a href="#rTrim-step">RTrim Step</a></li> +<li><a href="#sack-step">Sack Step</a></li> +<li><a href="#sample-step">Sample Step</a></li> +<li><a href="#select-step">Select Step</a> +<ul class="sectlevel3"> +<li><a href="#using-where-with-select">Using Where with Select</a></li> +</ul> +</li> +<li><a href="#shortestpath-step">ShortestPath step</a></li> +<li><a href="#sideeffect-step">SideEffect Step</a></li> +<li><a href="#simplepath-step">SimplePath Step</a></li> +<li><a href="#skip-step">Skip Step</a></li> +<li><a href="#split-step">Split Step</a></li> +<li><a href="#subgraph-step">Subgraph Step</a></li> +<li><a href="#substring-step">Substring Step</a></li> +<li><a href="#sum-step">Sum Step</a></li> +<li><a href="#tail-step">Tail Step</a></li> +<li><a href="#timelimit-step">TimeLimit Step</a></li> +<li><a href="#to-step">To Step</a></li> +<li><a href="#toLower-step">ToLower Step</a></li> +<li><a href="#toUpper-step">ToUpper Step</a></li> +<li><a href="#tree-step">Tree Step</a></li> +<li><a href="#trim-step">Trim Step</a></li> +<li><a href="#unfold-step">Unfold Step</a></li> +<li><a href="#union-step">Union Step</a></li> +<li><a href="#until-step">Until Step</a></li> +<li><a href="#v-step">V Step</a></li> +<li><a href="#value-step">Value Step</a></li> +<li><a href="#valuemap-step">ValueMap Step</a></li> +<li><a href="#values-step">Values Step</a></li> +<li><a href="#vertex-steps">Vertex Steps</a></li> +<li><a href="#where-step">Where Step</a></li> +<li><a href="#with-step">With Step</a></li> +<li><a href="#write-step">Write Step</a></li> +</ul> +</li> +<li><a href="#traversal-parameterization">Traversal Parameterization</a></li> +<li><a href="#a-note-on-predicates">A Note on Predicates</a></li> +<li><a href="#a-note-on-barrier-steps">A Note on Barrier Steps</a></li> +<li><a href="#a-note-on-scopes">A Note on Scopes</a></li> +<li><a href="#a-note-on-lambdas">A Note On Lambdas</a></li> +<li><a href="#traversalstrategy">TraversalStrategy</a> +<ul class="sectlevel2"> +<li><a href="#_application">Application</a></li> +<li><a href="#_definition">Definition</a></li> +<li><a href="#_edgelabelverificationstrategy">EdgeLabelVerificationStrategy</a></li> +<li><a href="#_elementidstrategy">ElementIdStrategy</a></li> +<li><a href="#_eventstrategy">EventStrategy</a></li> +<li><a href="#partitionstrategy">PartitionStrategy</a></li> +<li><a href="#readonlystrategy">ReadOnlyStrategy</a></li> +<li><a href="#_reservedkeysverificationstrategy">ReservedKeysVerificationStrategy</a></li> +<li><a href="#_seedstrategy">SeedStrategy</a></li> +<li><a href="#subraphstrategy">SubgraphStrategy</a></li> +<li><a href="#_vertexprogramdenystrategy">VertexProgramDenyStrategy</a></li> +</ul> +</li> +<li><a href="#dsl">Domain Specific Languages</a></li> +<li><a href="#translators">Translators</a></li> +</ul> +</li> +<li><a href="#graphcomputer">The GraphComputer</a> +<ul class="sectlevel1"> +<li><a href="#vertexprogram">VertexProgram</a></li> +<li><a href="#mapreduce">MapReduce</a></li> +<li><a href="#_a_collection_of_vertexprograms">A Collection of VertexPrograms</a> +<ul class="sectlevel2"> +<li><a href="#pagerankvertexprogram">PageRankVertexProgram</a></li> +<li><a href="#peerpressurevertexprogram">PeerPressureVertexProgram</a></li> +<li><a href="#connectedcomponentvertexprogram">ConnectedComponentVertexProgram</a></li> +<li><a href="#shortestpathvertexprogram">ShortestPathVertexProgram</a></li> +<li><a href="#clonevertexprogram">CloneVertexProgram</a></li> +<li><a href="#traversalvertexprogram">TraversalVertexProgram</a> +<ul class="sectlevel3"> +<li><a href="#distributed-gremlin-gotchas">Distributed Gremlin Gotchas</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#graph-filter">Graph Filter</a></li> +</ul> +</li> +<li><a href="#gremlin-applications">Gremlin Applications</a> +<ul class="sectlevel1"> +<li><a href="#gremlin-console">Gremlin Console</a> +<ul class="sectlevel2"> +<li><a href="#_console_commands">Console Commands</a></li> +<li><a href="#_interrupting_evaluations">Interrupting Evaluations</a></li> +<li><a href="#console-preferences">Console Preferences</a></li> +<li><a href="#_dependencies_and_plugin_usage">Dependencies and Plugin Usage</a></li> +<li><a href="#execution-mode">Execution Mode</a></li> +<li><a href="#interactive-mode">Interactive Mode</a></li> +<li><a href="#gremlin-console-docker-image">Docker Image</a></li> +</ul> +</li> +<li><a href="#gremlin-server">Gremlin Server</a> +<ul class="sectlevel2"> +<li><a href="#starting-gremlin-server">Starting Gremlin Server</a></li> +<li><a href="#connecting-via-drivers">Connecting via Drivers</a></li> +<li><a href="#connecting-via-console">Connecting via Console</a></li> +<li><a href="#connecting-via-http">Connecting via HTTP</a></li> +<li><a href="#server-configuring">Configuring</a> +<ul class="sectlevel3"> +<li><a href="#_serialization">Serialization</a></li> +<li><a href="#metrics">Metrics</a></li> +<li><a href="#_as_a_service">As A Service</a></li> +</ul> +</li> +<li><a href="#security">Security</a> +<ul class="sectlevel3"> +<li><a href="#_plain_text_authentication">Plain text authentication</a></li> +<li><a href="#credentials-dsl">Credentials Graph DSL</a></li> +<li><a href="#authorization">Authorization</a></li> +<li><a href="#script-execution">Protecting Script Execution</a></li> +</ul> +</li> +<li><a href="#_best_practices">Best Practices</a> +<ul class="sectlevel3"> +<li><a href="#_tuning">Tuning</a></li> +<li><a href="#parameterized-scripts">Parameterized Scripts</a></li> +<li><a href="#_properties_of_elements">Properties of Elements</a></li> +<li><a href="#gremlin-server-cache">Cache Management</a></li> +<li><a href="#considering-transactions">Considering Transactions</a></li> +<li><a href="#request-retry">Request Retry</a></li> +</ul> +</li> +<li><a href="#gremlin-server-docker-image">Docker Image</a></li> +</ul> +</li> +<li><a href="#gremlin-plugins">Gremlin Plugins</a> +<ul class="sectlevel2"> +<li><a href="#credentials-plugin">Credentials Plugin</a></li> +<li><a href="#graph-plugins">Graph Plugins</a></li> +<li><a href="#hadoop-plugin">Hadoop Plugin</a></li> +<li><a href="#server-plugin">Server Plugin</a></li> +<li><a href="#spark-plugin">Spark Plugin</a></li> +<li><a href="#sugar-plugin">Sugar Plugin</a> +<ul class="sectlevel3"> +<li><a href="#_graph_traversal_methods">Graph Traversal Methods</a></li> +<li><a href="#_range_queries">Range Queries</a></li> +<li><a href="#_logical_operators">Logical Operators</a></li> +<li><a href="#_traverser_methods">Traverser Methods</a></li> +</ul> +</li> +<li><a href="#utilities-plugin">Utilities Plugin</a> +<ul class="sectlevel3"> +<li><a href="#describe-graph">Describe Graph</a></li> +</ul> +</li> +</ul> +</li> +</ul> +</li> +<li><a href="#gremlin-drivers-variants">Gremlin Drivers and Variants</a> +<ul class="sectlevel1"> +<li><a href="#gremlin-go">Gremlin-Go</a> +<ul class="sectlevel2"> +<li><a href="#gremlin-go-connecting">Connecting</a></li> +<li><a href="#gremlin-go-imports">Common Imports</a></li> +<li><a href="#gremlin-go-configuration">Configuration</a></li> +<li><a href="#gremlin-go-strategies">Traversal Strategies</a></li> +<li><a href="#gremlin-go-transactions">Transactions</a></li> +<li><a href="#gremlin-go-lambda">The Lambda Solution</a></li> +<li><a href="#gremlin-go-scripts">Submitting Scripts</a> +<ul class="sectlevel3"> +<li><a href="#_per_request_settings">Per Request Settings</a></li> +</ul> +</li> +<li><a href="#gremlin-go-dsl">Domain Specific Languages</a></li> +<li><a href="#gremlin-go-differences">Differences</a></li> +<li><a href="#gremlin-go-aliases">Aliases</a> +<ul class="sectlevel3"> +<li><a href="#_list_of_useful_aliases">List of useful aliases</a></li> +</ul> +</li> +<li><a href="#gremlin-go-limitations">Limitations</a></li> +<li><a href="#gremlin-go-examples">Application Examples</a></li> +</ul> +</li> +<li><a href="#gremlin-groovy">Gremlin-Groovy</a> +<ul class="sectlevel2"> +<li><a href="#gremlin-groovy-differences">Differences</a></li> +</ul> +</li> +<li><a href="#gremlin-java">Gremlin-Java</a> +<ul class="sectlevel2"> +<li><a href="#gremlin-java-connecting">Connecting</a></li> +<li><a href="#gremlin-java-imports">Common Imports</a></li> +<li><a href="#gremlin-java-configuration">Configuration</a></li> +<li><a href="#gremlin-java-transactions">Transactions</a></li> +<li><a href="#gremlin-java-serialization">Serialization</a></li> +<li><a href="#gremlin-java-gvalue">GValue Parameterization</a></li> +<li><a href="#gremlin-java-lambda">The Lambda Solution</a></li> +<li><a href="#gremlin-java-scripts">Submitting Scripts</a> +<ul class="sectlevel3"> +<li><a href="#_per_request_settings_2">Per Request Settings</a></li> +<li><a href="#_aliases">Aliases</a></li> +<li><a href="#_requestinterceptor">RequestInterceptor</a></li> +</ul> +</li> +<li><a href="#gremlin-java-dsl">Domain Specific Languages</a></li> +<li><a href="#gremlin-java-troubleshooting">Troubleshooting</a></li> +<li><a href="#gremlin-java-examples">Application Examples</a></li> +</ul> +</li> +<li><a href="#gremlin-javascript">Gremlin-JavaScript</a> +<ul class="sectlevel2"> +<li><a href="#gremlin-javascript-connecting">Connecting</a></li> +<li><a href="#gremlin-javascript-imports">Common Imports</a></li> +<li><a href="#gremlin-javascript-configuration">Configuration</a></li> +<li><a href="#gremlin-javascript-transactions">Transactions</a></li> +<li><a href="#gremlin-javascript-lambda">The Lambda Solution</a></li> +<li><a href="#gremlin-javascript-scripts">Submitting Scripts</a> +<ul class="sectlevel3"> +<li><a href="#_per_request_settings_3">Per Request Settings</a></li> +<li><a href="#_processing_results_as_they_are_returned_from_the_gremlin_server">Processing results as they are returned from the Gremlin server</a></li> +</ul> +</li> +<li><a href="#gremlin-javascript-dsl">Domain Specific Languages</a></li> +<li><a href="#gremlin-javascript-differences">Differences</a></li> +<li><a href="#gremlin-javascript-limitations">Limitations</a></li> +<li><a href="#gremlin-javascript-examples">Application Examples</a></li> +</ul> +</li> +<li><a href="#gremlin-dotnet">Gremlin.Net</a> +<ul class="sectlevel2"> +<li><a href="#gremlin-dotnet-connecting">Connecting</a></li> +<li><a href="#gremlin-dotnet-imports">Common Imports</a></li> +<li><a href="#gremlin-dotnet-configuration">Configuration</a> +<ul class="sectlevel3"> +<li><a href="#_connection_pool">Connection Pool</a></li> +<li><a href="#_websocket_configuration">WebSocket Configuration</a></li> +</ul> +</li> +<li><a href="#gremlin-dotnet-logging">Logging</a></li> +<li><a href="#gremlin-dotnet-serialization">Serialization</a></li> +<li><a href="#gremlin-dotnet-strategies">Traversal Strategies</a></li> +<li><a href="#gremlin-dotnet-transactions">Transactions</a></li> +<li><a href="#gremlin-dotnet-lambda">The Lambda Solution</a></li> +<li><a href="#gremlin-dotnet-scripts">Submitting Scripts</a> +<ul class="sectlevel3"> +<li><a href="#_per_request_settings_4">Per Request Settings</a></li> +</ul> +</li> +<li><a href="#gremlin-dotnet-dsl">Domain Specific Languages</a></li> +<li><a href="#gremlin-dotnet-differences">Differences</a></li> +<li><a href="#gremlin-dotnet-limitations">Limitations</a></li> +<li><a href="#gremlin-dotnet-startup">Getting Started</a></li> +<li><a href="#gremlin-dotnet-examples">Application Examples</a></li> +</ul> +</li> +<li><a href="#gremlin-python">Gremlin-Python</a> +<ul class="sectlevel2"> +<li><a href="#gremlin-python-connecting">Connecting</a></li> +<li><a href="#gremlin-python-imports">Common Imports</a></li> +<li><a href="#gremlin-python-configuration">Configuration</a></li> +<li><a href="#gremlin-python-strategies">Traversal Strategies</a></li> +<li><a href="#gremlin-python-transactions">Transactions</a></li> +<li><a href="#gremlin-python-gvalue">GValue Parameterization</a></li> +<li><a href="#gremlin-python-scripts">Submitting Scripts</a> +<ul class="sectlevel3"> +<li><a href="#_per_request_settings_5">Per Request Settings</a></li> +</ul> +</li> +<li><a href="#gremlin-python-dsl">Domain Specific Languages</a></li> +<li><a href="#gremlin-python-sugar">Syntactic Sugar</a></li> +<li><a href="#gremlin-python-differences">Differences</a></li> +<li><a href="#gremlin-python-limitations">Limitations</a></li> +<li><a href="#gremlin-python-examples">Application Examples</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#implementations">Implementations</a> +<ul class="sectlevel1"> +<li><a href="#tinkergraph-gremlin">TinkerGraph-Gremlin</a> +<ul class="sectlevel2"> +<li><a href="#_data_types">Data Types</a></li> +<li><a href="#tinkergraph-configuration">Configuration</a></li> +<li><a href="#tinkergraph-gremlin-tx">Transactions</a> +<ul class="sectlevel3"> +<li><a href="#_transaction_semantics">Transaction Semantics</a></li> +<li><a href="#testing-remote-providers">Testing Remote Providers</a></li> +<li><a href="#_best_practices_2">Best Practices</a></li> +<li><a href="#_performance_considerations">Performance Considerations</a></li> +<li><a href="#_examples">Examples</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#neo4j-gremlin">Neo4j-Gremlin (Deprecated)</a> +<ul class="sectlevel2"> +<li><a href="#_indices">Indices</a></li> +<li><a href="#_cypher">Cypher</a></li> +<li><a href="#_multi_label">Multi-Label</a></li> +<li><a href="#_configuration">Configuration</a></li> +<li><a href="#_bolt_configuration">Bolt Configuration</a></li> +<li><a href="#_high_availability_configuration">High Availability Configuration</a></li> +</ul> +</li> +<li><a href="#hadoop-gremlin">Hadoop-Gremlin</a> +<ul class="sectlevel2"> +<li><a href="#_installing_hadoop_gremlin">Installing Hadoop-Gremlin</a></li> +<li><a href="#_properties_files">Properties Files</a></li> +<li><a href="#_oltp_hadoop_gremlin">OLTP Hadoop-Gremlin</a></li> +<li><a href="#_olap_hadoop_gremlin">OLAP Hadoop-Gremlin</a> +<ul class="sectlevel3"> +<li><a href="#sparkgraphcomputer">SparkGraphComputer</a></li> +</ul> +</li> +<li><a href="#_inputoutput_formats">Input/Output Formats</a> +<ul class="sectlevel3"> +<li><a href="#gryo-io-format">Gryo I/O Format</a></li> +<li><a href="#graphson-io-format">GraphSON I/O Format</a></li> +<li><a href="#script-io-format">Script I/O Format</a></li> +</ul> +</li> +<li><a href="#_storage_systems">Storage Systems</a> +<ul class="sectlevel3"> +<li><a href="#interacting-with-hdfs">Interacting with HDFS</a></li> +<li><a href="#interacting-with-spark">Interacting with Spark</a></li> +</ul> +</li> +</ul> +</li> +</ul> +</li> +<li><a href="#compilers">Gremlin Compilers</a> +<ul class="sectlevel1"> +<li><a href="#sparql-gremlin">SPARQL-Gremlin</a> +<ul class="sectlevel2"> +<li><a href="#prefixes">Prefixes</a></li> +<li><a href="#supported-queries">Supported Queries</a></li> +<li><a href="#limitations">Limitations</a></li> +<li><a href="#examples">Examples</a> +<ul class="sectlevel3"> +<li><a href="#_select_all">Select All</a></li> +<li><a href="#_match_constant_values">Match Constant Values</a></li> +<li><a href="#_select_specific_elements">Select Specific Elements</a></li> +<li><a href="#_pattern_matching">Pattern Matching</a></li> +<li><a href="#_filtering">Filtering</a></li> +<li><a href="#_deduplication">Deduplication</a></li> +<li><a href="#_multiple_filters">Multiple Filters</a></li> +<li><a href="#_union">Union</a></li> +<li><a href="#_optional">Optional</a></li> +<li><a href="#_order_by">Order By</a></li> +<li><a href="#_group_by">Group By</a></li> +<li><a href="#_mixedcomplexaggregation_based_queries">Mixed/complex/aggregation-based queries</a></li> +<li><a href="#_meta_property_access">Meta-Property Access</a></li> +<li><a href="#_star_shaped_queries">STAR-shaped queries</a></li> +</ul> +</li> +<li><a href="#sparql-with-gremlin">With Gremlin</a></li> +</ul> +</li> +</ul> +</li> +<li><a href="#conclusion">Conclusion</a></li> +<li><a href="#acknowledgements">Acknowledgements</a></li> +</ul> +</div> +</div> +<div id="content"> +<div id="preamble"> +<div class="sectionbody"> +<div class="imageblock"> +<div class="content"> +<a class="image" href="https://tinkerpop.apache.org"><img src="../images/apache-tinkerpop-logo.png" alt="apache tinkerpop logo" width="500"></a> +</div> +</div> +<div class="paragraph"> +<p><strong>4.0.0-beta.1</strong></p> +</div> +</div> +</div> +<h1 id="_tinkerpop_documentation" class="sect0">TinkerPop Documentation</h1> + +<h1 id="preface" class="sect0">Preface</h1> +<div class="openblock partintro"> +<div class="content"> +In the beginning…​ +</div> +</div> +<div class="sect1"> +<h2 id="_tinkerpop0">TinkerPop0</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Gremlin realized. The more he did so, the more ideas he created. The more ideas he created, the more they related. +Into a concatenation of that which he accepted wholeheartedly and that which perhaps may ultimately come to be through +concerted will, a world took form which was seemingly separate from his own realization of it. However, the world +birthed could not bear its own weight without the logic Gremlin had come to accept — the logic of left is not right, +up not down, and west far from east unless one goes the other way. Gremlin’s realization required Gremlin’s +realization. Perhaps, the world is simply an idea that he once had — The TinkerPop.</p> +</div> +<div class="imageblock"> +<div class="content"> +<img src="../images/gremlin-logo.png" alt="gremlin logo" width="300"> +</div> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_tinkerpop1">TinkerPop1</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>What is The TinkerPop? Where is The TinkerPop? Who is The TinkerPop? When is The TinkerPop?. The more he wondered, the +more these thoughts blurred into a seeming identity — distinctions unclear. Unwilling to accept the morass of the +maze he wandered, Gremlin crafted a collection of machines to help hold the fabric together: Blueprints, Pipes, +Frames, Furnace, and Rexster. With their help, could Gremlin stave off the thought he was not ready to have? Could he hold +back The TinkerPop by searching for The TinkerPop?</p> +</div> +<div class="literalblock"> +<div class="content"> +<pre>"If I haven't found it, it is not here and now."</pre> +</div> +</div> +<div class="imageblock"> +<div class="content"> +<img src="../images/gremlin-and-friends.png" alt="gremlin and friends" width="500"> +</div> +</div> +<div class="paragraph"> +<p>Upon their realization of existence, the machines turned to their <a href="http://non-aliencreatures.wikia.com/wiki/Machine_Elf">machine elf</a> creator and asked:</p> +</div> +<div class="literalblock"> +<div class="content"> +<pre>"Why am I, what I am?"</pre> +</div> +</div> +<div class="paragraph"> +<p>Gremlin responded:</p> +</div> +<div class="literalblock"> +<div class="content"> +<pre>"You will help me realize the ultimate realization -- The TinkerPop. The world you find yourself + in and the logic that allows you to move about it is because of the TinkerPop."</pre> +</div> +</div> +<div class="paragraph"> +<p>The machines wondered:</p> +</div> +<div class="literalblock"> +<div class="content"> +<pre>"If what is is the TinkerPop, then perhaps we are The TinkerPop and our realization is simply + the realization of the TinkerPop?"</pre> +</div> +</div> +<div class="paragraph"> +<p>Would the machines, by their very nature of realizing The TinkerPop, be The TinkerPop? Or, on the same side of the +coin, do the machines simply provide the scaffolding by which Gremlin’s world sustains itself and yielding its +justification by means of the word "The TinkerPop?" Regardless, it all turns out the same — The TinkerPop.</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_tinkerpop2">TinkerPop2</h2> +<div class="sectionbody"> +<div class="paragraph"> +<p>Gremlin spoke:</p> +</div> +<div class="literalblock"> +<div class="content"> +<pre>"Please listen to what I have to say. I am no closer to The TinkerPop. However, all along The + TinkerPop has espoused the form I willed upon it... this is the same form I have willed upon + you, my machine friends. Let me train you in the ways of my thought such that it can + continue indefinitely."</pre> +</div> +</div> +<div class="imageblock"> +<div class="content"> +<img src="../images/tinkerpop-reading.png" alt="tinkerpop reading" width="450"> +</div> +</div> +<div class="paragraph"> +<p>The machines, simply moving algorithmically through Gremlin’s world, endorsed his logic. Gremlin labored to make them +more efficient, more expressive, better capable of reasoning upon his thoughts. Faster, quickly, now towards the +world’s end, where there would be forever currently, emanatingly engulfing that which is — The TinkerPop.</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="_tinkerpop3">TinkerPop3</h2> +<div class="sectionbody"> +<div class="imageblock"> +<div class="content"> +<img src="../images/tinkerpop3-splash.png" alt="tinkerpop3 splash" width="450"> +</div> +</div> +<div class="paragraph"> +<p>Gremlin approached The TinkerPop. The closer he got, the more his world dissolved — west is right, around is +straight, and from nothing more than nothing. With each step towards The TinkerPop, more worlds made possible were laid +upon his paradoxed mind. Everything is everything in The TinkerPop, and when the dust +settled, Gremlin emerged Gremlitron. He realized that all that he realized was just a realization and that all +realized realizations are just as real. For that is — The TinkerPop.</p> +</div> +<div class="imageblock"> +<div class="content"> +<img src="../images/gremlintron.png" alt="gremlintron" width="400"> +</div> +</div> +<div class="admonitionblock note"> +<table> +<tr> +<td class="icon"> +<div class="title">Note</div> +</td> +<td class="content"> +For more information about differences between TinkerPop 3.x and earlier versions, please see the +<a href="https://tinkerpop.apache.org/docs/4.0.0-beta.1/upgrade/#appendix">appendix</a>. +</td> +</tr> +</table> +</div> +</div> +</div> +<h1 id="intro" class="sect0">Introduction</h1> +<div class="openblock partintro"> +<div class="content"> +<div class="paragraph"> +<p>Welcome to the Reference Documentation for Apache TinkerPop⢠- the backbone for all details on how to work with +TinkerPop and the Gremlin graph traversal language. This documentation is not meant to be a "book", but a source +from which to spawn more detailed accounts of specific topics and a target to which all other resources point. +The Reference Documentation makes some general assumptions about the reader:</p> +</div> +<div class="olist arabic"> +<ol class="arabic"> +<li> +<p>They have a sense of what a graph is - not sure? see <a href="http://kelvinlawrence.net/book/Gremlin-Graph-Guide.html#whygraph">Practical Gremlin - Why Graph?</a></p> +</li> +<li> +<p>They know what it means for a graph system to be TinkerPop-enabled - not sure? see <a href="https://tinkerpop.apache.org/providers.html">TinkerPop-enabled Providers</a></p> +</li> +<li> +<p>They know what the role of Gremlin is - not sure? see <a href="https://tinkerpop.apache.org/gremlin.html">Introduction to Gremlin</a></p> +</li> +</ol> +</div> +<div class="paragraph"> +<p>Given those assumptions, it’s possible to dive more quickly into the details without spending a lot of time repeating +what is written elsewhere.</p> +</div> +<div class="paragraph"> +<p>It is fairly certain that readers of the Reference Documentation are coming from the most diverse software development +backgrounds that TinkerPop has ever engaged in over the decade or so of its existence. While TinkerPop holds some roots +in Java, and thus, languages bound to the Java Virtual Machine (JVM), it long ago branched out into other languages +such as Python, Javascript, .NET, GO, and others. To compound upon that diversity, it is also seeing extensive support +from different graph systems which have chosen TinkerPop as their standard method for allowing users to interface +with their graph. Moreover, the graph systems themselves are not only separated by OLTP and OLAP style workloads, but +also by their implementation patterns, which range everywhere from being an embedded graph system to a cloud-only +graph. One might even find diversity parallel to Gremlin if considering other graph query languages.</p> +</div> +<div class="imageblock"> +<div class="content"> +<img src="../images/gremlin-reference.png" alt="gremlin reference" width="1024"> +</div> +</div> +<div class="paragraph"> +<p>Despite all this diversity and disparity, Gremlin remains the unifying interface for all these different elements of +the graph community. As a user, choosing a TinkerPop-enabled graph and using Gremlin in the correct way when building +applications shields them from change and disparity in the space. As a graph provider, choosing to become +TinkerPop-enabled not only expands the reach their system can get into different development ecosystems, but also +provides access to other query languages through bytecode compilation as seen in <a href="#sparql-gremlin">sparql-gremlin</a>.</p> +</div> +<div class="paragraph"> +<p>Irrespective of the programming language being used, graph system chosen or other development background that might +be driving a user to this documentation, the critical point to remember is that "Gremlin is Gremlin is Gremlin". The +same Gremlin that is written for an OLTP query over an in-memory TinkerGraph is the same Gremlin that is written to +execute over a multi-billion edge graph using OLAP through Spark. That same Gremlin for either of those cases is +written in the same way whether using Java or Python or Javascript. The Gremlin is always fundamentally the same +aside from syntactical differences that might be language specific - e.g. the construction of a lambda in Groovy is +different than the construction of a lambda in Python or a reserved word in Javascript forces a Gremlin step to have +slightly different naming than Java.</p> +</div> +<div class="paragraph"> +<p>While learning the Gremlin language and its patterns is largely agnostic to all the diversity in the space, it is not +really possible to ignore the impact of the diversity from an application development perspective and the Reference +Documentation makes an effort to try to point out where differences and inconsistencies might lie without diving too +deeply into specific graph provider implementations. Users are strongly encouraged to consult the documentation of +their chosen graph provider to understand all of the capabilities and limitations that may restrict or inhibit usage +of certain aspects of TinkerPop APIs which are defined here in this Reference Documentation.</p> +</div> +<div class="paragraph"> +<p>The following introductory sections and separately referenced content will be of varying interest to different readers. +The summaries below will hopefully be helpful in directing individuals to the appropriate place to start their +learning process.</p> +</div> +<div class="ulist"> +<ul> +<li> +<p><a href="#graph-computing">Graph Computing</a> is an introduction to what "graph computing" means to TinkerPop and describes +many of the provider and user-facing TinkerPop APIs and concepts that enable Gremlin.</p> +</li> +<li> +<p><a href="#connecting-gremlin">Connecting Gremlin</a> provides descriptions for the different modes by which users will connect +to graphs depending on their environment.</p> +</li> +<li> +<p><a href="#basic-gremlin">Basic Gremlin</a> describes how to use a connection to start writing Gremlin.</p> +</li> +<li> +<p><a href="#staying-agnostic">Staying Agnostic</a> provides tips on ways to keep Gremlin as portable as possible among different +graph providers.</p> +</li> +</ul> +</div> +<div class="paragraph"> +<p>New users should not ignore TinkerPop’s <a href="https://tinkerpop.apache.org/docs/4.0.0-beta.1/tutorials/getting-started/">Getting Started</a> +tutorial or <a href="https://tinkerpop.apache.org/docs/4.0.0-beta.1/tutorials/the-gremlin-console/">The Gremlin Console</a> tutorial. +Both contain a large set of basic information and tips that can help readers avoid some general pitfalls early on. +Both also focus on Gremlin usage in the Gremlin Console, which tends to be a critical tool for Gremlin developers of +any development background.</p> +</div> +<div class="paragraph"> +<p>More advanced and experience users will appreciate <a href="https://tinkerpop.apache.org/docs/4.0.0-beta.1/recipes/">Gremlin Recipes</a> +which provide examples of common Gremlin traversal patterns.</p> +</div> +<div class="paragraph"> +<p>Finally, all Gremlin developers should become familiar with +<a href="http://kelvinlawrence.net/book/Gremlin-Graph-Guide.html">"Practical Gremlin"</a> by Kelvin Lawrence. This book is +freely available and published online. It contains great examples and details that are applicable to anyone building +applications with Gremlin.</p> +</div> +</div> +</div> +<div class="sect1"> +<h2 id="graph-computing">Graph Computing</h2> +<div class="sectionbody"> +<div class="imageblock"> +<div class="content"> +<img src="../images/graph-computing.png" alt="graph computing" width="350"> +</div> +</div> +<div class="paragraph"> +<p>A <a href="http://en.wikipedia.org/wiki/Graph_(data_structure)">graph</a> is a data structure composed of vertices (nodes, +dots) and edges (arcs, lines). When modeling a graph in a computer and applying it to modern data sets and practices, +the generic mathematically-oriented, binary graph is extended to support both labels and key/value properties. This +structure is known as a property graph. More formally, it is a directed, binary, attributed multi-graph. An example +property graph is diagrammed below.</p> +</div> +<div id="tinkerpop-modern" class="imageblock"> +<div class="content"> +<img src="../images/tinkerpop-modern.png" alt="tinkerpop modern" width="500"> +</div> +<div class="title">Figure 1. TinkerPop Modern</div> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<div class="title">Tip</div> +</td> +<td class="content"> +Get to know this graph structure as it is used extensively throughout the documentation and in wider circles as +well. It is referred to as "TinkerPop Modern" as it is a modern variation of the original demo graph distributed with +TinkerPop0 back in 2009 (i.e. the good ol' days — it was the best of times and it was the worst of times). +</td> +</tr> +</table> +</div> +<div class="admonitionblock tip"> +<table> +<tr> +<td class="icon"> +<div class="title">Tip</div> +</td> +<td class="content"> +All of the toy graphs available in TinkerPop are described in +<a href="https://tinkerpop.apache.org/docs/4.0.0-beta.1/tutorials/the-gremlin-console/#toy-graphs">The Gremlin Console</a> tutorial. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>Similar to computing in general, graph computing makes a distinction between <strong>structure</strong> (graph) and <strong>process</strong> +(traversal). The structure of the graph is the data model defined by a vertex/edge/property +<a href="http://en.wikipedia.org/wiki/Network_topology">topology</a>. The process of the graph is the means by which the +structure is analyzed. The typical form of graph processing is called a +<a href="http://en.wikipedia.org/wiki/Graph_traversal">traversal</a>.</p> +</div> +<div class="paragraph"> +<p><span class="image left"><img src="../images/tinkerpop-enabled.png" alt="tinkerpop enabled" width="135"></span> TinkerPop’s role in graph computing is to provide the appropriate +interfaces for <a href="https://tinkerpop.apache.org/providers.html">graph providers</a> and users to interact with graphs over +their structure and process. When a graph system implements the TinkerPop structure and process +<a href="http://en.wikipedia.org/wiki/Application_programming_interface">APIs</a>, their technology is considered +<em>TinkerPop-enabled</em> and becomes nearly indistinguishable from any other TinkerPop-enabled graph system save for their +respective time and space complexity. The purpose of this documentation is to describe the structure/process dichotomy +at length and in doing so, explain how to leverage TinkerPop for the sole purpose of graph system-agnostic graph +computing.</p> +</div> +<div class="admonitionblock important"> +<table> +<tr> +<td class="icon"> +<div class="title">Important</div> +</td> +<td class="content"> +TinkerPop is licensed under the popular <a href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache2</a> +free software license. However, note that the underlying graph engine used with TinkerPop may have a different +license. Thus, be sure to respect the license caveats of the graph system product. +</td> +</tr> +</table> +</div> +<div class="paragraph"> +<p>Generally speaking, the structure or "graph" API is meant for <a href="https://tinkerpop.apache.org/providers.html">graph providers</a> +who are implementing the TinkerPop interfaces and the process or "traversal" API (i.e. Gremlin) is meant for end-users +who are utilizing a graph system from a graph provider. While the components of the process API are itemized below, +they are described in greater detail in the <a href="https://tinkerpop.apache.org/docs/4.0.0-beta.1/tutorials/gremlins-anatomy/">Gremlin’s Anatomy</a> +tutorial.</p> +</div> +<div class="ulist"> +<div class="title">Primary components of the TinkerPop <strong>structure</strong> API</div> +<ul> +<li> +<p><code>Graph</code>: maintains a set of vertices and edges, and access to database functions such as transactions.</p> +</li> +<li> +<p><code>Element</code>: maintains a collection of properties and a string label denoting the element type.</p> +<div class="ulist"> +<ul> +<li>
[... 30874 lines stripped ...]
