# Schema Reference

# Schema Reference

This page defines the main schema concepts used throughout Curiosity Workspace.

# Node schema

A node schema defines a type of entity stored in the graph. It typically contains:

  • Type name (e.g., Device, SupportCase)
  • Key fields that uniquely identify nodes of that type
  • Properties used for display, filtering, and indexing
  • Optional: a timestamp field used for time filters and recency sorting

# Example (C# schema annotations)

[Node]
public class SupportCase
{
    [Key] public string Id { get; set; }
    [Property] public string Summary { get; set; }
    [Property] public string Content { get; set; }
    [Timestamp] public DateTimeOffset Time { get; set; }
}

# Edge schema

An edge schema defines relationship types between node types. Edges can be directional and are typically named to read well in traversal:

  • Case -> ForDevice -> Device
  • Device -> HasPart -> Part

# Example (edge name constants)

public static class Edges
{
    public const string HasPart = nameof(HasPart);
    public const string PartOf  = nameof(PartOf);
}

# Keys

Keys define identity. Keys must be:

  • stable over time
  • available during ingestion
  • unique within a node type

If you cannot rely on a natural key, use a deterministic ID strategy.

# Properties

Properties store attributes:

  • strings, numbers, enums
  • timestamps
  • structured fields used for filters

Properties are also what you typically index for text and vector search.

# Aliases (conceptual)

Aliases represent alternative names for a node. They are useful for:

  • variations in spelling/punctuation
  • abbreviations and acronyms
  • normalization across sources

# Hidden/system node types (conceptual)

Systems often store internal configuration objects (e.g., pipelines, indexes) as nodes. These may be hidden by default but can be inspected for debugging.

# Related pages