RDF List Library Guide

Copy Markdown View Source

TerminusDB provides 17 functions for manipulating RDF rdf:List structures via TerminusDB.WOQL.RDFList.

Overview

RDF lists are linked lists built from rdf:List cons cells. Each cell has:

  • rdf:first — the element value
  • rdf:rest — a pointer to the next cell (or rdf:nil for the empty list)

Reading

Get the first element

import TerminusDB.WOQL

query = and_([
  triple("v:List", "rdf:type", iri("rdf:List")),
  TerminusDB.WOQL.RDFList.rdflist_peek("v:List", "v:First")
])

Get the last element

query = TerminusDB.WOQL.RDFList.rdflist_last("v:List", "v:Last")

Get element at position

# 0-indexed
query = TerminusDB.WOQL.RDFList.rdflist_nth0("v:List", 2, "v:Elem")

# 1-indexed
query = TerminusDB.WOQL.RDFList.rdflist_nth1("v:List", 3, "v:Elem")

Iterate all elements

# Each element as a separate binding
query = TerminusDB.WOQL.RDFList.rdflist_member("v:List", "v:Elem")

# All elements as an array
query = TerminusDB.WOQL.RDFList.rdflist_list("v:List", "v:Array")

Get length

query = TerminusDB.WOQL.RDFList.rdflist_length("v:List", "v:Len")

Check if empty

query = TerminusDB.WOQL.RDFList.rdflist_is_empty("v:List")

Create an empty list

query = TerminusDB.WOQL.RDFList.rdflist_empty("v:List")

Mutation

Push (prepend)

query = TerminusDB.WOQL.RDFList.rdflist_push("v:List", "v:Value", "v:NewHead")

Pop (remove first)

query = TerminusDB.WOQL.RDFList.rdflist_pop("v:List", "v:Value")

Append

query = TerminusDB.WOQL.RDFList.rdflist_append("v:List", "v:Value")

Clear

query = TerminusDB.WOQL.RDFList.rdflist_clear("v:List", "v:NewList")

Insert at position

query = TerminusDB.WOQL.RDFList.rdflist_insert("v:List", 1, "v:Value")

Drop at position

query = TerminusDB.WOQL.RDFList.rdflist_drop("v:List", 1)

Swap elements

query = TerminusDB.WOQL.RDFList.rdflist_swap("v:List", 0, 2)

Slice

query = TerminusDB.WOQL.RDFList.rdflist_slice("v:List", 0, 3, "v:Result")

Variable safety

All RDFList functions use an internal localize helper that generates process-unique variable names (e.g., v:RDFList_head_12345) to avoid collisions with your query's variables.