<!-- 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’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">-></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">'</span><span class="py">Alice</span><span class="err">'</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">-></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">-></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">-></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">></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">-></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">></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">-></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">-></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><></code>, <code>!=</code>, <code><</code>, <code>></code>, <code><=</code>, <code>>=</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">"code"</span><span class="p">:</span> <span class="s2">"42000"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"message"</span><span class="p">:</span> <span class="s2">"Syntax error: unexpected token"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nt">"position"</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">"sqlstate"</span><span class="p">:</span> <span class="s2">"42000"</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’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"><</span><span class="nc">graph_pattern</span><span class="p">></span> <span class="o">::=</span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nc">node_pattern</span><span class="p">></span> [ <span class="p"><</span><span class="nc">relationship_pattern</span><span class="p">></span> <span class="p"><</span><span class="nc">node_pattern</span><span class="p">></span> ]*
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p"><</span><span class="nc">node_pattern</span><span class="p">></span> <span class="o">::=</span>
</span></span><span class="line"><span class="cl"> '(' [ <span class="p"><</span><span class="nc">variable</span><span class="p">></span> ] [ <span class="p"><</span><span class="nc">label_expression</span><span class="p">></span> ] [ <span class="p"><</span><span class="nc">property_specification</span><span class="p">></span> ] ')'
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p"><</span><span class="nc">label_expression</span><span class="p">></span> <span class="o">::=</span>
</span></span><span class="line"><span class="cl"> ':' <span class="p"><</span><span class="nc">label_name</span><span class="p">></span> [ ':' <span class="p"><</span><span class="nc">label_name</span><span class="p">></span> ]*
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p"><</span><span class="nc">property_specification</span><span class="p">></span> <span class="o">::=</span>
</span></span><span class="line"><span class="cl"> '{' <span class="p"><</span><span class="nc">property</span><span class="p">></span> [ ',' <span class="p"><</span><span class="nc">property</span><span class="p">></span> ]* '}'
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p"><</span><span class="nc">property</span><span class="p">></span> <span class="o">::=</span>
</span></span><span class="line"><span class="cl"> <span class="p"><</span><span class="nc">property_name</span><span class="p">></span> ':' <span class="p"><</span><span class="nc">expression</span><span class="p">></span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p"><</span><span class="nc">relationship_pattern</span><span class="p">></span> <span class="o">::=</span>
</span></span><span class="line"><span class="cl"> '-' '[' [ <span class="p"><</span><span class="nc">variable</span><span class="p">></span> ] [ <span class="p"><</span><span class="nc">type_expression</span><span class="p">></span> ] [ <span class="p"><</span><span class="nc">property_specification</span><span class="p">></span> ] ']' '->'
</span></span><span class="line"><span class="cl"> | '<-' '[' [ <span class="p"><</span><span class="nc">variable</span><span class="p">></span> ] [ <span class="p"><</span><span class="nc">type_expression</span><span class="p">></span> ] [ <span class="p"><</span><span class="nc">property_specification</span><span class="p">></span> ] ']' '-'
</span></span><span class="line"><span class="cl"> | '-' '[' [ <span class="p"><</span><span class="nc">variable</span><span class="p">></span> ] [ <span class="p"><</span><span class="nc">type_expression</span><span class="p">></span> ] [ <span class="p"><</span><span class="nc">property_specification</span><span class="p">></span> ] ']' '-'
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p"><</span><span class="nc">type_expression</span><span class="p">></span> <span class="o">::=</span>
</span></span><span class="line"><span class="cl"> ':' <span class="p"><</span><span class="nc">type_name</span><span class="p">></span> [ '|' <span class="p"><</span><span class="nc">type_name</span><span class="p">></span> ]*
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p"><</span><span class="nc">variable_length</span><span class="p">></span> <span class="o">::=</span>
</span></span><span class="line"><span class="cl"> '*' [ <span class="p"><</span><span class="nc">min_hops</span><span class="p">></span> ] [ '..' [ <span class="p"><</span><span class="nc">max_hops</span><span class="p">></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">></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">></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"><</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">'</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">-></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"><</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">></span><span class="p">=</span><span class="w"> </span><span class="py">date</span><span class="p">(</span><span class="err">'</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">'</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">></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">'</span><span class="py">P30D</span><span class="err">'</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">-></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">></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">"""Monitor ISO compliance in production environment."""</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">"""Check if query follows ISO standards."""</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">'CALL apoc\.'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="sa">r</span><span class="s1">'CALL gds\.'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="sa">r</span><span class="s1">'CREATE FULLTEXT INDEX'</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">'type'</span><span class="p">:</span> <span class="s1">'vendor_syntax'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'pattern'</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">'message'</span><span class="p">:</span> <span class="s1">'Query uses vendor-specific syntax'</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">"'</span><span class="si">{</span><span class="n">param</span><span class="si">}</span><span class="s2">'"</span> <span class="ow">in</span> <span class="n">query</span> <span class="ow">or</span> <span class="sa">f</span><span class="s1">'"</span><span class="si">{</span><span class="n">param</span><span class="si">}</span><span class="s1">"'</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">'type'</span><span class="p">:</span> <span class="s1">'sql_injection_risk'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'message'</span><span class="p">:</span> <span class="s1">'Parameters embedded in query string'</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">'= NULL|!= NULL'</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">'type'</span><span class="p">:</span> <span class="s1">'incorrect_null_handling'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'message'</span><span class="p">:</span> <span class="s1">'Should use IS NULL/IS NOT NULL'</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">"ISO compliance violations detected: </span><span class="si">{</span><span class="n">violations</span><span class="si">}</span><span class="s2">"</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">"""Generate production compliance report."""</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">'total_queries'</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">'violations'</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">'compliance_rate'</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">'violation_types'</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">'type'</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">'violation_types'</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">'violation_types'</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">"http"</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">"""Middleware to monitor query compliance."""</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">'query'</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">"""Convert legacy graph queries to ISO GQL."""</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">"""Convert Neo4j Cypher to ISO GQL."""</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">'\bDETACH DELETE\b'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'DELETE'</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">'\bexists\s*\(\s*(\w+)\.(\w+)\s*\)'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="sa">r</span><span class="s1">'\1.\2 IS NOT NULL'</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">'\bapoc\.'</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">'type'</span><span class="p">:</span> <span class="s1">'unsupported_function'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'message'</span><span class="p">:</span> <span class="s1">'APOC functions have no ISO equivalent'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s1">'suggestion'</span><span class="p">:</span> <span class="s1">'Implement logic in application code'</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">'-\[(\w+):(\w+)\*(\d+)\.\.(\d+)\]->'</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="sa">r</span><span class="s1">'-[\1:\2*\3..\4]->'</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">"""Convert Apache Gremlin to ISO GQL."""</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">"g\.V\(\)\.hasLabel\('(\w+)'\)"</span><span class="p">:</span> <span class="sa">r</span><span class="s2">"MATCH (n:\1)"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="sa">r</span><span class="s2">"\.has\('(\w+)',\s*'([^']+)'\)"</span><span class="p">:</span> <span class="sa">r</span><span class="s2">"WHERE \1 = '\2'"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="sa">r</span><span class="s2">"\.values\('(\w+)'\)"</span><span class="p">:</span> <span class="sa">r</span><span class="s2">"RETURN \1"</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">"""
</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">"""</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">"Warning: </span><span class="si">{</span><span class="n">warning</span><span class="p">[</span><span class="s1">'message'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</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">'</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">'</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">'</span><span class="py">active</span><span class="err">'</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">-></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">></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">"""Track and notify about ISO GQL standard updates."""</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">"https://www.iso.org/committee/45342/x/feed"</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">"""Check ISO working group for updates."""</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">></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">'title'</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">'link'</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">'published'</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">'summary'</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">"""Notify development team of standard updates."""</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">"ISO/IEC 39075 Updates:</span><span class="se">\n\n</span><span class="s2">"</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">"• </span><span class="si">{</span><span class="n">update</span><span class="p">[</span><span class="s1">'title'</span><span class="p">]</span><span class="si">}</span><span class="se">\n</span><span class="s2">"</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">" </span><span class="si">{</span><span class="n">update</span><span class="p">[</span><span class="s1">'link'</span><span class="p">]</span><span class="si">}</span><span class="se">\n\n</span><span class="s2">"</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">"#standards"</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
GQL Specification Reference
Complete ISO/IEC 39075:2024 Graph Query Language specification reference with Geode's implementation status, conformance profile, and feature …
GQL Language
Complete Graph Query Language (GQL) reference with ISO/IEC 39075:2024 conformance profile for pattern matching and graph queries