docs/data_structures.html

467 lines
No EOL
25 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html>
<html class="no-js" lang="en">
<head><meta charset="utf-8"/>
<meta name="viewport" content="width=device-width,initial-scale=1"/>
<meta name="color-scheme" content="light dark"><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="6. Vocabulary" href="vocabulary.html" /><link rel="prev" title="4. Discovery" href="discovery.html" />
<link rel="canonical" href="/docs/data_structures.html" />
<!-- Generated with Sphinx 6.2.1 and Furo 2023.05.20 -->
<title>5. Data Structures - p2p-ld 0.1.0 documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=e6660623a769aa55fea372102b9bf3151b292993" />
<link rel="stylesheet" type="text/css" href="_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css" />
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=30d1aed668e5c3a91c3e3bf6a60b675221979f0e" />
<style>
body {
--color-code-background: #f8f8f8;
--color-code-foreground: black;
}
@media not print {
body[data-theme="dark"] {
--color-code-background: #0d1117;
--color-code-foreground: #e6edf3;
}
@media (prefers-color-scheme: dark) {
body:not([data-theme="light"]) {
--color-code-background: #0d1117;
--color-code-foreground: #e6edf3;
}
}
}
</style></head>
<body>
<script>
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
</script>
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="svg-toc" viewBox="0 0 24 24">
<title>Contents</title>
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
</svg>
</symbol>
<symbol id="svg-menu" viewBox="0 0 24 24">
<title>Menu</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
<line x1="3" y1="12" x2="21" y2="12"></line>
<line x1="3" y1="6" x2="21" y2="6"></line>
<line x1="3" y1="18" x2="21" y2="18"></line>
</svg>
</symbol>
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
<title>Expand</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
<polyline points="9 18 15 12 9 6"></polyline>
</svg>
</symbol>
<symbol id="svg-sun" viewBox="0 0 24 24">
<title>Light mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</symbol>
<symbol id="svg-moon" viewBox="0 0 24 24">
<title>Dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
</svg>
</symbol>
<symbol id="svg-sun-half" viewBox="0 0 24 24">
<title>Auto light/dark mode</title>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<circle cx="12" cy="12" r="9" />
<path d="M13 12h5" />
<path d="M13 15h4" />
<path d="M13 18h1" />
<path d="M13 9h4" />
<path d="M13 6h1" />
</svg>
</symbol>
</svg>
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
<label class="overlay sidebar-overlay" for="__navigation">
<div class="visually-hidden">Hide navigation sidebar</div>
</label>
<label class="overlay toc-overlay" for="__toc">
<div class="visually-hidden">Hide table of contents sidebar</div>
</label>
<div class="page">
<header class="mobile-header">
<div class="header-left">
<label class="nav-overlay-icon" for="__navigation">
<div class="visually-hidden">Toggle site navigation sidebar</div>
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
</label>
</div>
<div class="header-center">
<a href="index.html"><div class="brand">p2p-ld 0.1.0 documentation</div></a>
</div>
<div class="header-right">
<div class="theme-toggle-container theme-toggle-header">
<button class="theme-toggle">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-header-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label>
</div>
</header>
<aside class="sidebar-drawer">
<div class="sidebar-container">
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
<span class="sidebar-brand-text">p2p-ld 0.1.0 documentation</span>
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
<input class="sidebar-search" placeholder="Search" name="q" aria-label="Search">
<input type="hidden" name="check_keywords" value="yes">
<input type="hidden" name="area" value="default">
</form>
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
<p class="caption" role="heading"><span class="caption-text">Introduction</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="overview.html">Overview</a></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="comparison/index.html">Comparison</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle navigation of Comparison</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l2 has-children"><a class="reference internal" href="comparison/p2p/index.html">P2P</a><input class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><div class="visually-hidden">Toggle navigation of P2P</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="comparison/p2p/bittorrent.html">BitTorrent</a></li>
<li class="toctree-l3"><a class="reference internal" href="comparison/p2p/ipfs.html">IPFS</a></li>
<li class="toctree-l3"><a class="reference internal" href="comparison/p2p/hypercore.html">Dat/Hypercore</a></li>
<li class="toctree-l3"><a class="reference internal" href="comparison/p2p/spritely.html">Spritely/Goblin</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="comparison/social/index.html">Social</a><input class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><div class="visually-hidden">Toggle navigation of Social</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="comparison/social/activitypub.html">ActivityPub</a></li>
<li class="toctree-l3"><a class="reference internal" href="comparison/social/ssb.html">Secure Scuttlebutt</a></li>
<li class="toctree-l3"><a class="reference internal" href="comparison/social/matrix.html">Matrix</a></li>
<li class="toctree-l3"><a class="reference internal" href="comparison/social/at_protocol.html">AT Protocol/Bluesky</a></li>
<li class="toctree-l3"><a class="reference internal" href="comparison/social/nostr.html">Nostr</a></li>
<li class="toctree-l3"><a class="reference internal" href="comparison/social/xmpp.html">XMPP</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="comparison/ld/index.html">Linked Data</a><input class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><div class="visually-hidden">Toggle navigation of Linked Data</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="comparison/ld/rdf.html">RDF and Friends</a></li>
<li class="toctree-l3"><a class="reference internal" href="comparison/ld/solid.html">SOLID</a></li>
<li class="toctree-l3"><a class="reference internal" href="comparison/ld/ld_fragments.html">Linked Data Fragments</a></li>
<li class="toctree-l3"><a class="reference internal" href="comparison/ld/hdt.html">HDT</a></li>
<li class="toctree-l3"><a class="reference internal" href="comparison/ld/ld_platform.html">Linked Data Platform</a></li>
<li class="toctree-l3"><a class="reference internal" href="comparison/ld/nanopubs.html">NanoPubs</a></li>
</ul>
</li>
<li class="toctree-l2 has-children"><a class="reference internal" href="comparison/data/index.html">Data Structures</a><input class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><div class="visually-hidden">Toggle navigation of Data Structures</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l3"><a class="reference internal" href="comparison/data/datalad.html">DataLad</a></li>
<li class="toctree-l3"><a class="reference internal" href="comparison/data/dmc.html">DMC</a></li>
<li class="toctree-l3"><a class="reference internal" href="comparison/data/eris.html">ERIS</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="p2p_concepts.html">P2P Concepts</a></li>
<li class="toctree-l1"><a class="reference internal" href="out_of_scope.html">Out of Scope</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Protocol</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="definitions.html">1. Definitions</a></li>
<li class="toctree-l1"><a class="reference internal" href="protocol.html">2. Protocol</a></li>
<li class="toctree-l1"><a class="reference internal" href="identity.html">3. Identity</a></li>
<li class="toctree-l1"><a class="reference internal" href="discovery.html">4. Discovery</a></li>
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">5. Data Structures</a></li>
<li class="toctree-l1"><a class="reference internal" href="vocabulary.html">6. Vocabulary</a></li>
<li class="toctree-l1"><a class="reference internal" href="querying.html">7. Querying</a></li>
<li class="toctree-l1"><a class="reference internal" href="encryption.html">8. Encryption</a></li>
<li class="toctree-l1"><a class="reference internal" href="encryption.html#todo">9. TODO</a></li>
<li class="toctree-l1"><a class="reference internal" href="federation.html">10. Federation</a></li>
<li class="toctree-l1"><a class="reference internal" href="backwards_compatibility.html">11. Backwards Compatibility</a></li>
<li class="toctree-l1"><a class="reference internal" href="evolvability.html">12. Evolvability</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Ecosystem</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="triplets.html">Triplets</a></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="codecs/index.html">Codecs</a><input class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><div class="visually-hidden">Toggle navigation of Codecs</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul>
<li class="toctree-l2"><a class="reference internal" href="codecs/hdf5.html">HDF5</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="translation/index.html">Translation</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Drafting</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="design.html">Design Decisions</a></li>
<li class="toctree-l1"><a class="reference internal" href="sketchpad.html">Sketchpad</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Meta</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="genindex.html">Index</a></li>
<li class="toctree-l1"><a class="reference internal" href="references.html">References</a></li>
</ul>
</div>
</div>
</div>
</div>
</aside>
<div class="main">
<div class="content">
<div class="article-container">
<a href="#" class="back-to-top muted-link">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
</svg>
<span>Back to top</span>
</a>
<div class="content-icon-container">
<div class="theme-toggle-container theme-toggle-content">
<button class="theme-toggle">
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
</button>
</div>
<label class="toc-overlay-icon toc-content-icon" for="__toc">
<div class="visually-hidden">Toggle table of contents sidebar</div>
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
</label>
</div>
<article role="main">
<section id="data-structures">
<h1><span class="section-number">5. </span>Data Structures<a class="headerlink" href="#data-structures" title="Permalink to this heading">#</a></h1>
<p>Triplet graphs similar to linked data fragments with envelopes. decoupling content addressing from versioning</p>
<ul class="simple">
<li><p>Merkel DAGs</p></li>
<li><p>Envelopes</p></li>
<li><p>Versioning</p></li>
<li><p>Typed objects with formatting</p></li>
</ul>
<section id="containers">
<span id="id1"></span><h2><span class="section-number">5.1. </span>Containers<a class="headerlink" href="#containers" title="Permalink to this heading">#</a></h2>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>Ya this seems like the right set of ideas to build on</p>
<ul class="simple">
<li><p><a class="reference external" href="https://www.w3.org/TR/json-ld11-framing/">https://www.w3.org/TR/json-ld11-framing/</a></p></li>
<li><p><a class="reference external" href="https://w3c.github.io/rdf-canon/spec/#introduction">https://w3c.github.io/rdf-canon/spec/#introduction</a></p></li>
</ul>
</div>
<ul class="simple">
<li><p>Packets of LD-triplets that contain</p>
<ul>
<li><p>Hash of triplets</p></li>
<li><p>Encryption Info (if applicable)</p></li>
<li><p>Permissions scope</p></li>
<li><p>Signature</p></li>
</ul>
</li>
<li><p>Anything that can be directly referenced without local qualifier is a container.</p>
<ul>
<li><p>Triplets within a container can be referenced with the <a class="reference internal" href="querying.html#qlocation"><span class="std std-ref">query syntax</span></a></p></li>
</ul>
</li>
<li><p>Containers also behave like “feeds”</p>
<ul>
<li><p>Eg. one might put their blog posts in <code class="docutils literal notranslate"><span class="pre">&#64;user:blog</span></code> or</p></li>
</ul>
</li>
<li><p>The account identifier is the top-level container.</p></li>
<li><p>Ordering:</p>
<ul>
<li><p>Every triple within a scope is ordered by default by the time it is declared</p></li>
<li><p>A container can declare its ordering (see <a class="reference internal" href="definitions.html#term-Container"><span class="xref std std-term">Container</span></a>)</p></li>
</ul>
</li>
<li><p>Naming:</p>
<ul>
<li><p>Each container intended to be directly referenced SHOULD contain a <code class="docutils literal notranslate"><span class="pre">name</span></code> so it can be referenced w.r.t its parent: <code class="docutils literal notranslate"><span class="pre">&#64;&lt;ACCOUNT&gt;:&lt;name&gt;</span></code></p></li>
<li><p>Each container can also be indicated numerically</p></li>
</ul>
</li>
<li><p>Identity: Each container is uniquely identified by the hash of its contents and the hash of the account identifier.</p></li>
<li><p>Format: A container can specify one or several ways it can be displayed</p></li>
<li><p>Capabilities: A container can specify different capabilities that another account can take (eg. “Like”, “Upvote”, “Reply”)</p>
<ul>
<li><p>Capabilities should also contain a permissions scope, if none is present, the global scope is assumed.</p></li>
<li><p>Since Identities are just a special form of container, they too can advertise different actions that they support with capabilities.</p></li>
</ul>
</li>
<li><p>Basically a container is a merkle DAG with binary data at its leaves a la the <span class="target" id="index-0"></span>Linked Data; Platform</p></li>
<li><p>Re: Ordering - <a class="reference external" href="https://github.com/ssbc/ssb-tangle">https://github.com/ssbc/ssb-tangle</a></p></li>
</ul>
<p>Re hashing a graph: the container always has one root node that is the containers identity from which a graph traversal starts. A <span class="target" id="index-1"></span>Merkle DAG is then constructed starting from the leaves.</p>
</section>
<section id="triplets">
<h2><span class="section-number">5.2. </span>Triplets<a class="headerlink" href="#triplets" title="Permalink to this heading">#</a></h2>
<ul class="simple">
<li><p>Triplet format</p>
<ul>
<li><p>Objects require a shortname that can be hierarchically indexed from</p></li>
</ul>
</li>
<li><p>Types/Schema</p></li>
<li><p>Including intrinsic notion of nesting</p>
<ul>
<li><p>every object can have blank/positionally indexed children</p></li>
<li><p>every triple can have blank/positionally indexed “qualifiers” like RDF-star or wikidatas qualifiers.</p></li>
</ul>
</li>
</ul>
</section>
<section id="schema">
<h2><span class="section-number">5.3. </span>Schema<a class="headerlink" href="#schema" title="Permalink to this heading">#</a></h2>
</section>
<section id="codecs">
<h2><span class="section-number">5.4. </span>Codecs<a class="headerlink" href="#codecs" title="Permalink to this heading">#</a></h2>
<p>See IPLD Codecs and Linked Data Platform spec</p>
<p>Means of interacting with binary data.</p>
<p>Describes</p>
<ul class="simple">
<li><p>Format</p></li>
<li></li>
</ul>
</section>
<section id="versioning">
<h2><span class="section-number">5.5. </span>Versioning<a class="headerlink" href="#versioning" title="Permalink to this heading">#</a></h2>
<ul class="simple">
<li><p>A given container has an identity hash from its first packing</p></li>
<li><p>A given triple can be contained by</p></li>
</ul>
</section>
<section id="canonicalization">
<h2><span class="section-number">5.6. </span>Canonicalization<a class="headerlink" href="#canonicalization" title="Permalink to this heading">#</a></h2>
<ul class="simple">
<li><p><a class="reference external" href="https://w3c.github.io/rdf-canon/spec/#introduction">https://w3c.github.io/rdf-canon/spec/#introduction</a></p></li>
<li><p><a class="reference external" href="https://json-ld.org/spec/ED/rdf-graph-normalization/20111016/">https://json-ld.org/spec/ED/rdf-graph-normalization/20111016/</a></p></li>
<li><p><a class="reference external" href="https://www.w3.org/TR/json-ld11-framing/">https://www.w3.org/TR/json-ld11-framing/</a></p></li>
</ul>
</section>
<section id="compare-to">
<h2><span class="section-number">5.7. </span>Compare to:<a class="headerlink" href="#compare-to" title="Permalink to this heading">#</a></h2>
<ul class="simple">
<li><p><span class="target" id="index-2"></span>CORAL - <a class="reference external" href="https://github.com/jmchandonia/CORAL">https://github.com/jmchandonia/CORAL</a></p>
<ul>
<li><p>Good idea, also making use of extended context. Very focused on scientific data - units are a core part of the model. distinction between static and dynamic data types seems like sort of a hack. data bricks are similar to containers. the source is an absolute mess.</p></li>
</ul>
</li>
</ul>
</section>
</section>
</article>
</div>
<footer>
<div class="related-pages">
<a class="next-page" href="vocabulary.html">
<div class="page-info">
<div class="context">
<span>Next</span>
</div>
<div class="title"><span class="section-number">6. </span>Vocabulary</div>
</div>
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
</a>
<a class="prev-page" href="discovery.html">
<svg class="furo-related-icon"><use href="#svg-arrow-right"></use></svg>
<div class="page-info">
<div class="context">
<span>Previous</span>
</div>
<div class="title"><span class="section-number">4. </span>Discovery</div>
</div>
</a>
</div>
<div class="bottom-of-page">
<div class="left-details">
<div class="copyright">
Copyright &#169; 2023, Jonny Saunders
</div>
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
<a href="https://github.com/pradyunsg/furo">Furo</a>
</div>
<div class="right-details">
</div>
</div>
</footer>
</div>
<aside class="toc-drawer">
<div class="toc-sticky toc-scroll">
<div class="toc-title-container">
<span class="toc-title">
On this page
</span>
</div>
<div class="toc-tree-container">
<div class="toc-tree">
<ul>
<li><a class="reference internal" href="#">5. Data Structures</a><ul>
<li><a class="reference internal" href="#containers">5.1. Containers</a></li>
<li><a class="reference internal" href="#triplets">5.2. Triplets</a></li>
<li><a class="reference internal" href="#schema">5.3. Schema</a></li>
<li><a class="reference internal" href="#codecs">5.4. Codecs</a></li>
<li><a class="reference internal" href="#versioning">5.5. Versioning</a></li>
<li><a class="reference internal" href="#canonicalization">5.6. Canonicalization</a></li>
<li><a class="reference internal" href="#compare-to">5.7. Compare to:</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</aside>
</div>
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/scripts/furo.js"></script>
<script src="_static/design-tabs.js"></script>
</body>
</html>