<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 --> <p>ISO/IEC 39075:2024 is the international standard for GQL (Graph Query Language), defining a vendor-neutral, declarative query language for property graph databases. Geode follows the ISO/IEC 39075:2024 compliance.</p> <h3 id="standard-overview" class="position-relative d-flex align-items-center group"> <span>Standard Overview</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="standard-overview" aria-haspopup="dialog" aria-label="Share link: Standard Overview"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden> <div class="hsm-dialog" role="document"> <div class="hsm-header"> <h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2> <button type="button" class="hsm-close" aria-label="Close"> <i class="fa-solid fa-xmark"></i> </button> </div> <div class="hsm-body"> <label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label> <div class="input-group mb-4 hsm-url-group"> <input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" /> <button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy"> <i class="fa-duotone fa-clipboard" aria-hidden="true"></i> </button> </div> <div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div> <div class="hsm-share-grid"> <a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-twitter me-2"></i>Twitter </a> <a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-linkedin me-2"></i>LinkedIn </a> <a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-facebook me-2"></i>Facebook </a> </div> </div> </div> </div> <style> .heading-share-modal { position: fixed; inset: 0; display: flex; justify-content: center; align-items: center; background: rgba(0, 0, 0, 0.6); z-index: 1050; padding: 1rem; backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); } .heading-share-modal[hidden] { display: none !important; } .hsm-dialog { max-width: 420px; width: 100%; background: var(--bs-body-bg, #fff); color: var(--bs-body-color, #212529); border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); border-radius: 1rem; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); overflow: hidden; animation: hsm-fade-in 0.2s ease-out; } @keyframes hsm-fade-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } [data-bs-theme="dark"] .hsm-dialog { background: #1e293b; border-color: rgba(255,255,255,0.1); color: #f8f9fa; } .hsm-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.5rem; border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); background: rgba(0,0,0,0.02); } [data-bs-theme="dark"] .hsm-header { background: rgba(255,255,255,0.02); border-color: rgba(255,255,255,0.1); } .hsm-close { background: transparent; border: none; color: inherit; opacity: 0.5; padding: 0.25rem 0.5rem; border-radius: 0.25rem; font-size: 1.2rem; line-height: 1; transition: opacity 0.2s; } .hsm-close:hover { opacity: 1; } .hsm-body { padding: 1.5rem; } .hsm-url-group { display: flex !important; align-items: stretch; } .hsm-url-group .form-control { flex: 1; min-width: 0; margin: 0; background: var(--bs-secondary-bg, #f8f9fa); border-color: var(--bs-border-color, #dee2e6); border-top-right-radius: 0; border-bottom-right-radius: 0; height: 42px; } .hsm-url-group .btn { flex: 0 0 auto; margin: 0; margin-left: -1px; border-top-left-radius: 0; border-bottom-left-radius: 0; height: 42px; display: flex; align-items: center; justify-content: center; padding: 0 1.25rem; z-index: 2; } [data-bs-theme="dark"] .hsm-url-group .form-control { background: #0f172a; border-color: #334155; color: #e2e8f0; } .hsm-share-grid { display: flex; flex-direction: column; gap: 0.5rem; } .hsm-share-grid .btn { display: flex; align-items: center; justify-content: center; font-size: 0.9rem; padding: 0.6rem; border-color: var(--bs-border-color); width: 100%; } [data-bs-theme="dark"] .hsm-share-grid .btn { color: #e2e8f0; border-color: #475569; } [data-bs-theme="dark"] .hsm-share-grid .btn:hover { background: #334155; border-color: #cbd5e1; } </style> <script> (function(){ const modal = document.getElementById('headingShareModal'); if(!modal) return; const input = modal.querySelector('#headingShareInput'); const copyBtn = modal.querySelector('.hsm-copy'); const twitter = modal.querySelector('#share-twitter'); const linkedin = modal.querySelector('#share-linkedin'); const facebook = modal.querySelector('#share-facebook'); const closeBtn = modal.querySelector('.hsm-close'); let lastFocus=null; let trapBound=false; function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; } function isOpen(){ return !modal.hasAttribute('hidden'); } function hydrate(id){ const url=buildUrl(id); input.value=url; const enc=encodeURIComponent(url); const text=encodeURIComponent(document.title); if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`; if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`; if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`; } function openModal(id){ lastFocus=document.activeElement; hydrate(id); if(!isOpen()){ modal.removeAttribute('hidden'); } requestAnimationFrame(()=>{ input.focus(); }); trapFocus(); } function closeModal(){ if(!isOpen()) return; modal.setAttribute('hidden',''); if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus(); } function copyCurrent(){ try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); } catch(e){ fallback(); } } function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} } function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); } function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); } function bindShareButtons(){ document.querySelectorAll('.h-share').forEach(btn=>{ if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; } }); } bindShareButtons(); if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded', bindShareButtons); } else { requestAnimationFrame(bindShareButtons); } document.addEventListener('click', function(e){ const shareBtn=e.target.closest && e.target.closest('.h-share'); if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); } }, true); document.addEventListener('click', e=>{ if(e.target===modal) closeModal(); if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); } if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); } }); document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); }); function trapFocus(){ if(trapBound) return; trapBound=true; modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } }); } if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); }); })(); </script><p><strong>Full Title</strong>: ISO/IEC 39075:2024 - Information technology — Database languages — GQL</p> <p><strong>Published</strong>: April 2024</p> <p><strong>Scope</strong>: Defines syntax, semantics, and behavior of GQL for querying and manipulating property graphs</p> <p><strong>Status</strong>: Active International Standard</p> <p><strong>Working Group</strong>: ISO/IEC JTC 1/SC 32/WG 3 (Database Languages)</p> <p><strong>Related Standards</strong>:</p> <ul> <li>ISO/IEC 9075 (SQL) - Aligns with SQL patterns</li> <li>ISO/IEC 13249 (SQL Multimedia) - Spatial types</li> <li>ISO/IEC 19075 (SQL Technical Reports) - Extensions</li> </ul> <h3 id="design-principles" class="position-relative d-flex align-items-center group"> <span>Design Principles</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="design-principles" aria-haspopup="dialog" aria-label="Share link: Design Principles"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="1-declarative-syntax" class="position-relative d-flex align-items-center group"> <span>1. Declarative Syntax</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="1-declarative-syntax" aria-haspopup="dialog" aria-label="Share link: 1. Declarative Syntax"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>GQL follows SQL&rsquo;s declarative approach - describe what you want, not how to get it:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Declarative</span><span class="p">:</span><span class="w"> </span><span class="nc">what</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">find</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FRIEND</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">f</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">Alice</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">f</span><span class="err">.</span><span class="py">name</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Not</span><span class="w"> </span><span class="py">imperative</span><span class="p">:</span><span class="w"> </span><span class="nc">how</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">find</span><span class="w"> </span><span class="py">it</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="p">(</span><span class="py">Query</span><span class="w"> </span><span class="py">optimizer</span><span class="w"> </span><span class="py">determines</span><span class="w"> </span><span class="py">execution</span><span class="w"> </span><span class="py">plan</span><span class="p">)</span><span class="w"> </span></span></span></code></pre></div> <h4 id="2-pattern-matching" class="position-relative d-flex align-items-center group"> <span>2. Pattern Matching</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="2-pattern-matching" aria-haspopup="dialog" aria-label="Share link: 2. Pattern Matching"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Visual ASCII art syntax for intuitive graph patterns:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Pattern</span><span class="w"> </span><span class="py">syntax</span><span class="w"> </span><span class="py">mirrors</span><span class="w"> </span><span class="py">graph</span><span class="w"> </span><span class="py">structure</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(</span><span class="py">node1</span><span class="p">)</span><span class="err">-</span><span class="p">[</span><span class="py">relationship</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">node2</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Example</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(</span><span class="py">alice</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">bob</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">LIVES_IN</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">city</span><span class="p">:</span><span class="nc">City</span><span class="p">)</span><span class="w"> </span></span></span></code></pre></div> <h4 id="3-composability" class="position-relative d-flex align-items-center group"> <span>3. Composability</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="3-composability" aria-haspopup="dialog" aria-label="Share link: 3. Composability"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Build complex queries from simple building blocks:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Simple</span><span class="w"> </span><span class="py">patterns</span><span class="w"> </span><span class="py">compose</span><span class="w"> </span><span class="py">into</span><span class="w"> </span><span class="py">complex</span><span class="w"> </span><span class="py">queries</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">age</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">25</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">u</span><span class="p">,</span><span class="w"> </span><span class="py">SIZE</span><span class="p">((</span><span class="py">u</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FRIEND</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">())</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">friends</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">friends</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">10</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">friends</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">friends</span><span class="w"> </span><span class="py">DESC</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">10</span><span class="w"> </span></span></span></code></pre></div> <h4 id="4-property-graph-model" class="position-relative d-flex align-items-center group"> <span>4. Property Graph Model</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="4-property-graph-model" aria-haspopup="dialog" aria-label="Share link: 4. Property Graph Model"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Based on labeled property graph model:</p> <ul> <li><strong>Nodes</strong>: Entities with labels and properties</li> <li><strong>Relationships</strong>: Directed edges with type and properties</li> <li><strong>Properties</strong>: Key-value pairs on nodes and relationships</li> <li><strong>Labels</strong>: Categories for nodes</li> <li><strong>Types</strong>: Categories for relationships</li> </ul> <h3 id="standard-structure" class="position-relative d-flex align-items-center group"> <span>Standard Structure</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="standard-structure" aria-haspopup="dialog" aria-label="Share link: Standard Structure"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="part-1-framework-foundation" class="position-relative d-flex align-items-center group"> <span>Part 1: Framework (Foundation)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="part-1-framework-foundation" aria-haspopup="dialog" aria-label="Share link: Part 1: Framework (Foundation)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Defines overall architecture, terminology, and concepts.</p> <p><strong>Key Sections</strong>:</p> <ul> <li>§1: Scope and normative references</li> <li>§2: Terms and definitions</li> <li>§3: Symbols and conventions</li> <li>§4: Concepts (property graph model)</li> </ul> <h4 id="part-2-foundation-data-language" class="position-relative d-flex align-items-center group"> <span>Part 2: Foundation (Data Language)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="part-2-foundation-data-language" aria-haspopup="dialog" aria-label="Share link: Part 2: Foundation (Data Language)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Core GQL language specification.</p> <p><strong>Key Sections</strong>:</p> <ul> <li>§5: Lexical elements (keywords, identifiers, literals)</li> <li>§6: Data types (scalar, temporal, collection)</li> <li>§7: Graph patterns (nodes, relationships, paths)</li> <li>§8: Data manipulation (CREATE, DELETE, SET, MERGE)</li> <li>§9: Query expressions (MATCH, WHERE, RETURN, WITH)</li> <li>§10: Operators (comparison, logical, arithmetic)</li> <li>§11: Functions (aggregation, string, mathematical, temporal)</li> <li>§12: Schema (indexes, constraints)</li> <li>§13: Transactions (BEGIN, COMMIT, ROLLBACK)</li> </ul> <h4 id="part-3-advanced-features" class="position-relative d-flex align-items-center group"> <span>Part 3: Advanced Features</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="part-3-advanced-features" aria-haspopup="dialog" aria-label="Share link: Part 3: Advanced Features"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Extended functionality beyond core language.</p> <p><strong>Key Sections</strong>:</p> <ul> <li>§14: Subqueries (EXISTS, COUNT)</li> <li>§15: CASE expressions</li> <li>§16: List comprehensions</li> <li>§17: Pattern comprehensions</li> <li>§18: User-defined functions (UDFs)</li> <li>§19: Stored procedures</li> </ul> <h3 id="core-language-features" class="position-relative d-flex align-items-center group"> <span>Core Language Features</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="core-language-features" aria-haspopup="dialog" aria-label="Share link: Core Language Features"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="pattern-syntax-7" class="position-relative d-flex align-items-center group"> <span>Pattern Syntax (§7)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="pattern-syntax-7" aria-haspopup="dialog" aria-label="Share link: Pattern Syntax (§7)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">Node</span><span class="w"> </span><span class="py">pattern</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">(</span><span class="py">variable</span><span class="p">:</span><span class="nc">Label1</span><span class="p">:</span><span class="nc">Label2</span><span class="w"> </span><span class="p">{</span><span class="py">prop1</span><span class="p">:</span><span class="w"> </span><span class="nc">value1</span><span class="p">,</span><span class="w"> </span><span class="py">prop2</span><span class="p">:</span><span class="w"> </span><span class="nc">value2</span><span class="p">})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Relationship</span><span class="w"> </span><span class="py">pattern</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">-</span><span class="p">[</span><span class="py">variable</span><span class="p">:</span><span class="nc">TYPE1</span><span class="p">|</span><span class="py">TYPE2</span><span class="w"> </span><span class="p">{</span><span class="py">prop</span><span class="p">:</span><span class="w"> </span><span class="nc">value</span><span class="p">}]</span><span class="err">-&gt;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Path</span><span class="w"> </span><span class="py">pattern</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">path</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="p">(</span><span class="py">a</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="err">*</span><span class="py">1</span><span class="err">.</span><span class="mf">.3</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">b</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Shortest</span><span class="w"> </span><span class="py">path</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">path</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">SHORTEST</span><span class="w"> </span><span class="p">(</span><span class="py">a</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">KNOWS</span><span class="err">*</span><span class="p">]</span><span class="err">-</span><span class="p">(</span><span class="py">b</span><span class="p">)</span><span class="w"> </span></span></span></code></pre></div> <h4 id="data-manipulation-8" class="position-relative d-flex align-items-center group"> <span>Data Manipulation (§8)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="data-manipulation-8" aria-haspopup="dialog" aria-label="Share link: Data Manipulation (§8)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">CREATE</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">:</span><span class="nc">Label</span><span class="w"> </span><span class="p">{</span><span class="py">property</span><span class="p">:</span><span class="w"> </span><span class="nc">value</span><span class="p">})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">DELETE</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">DELETE</span><span class="w"> </span><span class="py">n</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">DETACH</span><span class="w"> </span><span class="py">DELETE</span><span class="w"> </span><span class="py">n</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">SET</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SET</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">property</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">value</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SET</span><span class="w"> </span><span class="py">n</span><span class="p">:</span><span class="nc">Label</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">REMOVE</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">REMOVE</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">property</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">REMOVE</span><span class="w"> </span><span class="py">n</span><span class="p">:</span><span class="nc">Label</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">MERGE</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MERGE</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">:</span><span class="nc">Label</span><span class="w"> </span><span class="p">{</span><span class="py">key</span><span class="p">:</span><span class="w"> </span><span class="nc">value</span><span class="p">})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ON</span><span class="w"> </span><span class="py">CREATE</span><span class="w"> </span><span class="py">SET</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">created</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">NOW</span><span class="p">()</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ON</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="py">SET</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">updated</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">NOW</span><span class="p">()</span><span class="w"> </span></span></span></code></pre></div> <h4 id="query-clauses-9" class="position-relative d-flex align-items-center group"> <span>Query Clauses (§9)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="query-clauses-9" aria-haspopup="dialog" aria-label="Share link: Query Clauses (§9)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">//</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">pattern</span><span class="w"> </span><span class="py">matching</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">:</span><span class="nc">Label</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">OPTIONAL</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">optional</span><span class="w"> </span><span class="py">patterns</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">OPTIONAL</span><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">REL</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">m</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">filtering</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">condition</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">WITH</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">pipeline</span><span class="w"> </span><span class="py">processing</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">expression</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">alias</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">result</span><span class="w"> </span><span class="py">projection</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">expression</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">alias</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">sorting</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">expression</span><span class="w"> </span><span class="py">ASC</span><span class="p">|</span><span class="py">DESC</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">LIMIT</span><span class="err">/</span><span class="py">OFFSET</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">pagination</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">count</span><span class="w"> </span><span class="py">OFFSET</span><span class="w"> </span><span class="py">skip</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="kc">UNION</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">combine</span><span class="w"> </span><span class="py">results</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="kd">query</span><span class="nc">1</span><span class="w"> </span><span class="kc">UNION</span><span class="w"> </span><span class="kd">query</span><span class="nc">2</span><span class="w"> </span></span></span></code></pre></div> <h3 id="data-type-system-6" class="position-relative d-flex align-items-center group"> <span>Data Type System (§6)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="data-type-system-6" aria-haspopup="dialog" aria-label="Share link: Data Type System (§6)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="scalar-types" class="position-relative d-flex align-items-center group"> <span>Scalar Types</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="scalar-types" aria-haspopup="dialog" aria-label="Share link: Scalar Types"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li><strong>Boolean</strong>: <code>true</code>, <code>false</code>, <code>NULL</code></li> <li><strong>Integer</strong>: 64-bit signed integers</li> <li><strong>Float</strong>: 64-bit IEEE 754 floating point</li> <li><strong>Decimal</strong>: Arbitrary precision decimal</li> <li><strong>String</strong>: Unicode text (UTF-8)</li> <li><strong>Bytes</strong>: Raw binary data</li> </ul> <h4 id="temporal-types" class="position-relative d-flex align-items-center group"> <span>Temporal Types</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="temporal-types" aria-haspopup="dialog" aria-label="Share link: Temporal Types"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li><strong>Date</strong>: Calendar date (no time)</li> <li><strong>Time</strong>: Time of day (no date)</li> <li><strong>DateTime</strong>: Combined date and time with timezone</li> <li><strong>Duration</strong>: Time interval (ISO 8601)</li> </ul> <h4 id="collection-types" class="position-relative d-flex align-items-center group"> <span>Collection Types</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="collection-types" aria-haspopup="dialog" aria-label="Share link: Collection Types"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li><strong>List</strong>: Ordered sequence <code>[1, 2, 3]</code></li> <li><strong>Map</strong>: Key-value pairs <code>{key: value}</code></li> <li><strong>Path</strong>: Graph traversal path</li> </ul> <h4 id="graph-types" class="position-relative d-flex align-items-center group"> <span>Graph Types</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="graph-types" aria-haspopup="dialog" aria-label="Share link: Graph Types"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li><strong>Node</strong>: Graph node reference</li> <li><strong>Relationship</strong>: Graph edge reference</li> </ul> <h3 id="operators-10" class="position-relative d-flex align-items-center group"> <span>Operators (§10)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="operators-10" aria-haspopup="dialog" aria-label="Share link: Operators (§10)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="comparison" class="position-relative d-flex align-items-center group"> <span>Comparison</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="comparison" aria-haspopup="dialog" aria-label="Share link: Comparison"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><code>=</code>, <code>&lt;&gt;</code>, <code>!=</code>, <code>&lt;</code>, <code>&gt;</code>, <code>&lt;=</code>, <code>&gt;=</code>, <code>IS NULL</code>, <code>IS NOT NULL</code>, <code>IN</code>, <code>BETWEEN</code></p> <h4 id="logical" class="position-relative d-flex align-items-center group"> <span>Logical</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="logical" aria-haspopup="dialog" aria-label="Share link: Logical"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><code>AND</code>, <code>OR</code>, <code>NOT</code>, <code>XOR</code></p> <h4 id="arithmetic" class="position-relative d-flex align-items-center group"> <span>Arithmetic</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="arithmetic" aria-haspopup="dialog" aria-label="Share link: Arithmetic"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>, <code>%</code>, <code>^</code></p> <h4 id="string" class="position-relative d-flex align-items-center group"> <span>String</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="string" aria-haspopup="dialog" aria-label="Share link: String"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><code>STARTS WITH</code>, <code>ENDS WITH</code>, <code>CONTAINS</code>, <code>=~</code> (regex)</p> <h4 id="list" class="position-relative d-flex align-items-center group"> <span>List</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="list" aria-haspopup="dialog" aria-label="Share link: List"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><code>IN</code>, <code>+</code> (concatenation), <code>[index]</code>, <code>[start..end]</code></p> <h3 id="functions-11" class="position-relative d-flex align-items-center group"> <span>Functions (§11)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="functions-11" aria-haspopup="dialog" aria-label="Share link: Functions (§11)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="aggregation" class="position-relative d-flex align-items-center group"> <span>Aggregation</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="aggregation" aria-haspopup="dialog" aria-label="Share link: Aggregation"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><code>COUNT</code>, <code>SUM</code>, <code>AVG</code>, <code>MIN</code>, <code>MAX</code>, <code>COLLECT</code>, <code>STRING_AGG</code></p> <h4 id="string-1" class="position-relative d-flex align-items-center group"> <span>String</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="string-1" aria-haspopup="dialog" aria-label="Share link: String"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><code>UPPER</code>, <code>LOWER</code>, <code>TRIM</code>, <code>SUBSTRING</code>, <code>LENGTH</code>, <code>CONCAT</code>, <code>REPLACE</code>, <code>SPLIT</code></p> <h4 id="mathematical" class="position-relative d-flex align-items-center group"> <span>Mathematical</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="mathematical" aria-haspopup="dialog" aria-label="Share link: Mathematical"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><code>ABS</code>, <code>CEIL</code>, <code>FLOOR</code>, <code>ROUND</code>, <code>SQRT</code>, <code>POWER</code>, <code>SIN</code>, <code>COS</code>, <code>TAN</code>, <code>LOG</code>, <code>EXP</code>, <code>RAND</code></p> <h4 id="temporal" class="position-relative d-flex align-items-center group"> <span>Temporal</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="temporal" aria-haspopup="dialog" aria-label="Share link: Temporal"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><code>NOW</code>, <code>CURRENT_DATE</code>, <code>CURRENT_TIME</code>, <code>CURRENT_TIMESTAMP</code>, <code>DATE</code>, <code>DATETIME</code>, <code>TIME</code>, <code>DURATION</code></p> <h4 id="list-1" class="position-relative d-flex align-items-center group"> <span>List</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="list-1" aria-haspopup="dialog" aria-label="Share link: List"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><code>SIZE</code>, <code>HEAD</code>, <code>LAST</code>, <code>TAIL</code>, <code>REVERSE</code>, <code>RANGE</code></p> <h4 id="path" class="position-relative d-flex align-items-center group"> <span>Path</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="path" aria-haspopup="dialog" aria-label="Share link: Path"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><code>LENGTH</code>, <code>NODES</code>, <code>RELATIONSHIPS</code></p> <h4 id="type-conversion" class="position-relative d-flex align-items-center group"> <span>Type Conversion</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="type-conversion" aria-haspopup="dialog" aria-label="Share link: Type Conversion"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><code>TOSTRING</code>, <code>TOINTEGER</code>, <code>TOFLOAT</code>, <code>TOBOOLEAN</code></p> <h3 id="schema-and-constraints-12" class="position-relative d-flex align-items-center group"> <span>Schema and Constraints (§12)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="schema-and-constraints-12" aria-haspopup="dialog" aria-label="Share link: Schema and Constraints (§12)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="indexes" class="position-relative d-flex align-items-center group"> <span>Indexes</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="indexes" aria-haspopup="dialog" aria-label="Share link: Indexes"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">FOR</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">:</span><span class="nc">Label</span><span class="p">)</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="err">.</span><span class="py">property</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">index_name</span><span class="w"> </span><span class="py">FOR</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">:</span><span class="nc">Label</span><span class="p">)</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="err">.</span><span class="py">prop1</span><span class="p">,</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">prop2</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">DROP</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">index_name</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SHOW</span><span class="w"> </span><span class="py">INDEXES</span><span class="w"> </span></span></span></code></pre></div> <h4 id="constraints" class="position-relative d-flex align-items-center group"> <span>Constraints</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="constraints" aria-haspopup="dialog" aria-label="Share link: Constraints"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">CREATE</span><span class="w"> </span><span class="py">CONSTRAINT</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">:</span><span class="nc">Label</span><span class="p">)</span><span class="w"> </span><span class="py">ASSERT</span><span class="w"> </span><span class="py">n</span><span class="err">.</span><span class="py">property</span><span class="w"> </span><span class="py">IS</span><span class="w"> </span><span class="py">UNIQUE</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">CONSTRAINT</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="p">(</span><span class="py">n</span><span class="p">:</span><span class="nc">Label</span><span class="p">)</span><span class="w"> </span><span class="py">ASSERT</span><span class="w"> </span><span class="py">EXISTS</span><span class="p">(</span><span class="py">n</span><span class="err">.</span><span class="py">property</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">DROP</span><span class="w"> </span><span class="py">CONSTRAINT</span><span class="w"> </span><span class="py">constraint_name</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SHOW</span><span class="w"> </span><span class="py">CONSTRAINTS</span><span class="w"> </span></span></span></code></pre></div> <h3 id="transaction-model-13" class="position-relative d-flex align-items-center group"> <span>Transaction Model (§13)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="transaction-model-13" aria-haspopup="dialog" aria-label="Share link: Transaction Model (§13)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="acid-properties" class="position-relative d-flex align-items-center group"> <span>ACID Properties</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="acid-properties" aria-haspopup="dialog" aria-label="Share link: ACID Properties"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li><strong>Atomicity</strong>: All-or-nothing execution</li> <li><strong>Consistency</strong>: Valid state transitions</li> <li><strong>Isolation</strong>: Concurrent transaction isolation</li> <li><strong>Durability</strong>: Committed changes persist</li> </ul> <h4 id="transaction-control" class="position-relative d-flex align-items-center group"> <span>Transaction Control</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="transaction-control" aria-haspopup="dialog" aria-label="Share link: Transaction Control"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="py">BEGIN</span><span class="w"> </span><span class="py">TRANSACTION</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">//</span><span class="w"> </span><span class="py">statements</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">COMMIT</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Or</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ROLLBACK</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">//</span><span class="w"> </span><span class="py">Savepoints</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SAVEPOINT</span><span class="w"> </span><span class="py">savepoint_name</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ROLLBACK</span><span class="w"> </span><span class="py">TO</span><span class="w"> </span><span class="py">SAVEPOINT</span><span class="w"> </span><span class="py">savepoint_name</span><span class="w"> </span></span></span></code></pre></div> <h4 id="isolation-levels" class="position-relative d-flex align-items-center group"> <span>Isolation Levels</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="isolation-levels" aria-haspopup="dialog" aria-label="Share link: Isolation Levels"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li><strong>SERIALIZABLE</strong>: Strongest isolation (default)</li> <li><strong>READ COMMITTED</strong>: Read committed data only</li> <li><strong>READ UNCOMMITTED</strong>: Read uncommitted data</li> </ul> <h3 id="error-handling" class="position-relative d-flex align-items-center group"> <span>Error Handling</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="error-handling" aria-haspopup="dialog" aria-label="Share link: Error Handling"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="error-codes" class="position-relative d-flex align-items-center group"> <span>Error Codes</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="error-codes" aria-haspopup="dialog" aria-label="Share link: Error Codes"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>ISO/IEC 39075:2024 aligns with SQL error codes:</p> <table> <thead> <tr> <th>Class</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td>00xxx</td> <td>Success</td> </tr> <tr> <td>01xxx</td> <td>Warning</td> </tr> <tr> <td>02xxx</td> <td>No data</td> </tr> <tr> <td>21xxx</td> <td>Cardinality violation</td> </tr> <tr> <td>22xxx</td> <td>Data exception</td> </tr> <tr> <td>23xxx</td> <td>Constraint violation</td> </tr> <tr> <td>42xxx</td> <td>Syntax error</td> </tr> <tr> <td>40xxx</td> <td>Transaction rollback</td> </tr> </tbody> </table> <h4 id="error-format" class="position-relative d-flex align-items-center group"> <span>Error Format</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="error-format" aria-haspopup="dialog" aria-label="Share link: Error Format"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;code&#34;</span><span class="p">:</span> <span class="s2">&#34;42000&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;message&#34;</span><span class="p">:</span> <span class="s2">&#34;Syntax error: unexpected token&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;position&#34;</span><span class="p">:</span> <span class="mi">12</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;sqlstate&#34;</span><span class="p">:</span> <span class="s2">&#34;42000&#34;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> <h3 id="standard-conformance" class="position-relative d-flex align-items-center group"> <span>Standard Conformance</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="standard-conformance" aria-haspopup="dialog" aria-label="Share link: Standard Conformance"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="conformance-levels" class="position-relative d-flex align-items-center group"> <span>Conformance Levels</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="conformance-levels" aria-haspopup="dialog" aria-label="Share link: Conformance Levels"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ol> <li><strong>Core</strong>: Mandatory features all implementations must support</li> <li><strong>Enhanced</strong>: Optional features for extended functionality</li> <li><strong>Full</strong>: Core + all Enhanced features</li> </ol> <p>Geode implements <strong>Full</strong> conformance.</p> <h4 id="conformance-claims" class="position-relative d-flex align-items-center group"> <span>Conformance Claims</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="conformance-claims" aria-haspopup="dialog" aria-label="Share link: Conformance Claims"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Implementations must document:</p> <ul> <li>Which features are supported</li> <li>Test results from ISO test suite</li> <li>Deviations or extensions</li> </ul> <h3 id="extensions-and-future-work" class="position-relative d-flex align-items-center group"> <span>Extensions and Future Work</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="extensions-and-future-work" aria-haspopup="dialog" aria-label="Share link: Extensions and Future Work"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="planned-extensions" class="position-relative d-flex align-items-center group"> <span>Planned Extensions</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="planned-extensions" aria-haspopup="dialog" aria-label="Share link: Planned Extensions"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>ISO/IEC JTC 1/SC 32/WG 3 is considering:</p> <ul> <li>Temporal graph queries (time-traveling graphs)</li> <li>Recursive common table expressions (CTEs)</li> <li>Graph analytics functions</li> <li>Streaming query extensions</li> <li>Multi-graph operations</li> </ul> <h4 id="vendor-extensions" class="position-relative d-flex align-items-center group"> <span>Vendor Extensions</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="vendor-extensions" aria-haspopup="dialog" aria-label="Share link: Vendor Extensions"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>While compliant, implementations may add:</p> <ul> <li>Additional index types (vector, full-text)</li> <li>Custom functions</li> <li>Performance optimizations</li> <li>Platform-specific features</li> </ul> <h3 id="comparison-to-other-standards" class="position-relative d-flex align-items-center group"> <span>Comparison to Other Standards</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="comparison-to-other-standards" aria-haspopup="dialog" aria-label="Share link: Comparison to Other Standards"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="vs-sql-isoiec-9075" class="position-relative d-flex align-items-center group"> <span>vs. SQL (ISO/IEC 9075)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="vs-sql-isoiec-9075" aria-haspopup="dialog" aria-label="Share link: vs. SQL (ISO/IEC 9075)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li><strong>Similarity</strong>: Declarative syntax, ACID transactions, type system</li> <li><strong>Difference</strong>: Graph patterns vs. table joins</li> <li><strong>Complementary</strong>: GQL for graphs, SQL for tables</li> </ul> <h4 id="vs-sparql-w3c" class="position-relative d-flex align-items-center group"> <span>vs. SPARQL (W3C)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="vs-sparql-w3c" aria-haspopup="dialog" aria-label="Share link: vs. SPARQL (W3C)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li><strong>Similarity</strong>: Graph query languages</li> <li><strong>Difference</strong>: SPARQL for RDF graphs, GQL for property graphs</li> <li><strong>Model</strong>: SPARQL (subject-predicate-object), GQL (labeled property graphs)</li> </ul> <h4 id="vs-cypher-opencypher" class="position-relative d-flex align-items-center group"> <span>vs. Cypher (openCypher)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="vs-cypher-opencypher" aria-haspopup="dialog" aria-label="Share link: vs. Cypher (openCypher)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><ul> <li><strong>Relationship</strong>: GQL builds on Cypher concepts</li> <li><strong>Standardization</strong>: GQL is ISO standard, Cypher is community specification</li> <li><strong>Evolution</strong>: GQL formalizes and extends Cypher patterns</li> </ul> <h3 id="implementation-in-geode" class="position-relative d-flex align-items-center group"> <span>Implementation in Geode</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="implementation-in-geode" aria-haspopup="dialog" aria-label="Share link: Implementation in Geode"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Geode provides:</p> <ul> <li><strong>100% compliance</strong>: Documented scope and diagnostics</li> <li><strong>Standards Documentation</strong>: ISO section references throughout</li> <li><strong>Test Verification</strong>: Continuous profile-based testing</li> </ul> <h3 id="related-topics" class="position-relative d-flex align-items-center group"> <span>Related Topics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="related-topics" aria-haspopup="dialog" aria-label="Share link: Related Topics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li><strong>GQL Compliance</strong>: Geode&rsquo;s conformance details</li> <li><strong>GQL Reference</strong>: Complete language documentation</li> <li><strong>GQL Syntax</strong>: Syntax guide</li> <li><strong>ISO GQL</strong>: Implementation notes</li> </ul> <h3 id="further-reading" class="position-relative d-flex align-items-center group"> <span>Further Reading</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="further-reading" aria-haspopup="dialog" aria-label="Share link: Further Reading"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><ul> <li><a href="/tags/gql-compliance/" >GQL Compliance</a> - Conformance details</li> <li><a href="/tags/iso-gql/" >ISO GQL Implementation</a> - Implementation guide</li> <li><a href="/tags/gql-reference/" >GQL Reference</a> - Language reference</li> <li><a href="/tags/gql-syntax/" >GQL Syntax</a> - Syntax guide</li> <li><a href="https://www.iso.org/standard/76120.html" aria-label="Official ISO Standard – opens in new window" target="_blank" rel="noopener noreferrer" >Official ISO Standard <span aria-hidden="true" class="external-icon">↗</span> </a> - Purchase from ISO</li> </ul> <h3 id="detailed-feature-specification" class="position-relative d-flex align-items-center group"> <span>Detailed Feature Specification</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="detailed-feature-specification" aria-haspopup="dialog" aria-label="Share link: Detailed Feature Specification"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="pattern-matching-grammar-7" class="position-relative d-flex align-items-center group"> <span>Pattern Matching Grammar (§7)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="pattern-matching-grammar-7" aria-haspopup="dialog" aria-label="Share link: Pattern Matching Grammar (§7)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Complete BNF grammar for ISO GQL patterns:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bnf" data-lang="bnf"><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nc">graph_pattern</span><span class="p">&gt;</span> <span class="o">::=</span> </span></span><span class="line"><span class="cl"> <span class="p">&lt;</span><span class="nc">node_pattern</span><span class="p">&gt;</span> [ <span class="p">&lt;</span><span class="nc">relationship_pattern</span><span class="p">&gt;</span> <span class="p">&lt;</span><span class="nc">node_pattern</span><span class="p">&gt;</span> ]* </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nc">node_pattern</span><span class="p">&gt;</span> <span class="o">::=</span> </span></span><span class="line"><span class="cl"> &#39;(&#39; [ <span class="p">&lt;</span><span class="nc">variable</span><span class="p">&gt;</span> ] [ <span class="p">&lt;</span><span class="nc">label_expression</span><span class="p">&gt;</span> ] [ <span class="p">&lt;</span><span class="nc">property_specification</span><span class="p">&gt;</span> ] &#39;)&#39; </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nc">label_expression</span><span class="p">&gt;</span> <span class="o">::=</span> </span></span><span class="line"><span class="cl"> &#39;:&#39; <span class="p">&lt;</span><span class="nc">label_name</span><span class="p">&gt;</span> [ &#39;:&#39; <span class="p">&lt;</span><span class="nc">label_name</span><span class="p">&gt;</span> ]* </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nc">property_specification</span><span class="p">&gt;</span> <span class="o">::=</span> </span></span><span class="line"><span class="cl"> &#39;{&#39; <span class="p">&lt;</span><span class="nc">property</span><span class="p">&gt;</span> [ &#39;,&#39; <span class="p">&lt;</span><span class="nc">property</span><span class="p">&gt;</span> ]* &#39;}&#39; </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nc">property</span><span class="p">&gt;</span> <span class="o">::=</span> </span></span><span class="line"><span class="cl"> <span class="p">&lt;</span><span class="nc">property_name</span><span class="p">&gt;</span> &#39;:&#39; <span class="p">&lt;</span><span class="nc">expression</span><span class="p">&gt;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nc">relationship_pattern</span><span class="p">&gt;</span> <span class="o">::=</span> </span></span><span class="line"><span class="cl"> &#39;-&#39; &#39;[&#39; [ <span class="p">&lt;</span><span class="nc">variable</span><span class="p">&gt;</span> ] [ <span class="p">&lt;</span><span class="nc">type_expression</span><span class="p">&gt;</span> ] [ <span class="p">&lt;</span><span class="nc">property_specification</span><span class="p">&gt;</span> ] &#39;]&#39; &#39;-&gt;&#39; </span></span><span class="line"><span class="cl"> | &#39;&lt;-&#39; &#39;[&#39; [ <span class="p">&lt;</span><span class="nc">variable</span><span class="p">&gt;</span> ] [ <span class="p">&lt;</span><span class="nc">type_expression</span><span class="p">&gt;</span> ] [ <span class="p">&lt;</span><span class="nc">property_specification</span><span class="p">&gt;</span> ] &#39;]&#39; &#39;-&#39; </span></span><span class="line"><span class="cl"> | &#39;-&#39; &#39;[&#39; [ <span class="p">&lt;</span><span class="nc">variable</span><span class="p">&gt;</span> ] [ <span class="p">&lt;</span><span class="nc">type_expression</span><span class="p">&gt;</span> ] [ <span class="p">&lt;</span><span class="nc">property_specification</span><span class="p">&gt;</span> ] &#39;]&#39; &#39;-&#39; </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nc">type_expression</span><span class="p">&gt;</span> <span class="o">::=</span> </span></span><span class="line"><span class="cl"> &#39;:&#39; <span class="p">&lt;</span><span class="nc">type_name</span><span class="p">&gt;</span> [ &#39;|&#39; <span class="p">&lt;</span><span class="nc">type_name</span><span class="p">&gt;</span> ]* </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="p">&lt;</span><span class="nc">variable_length</span><span class="p">&gt;</span> <span class="o">::=</span> </span></span><span class="line"><span class="cl"> &#39;*&#39; [ <span class="p">&lt;</span><span class="nc">min_hops</span><span class="p">&gt;</span> ] [ &#39;..&#39; [ <span class="p">&lt;</span><span class="nc">max_hops</span><span class="p">&gt;</span> ] ] </span></span></code></pre></div> <h4 id="type-system-specification-6" class="position-relative d-flex align-items-center group"> <span>Type System Specification (§6)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="type-system-specification-6" aria-haspopup="dialog" aria-label="Share link: Type System Specification (§6)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Complete type hierarchy:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">Type System Hierarchy </span></span><span class="line"><span class="cl">===================== </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl">Value Types: </span></span><span class="line"><span class="cl">├── NULL </span></span><span class="line"><span class="cl">├── Scalar Types </span></span><span class="line"><span class="cl">│ ├── Boolean </span></span><span class="line"><span class="cl">│ ├── Numeric </span></span><span class="line"><span class="cl">│ │ ├── Integer (64-bit signed) </span></span><span class="line"><span class="cl">│ │ ├── Float (IEEE 754 double) </span></span><span class="line"><span class="cl">│ │ └── Decimal (arbitrary precision) </span></span><span class="line"><span class="cl">│ ├── String (UTF-8) </span></span><span class="line"><span class="cl">│ └── Bytes </span></span><span class="line"><span class="cl">├── Temporal Types </span></span><span class="line"><span class="cl">│ ├── Date (ISO 8601) </span></span><span class="line"><span class="cl">│ ├── Time (with timezone) </span></span><span class="line"><span class="cl">│ ├── DateTime (ISO 8601 with timezone) </span></span><span class="line"><span class="cl">│ └── Duration (ISO 8601 duration) </span></span><span class="line"><span class="cl">├── Spatial Types </span></span><span class="line"><span class="cl">│ └── Point (2D/3D with CRS) </span></span><span class="line"><span class="cl">├── Collection Types </span></span><span class="line"><span class="cl">│ ├── List [ordered, allows duplicates] </span></span><span class="line"><span class="cl">│ ├── Set [unordered, no duplicates] </span></span><span class="line"><span class="cl">│ └── Map {key: value pairs} </span></span><span class="line"><span class="cl">└── Graph Types </span></span><span class="line"><span class="cl"> ├── Node (entity reference) </span></span><span class="line"><span class="cl"> ├── Relationship (edge reference) </span></span><span class="line"><span class="cl"> └── Path (node-relationship sequence) </span></span></code></pre></div> <h4 id="function-specification-examples" class="position-relative d-flex align-items-center group"> <span>Function Specification Examples</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="function-specification-examples" aria-haspopup="dialog" aria-label="Share link: Function Specification Examples"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Detailed specifications from ISO §11:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">String</span><span class="w"> </span><span class="py">Functions</span><span class="w"> </span><span class="p">(</span><span class="err">§</span><span class="py">11</span><span class="mf">.3</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FUNCTION</span><span class="w"> </span><span class="py">substring</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">str</span><span class="p">:</span><span class="w"> </span><span class="nc">STRING</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">start</span><span class="p">:</span><span class="w"> </span><span class="nc">INTEGER</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">length</span><span class="p">:</span><span class="w"> </span><span class="nc">INTEGER</span><span class="err">?</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="w"> </span><span class="py">RETURNS</span><span class="w"> </span><span class="py">STRING</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Behavior</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">start</span><span class="w"> </span><span class="py">is</span><span class="w"> </span><span class="py">0</span><span class="err">-</span><span class="py">indexed</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">length</span><span class="w"> </span><span class="py">is</span><span class="w"> </span><span class="py">optional</span><span class="w"> </span><span class="p">(</span><span class="py">defaults</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">end</span><span class="w"> </span><span class="py">of</span><span class="w"> </span><span class="py">string</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Returns</span><span class="w"> </span><span class="py">empty</span><span class="w"> </span><span class="py">string</span><span class="w"> </span><span class="py">if</span><span class="w"> </span><span class="py">start</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">string</span><span class="w"> </span><span class="py">length</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">NULL</span><span class="w"> </span><span class="py">propagation</span><span class="p">:</span><span class="w"> </span><span class="nc">NULL</span><span class="w"> </span><span class="kd">input</span><span class="w"> </span><span class="err">→</span><span class="w"> </span><span class="nc">NULL</span><span class="w"> </span><span class="py">output</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">substring</span><span class="p">(</span><span class="py">p</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">0</span><span class="p">,</span><span class="w"> </span><span class="py">3</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">initials</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Mathematical</span><span class="w"> </span><span class="py">Functions</span><span class="w"> </span><span class="p">(</span><span class="err">§</span><span class="py">11</span><span class="mf">.5</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FUNCTION</span><span class="w"> </span><span class="py">round</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">value</span><span class="p">:</span><span class="w"> </span><span class="nc">NUMERIC</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">precision</span><span class="p">:</span><span class="w"> </span><span class="nc">INTEGER</span><span class="w"> </span><span class="py">DEFAULT</span><span class="w"> </span><span class="py">0</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="w"> </span><span class="py">RETURNS</span><span class="w"> </span><span class="py">NUMERIC</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Behavior</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">Rounds</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">nearest</span><span class="w"> </span><span class="py">integer</span><span class="w"> </span><span class="py">by</span><span class="w"> </span><span class="py">default</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">precision</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">0</span><span class="p">:</span><span class="w"> </span><span class="nc">decimal</span><span class="w"> </span><span class="py">places</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">precision</span><span class="w"> </span><span class="err">&lt;</span><span class="w"> </span><span class="py">0</span><span class="p">:</span><span class="w"> </span><span class="nc">rounds</span><span class="w"> </span><span class="py">before</span><span class="w"> </span><span class="py">decimal</span><span class="w"> </span><span class="py">point</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">Banker</span><span class="err">&#39;</span><span class="py">s</span><span class="w"> </span><span class="py">rounding</span><span class="w"> </span><span class="p">(</span><span class="py">round</span><span class="w"> </span><span class="py">half</span><span class="w"> </span><span class="py">to</span><span class="w"> </span><span class="py">even</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Product</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">round</span><span class="p">(</span><span class="py">p</span><span class="err">.</span><span class="py">price</span><span class="p">,</span><span class="w"> </span><span class="py">2</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">rounded_price</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Aggregation</span><span class="w"> </span><span class="py">Functions</span><span class="w"> </span><span class="p">(</span><span class="err">§</span><span class="py">11</span><span class="mf">.7</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FUNCTION</span><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">expression</span><span class="p">:</span><span class="w"> </span><span class="nc">ANY</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="w"> </span><span class="py">RETURNS</span><span class="w"> </span><span class="py">INTEGER</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Behavior</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="nc">count</span><span class="p">(</span><span class="err">*</span><span class="p">):</span><span class="w"> </span><span class="nc">counts</span><span class="w"> </span><span class="py">all</span><span class="w"> </span><span class="py">rows</span><span class="w"> </span><span class="py">including</span><span class="w"> </span><span class="py">NULL</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="py">expr</span><span class="p">):</span><span class="w"> </span><span class="nc">counts</span><span class="w"> </span><span class="py">non</span><span class="err">-</span><span class="py">NULL</span><span class="w"> </span><span class="py">values</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">optional</span><span class="p">:</span><span class="w"> </span><span class="nc">count</span><span class="p">(</span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">expr</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="py">u</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">total_users</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">users_with_email</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="py">DISTINCT</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">country</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">unique_countries</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h3 id="advanced-iso-features" class="position-relative d-flex align-items-center group"> <span>Advanced ISO Features</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="advanced-iso-features" aria-haspopup="dialog" aria-label="Share link: Advanced ISO Features"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="recursive-query-patterns" class="position-relative d-flex align-items-center group"> <span>Recursive Query Patterns</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="recursive-query-patterns" aria-haspopup="dialog" aria-label="Share link: Recursive Query Patterns"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>ISO specifies recursive queries through WITH clauses:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Organizational</span><span class="w"> </span><span class="py">hierarchy</span><span class="w"> </span><span class="py">traversal</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">RECURSIVE</span><span class="w"> </span><span class="py">hierarchy</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Base</span><span class="w"> </span><span class="py">case</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">emp</span><span class="p">:</span><span class="nc">Employee</span><span class="w"> </span><span class="p">{</span><span class="py">id</span><span class="p">:</span><span class="w"> </span><span class="nv">$start_id</span><span class="p">})</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nc">RETURN</span><span class="w"> </span><span class="py">emp</span><span class="p">,</span><span class="w"> </span><span class="py">0</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">level</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kc">UNION</span><span class="w"> </span><span class="py">ALL</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">--</span><span class="w"> </span><span class="py">Recursive</span><span class="w"> </span><span class="py">case</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">h</span><span class="err">.</span><span class="py">emp</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">REPORTS_TO</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">manager</span><span class="p">:</span><span class="nc">Employee</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">hierarchy</span><span class="w"> </span><span class="py">h</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">h</span><span class="err">.</span><span class="py">level</span><span class="w"> </span><span class="err">&lt;</span><span class="w"> </span><span class="nv">$max_depth</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="py">manager</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">emp</span><span class="p">,</span><span class="w"> </span><span class="py">h</span><span class="err">.</span><span class="py">level</span><span class="w"> </span><span class="err">+</span><span class="w"> </span><span class="py">1</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">level</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SELECT</span><span class="w"> </span><span class="py">emp</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">level</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FROM</span><span class="w"> </span><span class="py">hierarchy</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">level</span><span class="p">,</span><span class="w"> </span><span class="py">emp</span><span class="err">.</span><span class="py">name</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="window-functions-iso-extension" class="position-relative d-flex align-items-center group"> <span>Window Functions (ISO Extension)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="window-functions-iso-extension" aria-haspopup="dialog" aria-label="Share link: Window Functions (ISO Extension)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Advanced analytical queries:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Running</span><span class="w"> </span><span class="py">totals</span><span class="w"> </span><span class="py">and</span><span class="w"> </span><span class="py">moving</span><span class="w"> </span><span class="py">averages</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">sale</span><span class="p">:</span><span class="nc">Sale</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">sale</span><span class="err">.</span><span class="py">date</span><span class="w"> </span><span class="err">&gt;</span><span class="p">=</span><span class="w"> </span><span class="py">date</span><span class="p">(</span><span class="err">&#39;</span><span class="py">2025</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">01</span><span class="err">&#39;</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">sale</span><span class="err">.</span><span class="py">date</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">sale</span><span class="err">.</span><span class="py">amount</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">sum</span><span class="p">(</span><span class="py">sale</span><span class="err">.</span><span class="py">amount</span><span class="p">)</span><span class="w"> </span><span class="py">OVER</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">sale</span><span class="err">.</span><span class="py">date</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ROWS</span><span class="w"> </span><span class="py">BETWEEN</span><span class="w"> </span><span class="py">UNBOUNDED</span><span class="w"> </span><span class="py">PRECEDING</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">CURRENT</span><span class="w"> </span><span class="py">ROW</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">running_total</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">avg</span><span class="p">(</span><span class="py">sale</span><span class="err">.</span><span class="py">amount</span><span class="p">)</span><span class="w"> </span><span class="py">OVER</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">sale</span><span class="err">.</span><span class="py">date</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ROWS</span><span class="w"> </span><span class="py">BETWEEN</span><span class="w"> </span><span class="py">6</span><span class="w"> </span><span class="py">PRECEDING</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">CURRENT</span><span class="w"> </span><span class="py">ROW</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">moving_avg_7day</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">sale</span><span class="err">.</span><span class="py">date</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Ranking</span><span class="w"> </span><span class="py">functions</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">product</span><span class="p">:</span><span class="nc">Product</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">product</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">product</span><span class="err">.</span><span class="py">sales</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">rank</span><span class="p">()</span><span class="w"> </span><span class="py">OVER</span><span class="w"> </span><span class="p">(</span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">product</span><span class="err">.</span><span class="py">sales</span><span class="w"> </span><span class="py">DESC</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">sales_rank</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">dense_rank</span><span class="p">()</span><span class="w"> </span><span class="py">OVER</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">PARTITION</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">product</span><span class="err">.</span><span class="py">category</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">product</span><span class="err">.</span><span class="py">sales</span><span class="w"> </span><span class="py">DESC</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">category_rank</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">percent_rank</span><span class="p">()</span><span class="w"> </span><span class="py">OVER</span><span class="w"> </span><span class="p">(</span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">product</span><span class="err">.</span><span class="py">sales</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">percentile</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="common-table-expressions-ctes" class="position-relative d-flex align-items-center group"> <span>Common Table Expressions (CTEs)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="common-table-expressions-ctes" aria-haspopup="dialog" aria-label="Share link: Common Table Expressions (CTEs)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>ISO-standard query composition:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Multi</span><span class="err">-</span><span class="py">step</span><span class="w"> </span><span class="kd">query</span><span class="w"> </span><span class="nc">with</span><span class="w"> </span><span class="py">CTEs</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WITH</span><span class="w"> </span><span class="py">active_users</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">last_login</span><span class="w"> </span><span class="err">&gt;</span><span class="p">=</span><span class="w"> </span><span class="py">datetime</span><span class="p">()</span><span class="w"> </span><span class="err">-</span><span class="w"> </span><span class="py">duration</span><span class="p">(</span><span class="err">&#39;</span><span class="py">P30D</span><span class="err">&#39;</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">power_users</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">PURCHASED</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Product</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WITH</span><span class="w"> </span><span class="py">u</span><span class="p">,</span><span class="w"> </span><span class="py">count</span><span class="p">(</span><span class="py">p</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">purchase_count</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WHERE</span><span class="w"> </span><span class="py">purchase_count</span><span class="w"> </span><span class="err">&gt;</span><span class="w"> </span><span class="py">10</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">targeted_segment</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="err">*</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">active_users</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">INTERSECT</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SELECT</span><span class="w"> </span><span class="err">*</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">FROM</span><span class="w"> </span><span class="py">power_users</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">u</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">u</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">targeted_segment</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">email</span><span class="p">,</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">name</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">u</span><span class="err">.</span><span class="py">last_login</span><span class="w"> </span><span class="py">DESC</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h3 id="iso-compliance-in-practice" class="position-relative d-flex align-items-center group"> <span>ISO Compliance in Practice</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="iso-compliance-in-practice" aria-haspopup="dialog" aria-label="Share link: ISO Compliance in Practice"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="real-world-compliance-validation" class="position-relative d-flex align-items-center group"> <span>Real-World Compliance Validation</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="real-world-compliance-validation" aria-haspopup="dialog" aria-label="Share link: Real-World Compliance Validation"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">ProductionComplianceMonitor</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Monitor ISO compliance in production environment.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">client</span> </span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">violations</span> <span class="o">=</span> <span class="p">[]</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">monitor_query_compliance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="p">,</span> <span class="n">params</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Check if query follows ISO standards.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="n">violations</span> <span class="o">=</span> <span class="p">[]</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Check 1: Use of vendor-specific syntax</span> </span></span><span class="line"><span class="cl"> <span class="n">vendor_patterns</span> <span class="o">=</span> <span class="p">[</span> </span></span><span class="line"><span class="cl"> <span class="sa">r</span><span class="s1">&#39;CALL apoc\.&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="sa">r</span><span class="s1">&#39;CALL gds\.&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="sa">r</span><span class="s1">&#39;CREATE FULLTEXT INDEX&#39;</span><span class="p">,</span> <span class="c1"># Vendor extension</span> </span></span><span class="line"><span class="cl"> <span class="p">]</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">pattern</span> <span class="ow">in</span> <span class="n">vendor_patterns</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">pattern</span><span class="p">,</span> <span class="n">query</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">IGNORECASE</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="n">violations</span><span class="o">.</span><span class="n">append</span><span class="p">({</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;type&#39;</span><span class="p">:</span> <span class="s1">&#39;vendor_syntax&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;pattern&#39;</span><span class="p">:</span> <span class="n">pattern</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;message&#39;</span><span class="p">:</span> <span class="s1">&#39;Query uses vendor-specific syntax&#39;</span> </span></span><span class="line"><span class="cl"> <span class="p">})</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Check 2: Parameter usage (should use $param, not string concat)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;&#39;</span><span class="si">{</span><span class="n">param</span><span class="si">}</span><span class="s2">&#39;&#34;</span> <span class="ow">in</span> <span class="n">query</span> <span class="ow">or</span> <span class="sa">f</span><span class="s1">&#39;&#34;</span><span class="si">{</span><span class="n">param</span><span class="si">}</span><span class="s1">&#34;&#39;</span> <span class="ow">in</span> <span class="n">query</span> <span class="k">for</span> <span class="n">param</span> <span class="ow">in</span> <span class="n">params</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="n">violations</span><span class="o">.</span><span class="n">append</span><span class="p">({</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;type&#39;</span><span class="p">:</span> <span class="s1">&#39;sql_injection_risk&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;message&#39;</span><span class="p">:</span> <span class="s1">&#39;Parameters embedded in query string&#39;</span> </span></span><span class="line"><span class="cl"> <span class="p">})</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Check 3: ISO-compliant NULL handling</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;= NULL|!= NULL&#39;</span><span class="p">,</span> <span class="n">query</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="n">violations</span><span class="o">.</span><span class="n">append</span><span class="p">({</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;type&#39;</span><span class="p">:</span> <span class="s1">&#39;incorrect_null_handling&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;message&#39;</span><span class="p">:</span> <span class="s1">&#39;Should use IS NULL/IS NOT NULL&#39;</span> </span></span><span class="line"><span class="cl"> <span class="p">})</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">violations</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">violations</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">violations</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;ISO compliance violations detected: </span><span class="si">{</span><span class="n">violations</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="nb">len</span><span class="p">(</span><span class="n">violations</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">generate_compliance_report</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Generate production compliance report.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="n">report</span> <span class="o">=</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;total_queries&#39;</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">violations</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1000</span><span class="p">,</span> <span class="c1"># Example</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;violations&#39;</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">violations</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;compliance_rate&#39;</span><span class="p">:</span> <span class="mf">1.0</span> <span class="o">-</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">violations</span><span class="p">)</span> <span class="o">/</span> <span class="mi">1000</span><span class="p">),</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;violation_types&#39;</span><span class="p">:</span> <span class="p">{}</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">violation</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">violations</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">vtype</span> <span class="o">=</span> <span class="n">violation</span><span class="p">[</span><span class="s1">&#39;type&#39;</span><span class="p">]</span> </span></span><span class="line"><span class="cl"> <span class="n">report</span><span class="p">[</span><span class="s1">&#39;violation_types&#39;</span><span class="p">][</span><span class="n">vtype</span><span class="p">]</span> <span class="o">=</span> \ </span></span><span class="line"><span class="cl"> <span class="n">report</span><span class="p">[</span><span class="s1">&#39;violation_types&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">vtype</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">report</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Usage in production</span> </span></span><span class="line"><span class="cl"><span class="n">monitor</span> <span class="o">=</span> <span class="n">ProductionComplianceMonitor</span><span class="p">(</span><span class="n">client</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="nd">@app.middleware</span><span class="p">(</span><span class="s2">&#34;http&#34;</span><span class="p">)</span> </span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">check_query_compliance</span><span class="p">(</span><span class="n">request</span><span class="p">,</span> <span class="n">call_next</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Middleware to monitor query compliance.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">request</span><span class="o">.</span><span class="n">state</span><span class="p">,</span> <span class="s1">&#39;query&#39;</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">monitor</span><span class="o">.</span><span class="n">monitor_query_compliance</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="n">request</span><span class="o">.</span><span class="n">state</span><span class="o">.</span><span class="n">query</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">request</span><span class="o">.</span><span class="n">state</span><span class="o">.</span><span class="n">params</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="n">response</span> <span class="o">=</span> <span class="k">await</span> <span class="n">call_next</span><span class="p">(</span><span class="n">request</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">response</span> </span></span></code></pre></div> <h4 id="iso-migration-path-from-legacy-systems" class="position-relative d-flex align-items-center group"> <span>ISO Migration Path from Legacy Systems</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="iso-migration-path-from-legacy-systems" aria-haspopup="dialog" aria-label="Share link: ISO Migration Path from Legacy Systems"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">LegacyToISOConverter</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Convert legacy graph queries to ISO GQL.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">conversions</span> <span class="o">=</span> <span class="p">{}</span> </span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">warnings</span> <span class="o">=</span> <span class="p">[]</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">convert_neo4j_cypher</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cypher_query</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Convert Neo4j Cypher to ISO GQL.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="n">iso_query</span> <span class="o">=</span> <span class="n">cypher_query</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Conversion 1: DETACH DELETE → DELETE</span> </span></span><span class="line"><span class="cl"> <span class="n">iso_query</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sa">r</span><span class="s1">&#39;\bDETACH DELETE\b&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;DELETE&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">iso_query</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">flags</span><span class="o">=</span><span class="n">re</span><span class="o">.</span><span class="n">IGNORECASE</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Conversion 2: exists(n.prop) → n.prop IS NOT NULL</span> </span></span><span class="line"><span class="cl"> <span class="n">iso_query</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sa">r</span><span class="s1">&#39;\bexists\s*\(\s*(\w+)\.(\w+)\s*\)&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="sa">r</span><span class="s1">&#39;\1.\2 IS NOT NULL&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">iso_query</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Conversion 3: APOC functions (warn - no direct equivalent)</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="sa">r</span><span class="s1">&#39;\bapoc\.&#39;</span><span class="p">,</span> <span class="n">iso_query</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">IGNORECASE</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">warnings</span><span class="o">.</span><span class="n">append</span><span class="p">({</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;type&#39;</span><span class="p">:</span> <span class="s1">&#39;unsupported_function&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;message&#39;</span><span class="p">:</span> <span class="s1">&#39;APOC functions have no ISO equivalent&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;suggestion&#39;</span><span class="p">:</span> <span class="s1">&#39;Implement logic in application code&#39;</span> </span></span><span class="line"><span class="cl"> <span class="p">})</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Conversion 4: Variable-length path syntax</span> </span></span><span class="line"><span class="cl"> <span class="n">iso_query</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span> </span></span><span class="line"><span class="cl"> <span class="sa">r</span><span class="s1">&#39;-\[(\w+):(\w+)\*(\d+)\.\.(\d+)\]-&gt;&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="sa">r</span><span class="s1">&#39;-[\1:\2*\3..\4]-&gt;&#39;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="n">iso_query</span> </span></span><span class="line"><span class="cl"> <span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">iso_query</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">warnings</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="nf">convert_gremlin</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">gremlin_query</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Convert Apache Gremlin to ISO GQL.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># This is more complex due to imperative nature of Gremlin</span> </span></span><span class="line"><span class="cl"> <span class="c1"># Simplified example:</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="n">patterns</span> <span class="o">=</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="sa">r</span><span class="s2">&#34;g\.V\(\)\.hasLabel\(&#39;(\w+)&#39;\)&#34;</span><span class="p">:</span> <span class="sa">r</span><span class="s2">&#34;MATCH (n:\1)&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="sa">r</span><span class="s2">&#34;\.has\(&#39;(\w+)&#39;,\s*&#39;([^&#39;]+)&#39;\)&#34;</span><span class="p">:</span> <span class="sa">r</span><span class="s2">&#34;WHERE \1 = &#39;\2&#39;&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="sa">r</span><span class="s2">&#34;\.values\(&#39;(\w+)&#39;\)&#34;</span><span class="p">:</span> <span class="sa">r</span><span class="s2">&#34;RETURN \1&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="n">iso_query</span> <span class="o">=</span> <span class="n">gremlin_query</span> </span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">gremlin_pattern</span><span class="p">,</span> <span class="n">gql_pattern</span> <span class="ow">in</span> <span class="n">patterns</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> </span></span><span class="line"><span class="cl"> <span class="n">iso_query</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">gremlin_pattern</span><span class="p">,</span> <span class="n">gql_pattern</span><span class="p">,</span> <span class="n">iso_query</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">iso_query</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Usage</span> </span></span><span class="line"><span class="cl"><span class="n">converter</span> <span class="o">=</span> <span class="n">LegacyToISOConverter</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="n">cypher_query</span> <span class="o">=</span> <span class="s2">&#34;&#34;&#34; </span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (n:Person) </span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE exists(n.email) </span></span></span><span class="line"><span class="cl"><span class="s2"> DETACH DELETE n </span></span></span><span class="line"><span class="cl"><span class="s2">&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="n">iso_query</span><span class="p">,</span> <span class="n">warnings</span> <span class="o">=</span> <span class="n">converter</span><span class="o">.</span><span class="n">convert_neo4j_cypher</span><span class="p">(</span><span class="n">cypher_query</span><span class="p">)</span> </span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="n">iso_query</span><span class="p">)</span> </span></span><span class="line"><span class="cl"><span class="c1"># Output:</span> </span></span><span class="line"><span class="cl"><span class="c1"># MATCH (n:Person)</span> </span></span><span class="line"><span class="cl"><span class="c1"># WHERE n.email IS NOT NULL</span> </span></span><span class="line"><span class="cl"><span class="c1"># DELETE n</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">warning</span> <span class="ow">in</span> <span class="n">warnings</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&#34;Warning: </span><span class="si">{</span><span class="n">warning</span><span class="p">[</span><span class="s1">&#39;message&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&#34;</span><span class="p">)</span> </span></span></code></pre></div> <h3 id="future-iso-standard-evolution" class="position-relative d-flex align-items-center group"> <span>Future ISO Standard Evolution</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="future-iso-standard-evolution" aria-haspopup="dialog" aria-label="Share link: Future ISO Standard Evolution"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="proposed-extensions-under-discussion" class="position-relative d-flex align-items-center group"> <span>Proposed Extensions (Under Discussion)</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="proposed-extensions-under-discussion" aria-haspopup="dialog" aria-label="Share link: Proposed Extensions (Under Discussion)"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Temporal</span><span class="w"> </span><span class="py">graph</span><span class="w"> </span><span class="py">queries</span><span class="w"> </span><span class="p">(</span><span class="py">proposed</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">ISO</span><span class="w"> </span><span class="py">amendment</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">FOR</span><span class="w"> </span><span class="py">SYSTEM_TIME</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">OF</span><span class="w"> </span><span class="err">&#39;</span><span class="py">2025</span><span class="err">-</span><span class="py">01</span><span class="err">-</span><span class="py">01T00</span><span class="p">:</span><span class="nc">00</span><span class="p">:</span><span class="nc">00Z</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">status</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">active</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">name</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Graph</span><span class="w"> </span><span class="py">pattern</span><span class="w"> </span><span class="py">matching</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">quantification</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">user</span><span class="p">:</span><span class="nc">User</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">ALL</span><span class="w"> </span><span class="py">x</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="p">(</span><span class="py">user</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">PURCHASED</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">products</span><span class="p">)</span><span class="w"> </span><span class="py">SATISFIES</span><span class="w"> </span><span class="p">(</span><span class="py">x</span><span class="err">.</span><span class="py">rating</span><span class="w"> </span><span class="err">&gt;</span><span class="p">=</span><span class="w"> </span><span class="py">4</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">user</span><span class="err">.</span><span class="py">name</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Multi</span><span class="err">-</span><span class="py">graph</span><span class="w"> </span><span class="py">queries</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">p</span><span class="p">:</span><span class="nc">Product</span><span class="p">)</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">GRAPH</span><span class="w"> </span><span class="py">production_graph</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">(</span><span class="py">s</span><span class="p">:</span><span class="nc">Sale</span><span class="p">)</span><span class="w"> </span><span class="py">IN</span><span class="w"> </span><span class="py">GRAPH</span><span class="w"> </span><span class="py">analytics_graph</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">s</span><span class="err">.</span><span class="py">product_id</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">id</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">p</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">sum</span><span class="p">(</span><span class="py">s</span><span class="err">.</span><span class="py">amount</span><span class="p">)</span><span class="w"> </span><span class="py">AS</span><span class="w"> </span><span class="py">total_sales</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="tracking-standards-updates" class="position-relative d-flex align-items-center group"> <span>Tracking Standards Updates</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="tracking-standards-updates" aria-haspopup="dialog" aria-label="Share link: Tracking Standards Updates"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">ISOStandardsTracker</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Track and notify about ISO GQL standard updates.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">subscription_endpoint</span> <span class="o">=</span> <span class="s2">&#34;https://www.iso.org/committee/45342/x/feed&#34;</span> </span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">last_check</span> <span class="o">=</span> <span class="kc">None</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">check_for_updates</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Check ISO working group for updates.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="n">feed</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">fetch_rss_feed</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">subscription_endpoint</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> <span class="n">updates</span> <span class="o">=</span> <span class="p">[]</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">feed</span><span class="o">.</span><span class="n">entries</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">entry</span><span class="o">.</span><span class="n">published</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">last_check</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">updates</span><span class="o">.</span><span class="n">append</span><span class="p">({</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;title&#39;</span><span class="p">:</span> <span class="n">entry</span><span class="o">.</span><span class="n">title</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;link&#39;</span><span class="p">:</span> <span class="n">entry</span><span class="o">.</span><span class="n">link</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;published&#39;</span><span class="p">:</span> <span class="n">entry</span><span class="o">.</span><span class="n">published</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="s1">&#39;summary&#39;</span><span class="p">:</span> <span class="n">entry</span><span class="o">.</span><span class="n">summary</span> </span></span><span class="line"><span class="cl"> <span class="p">})</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">last_check</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">updates</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">notify_team</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">updates</span><span class="p">):</span> </span></span><span class="line"><span class="cl"> <span class="s2">&#34;&#34;&#34;Notify development team of standard updates.&#34;&#34;&#34;</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="ow">not</span> <span class="n">updates</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">return</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="n">message</span> <span class="o">=</span> <span class="s2">&#34;ISO/IEC 39075 Updates:</span><span class="se">\n\n</span><span class="s2">&#34;</span> </span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">update</span> <span class="ow">in</span> <span class="n">updates</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">message</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&#34;• </span><span class="si">{</span><span class="n">update</span><span class="p">[</span><span class="s1">&#39;title&#39;</span><span class="p">]</span><span class="si">}</span><span class="se">\n</span><span class="s2">&#34;</span> </span></span><span class="line"><span class="cl"> <span class="n">message</span> <span class="o">+=</span> <span class="sa">f</span><span class="s2">&#34; </span><span class="si">{</span><span class="n">update</span><span class="p">[</span><span class="s1">&#39;link&#39;</span><span class="p">]</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">send_slack_notification</span><span class="p">(</span><span class="n">channel</span><span class="o">=</span><span class="s2">&#34;#standards&#34;</span><span class="p">,</span> <span class="n">message</span><span class="o">=</span><span class="n">message</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Scheduled task</span> </span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">monitor_iso_standards</span><span class="p">():</span> </span></span><span class="line"><span class="cl"> <span class="n">tracker</span> <span class="o">=</span> <span class="n">ISOStandardsTracker</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="n">updates</span> <span class="o">=</span> <span class="k">await</span> <span class="n">tracker</span><span class="o">.</span><span class="n">check_for_updates</span><span class="p">()</span> </span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">updates</span><span class="p">:</span> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">tracker</span><span class="o">.</span><span class="n">notify_team</span><span class="p">(</span><span class="n">updates</span><span class="p">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">86400</span><span class="p">)</span> <span class="c1"># Daily check</span> </span></span></code></pre></div><p>ISO/IEC 39075:2024 provides a solid, vendor-neutral foundation for graph database applications, ensuring portability, interoperability, and longevity of graph data solutions.</p>

Related Articles