Relationships
How to connect entities and statements in the Fide Context Graph
Relationships are Statements where the object is another Entity ID. Subject → Predicate → Object (Entity). Predicates use 0x65 or 0xe5.
Prop
Type
Core Relationship Types
Use standard and protocol-specific predicates to define how things relate within the Schema.
Core FCP Predicates
| Relationship | Predicate | Example |
|---|---|---|
| control | sec:controller | Wallet (did:fide:0x123...) → controller → Alice |
| correction | prov:wasRevisionOf | Statement B → wasRevisionOf → Statement A |
Common Schema.org Predicates
| Relationship | Predicate | Example |
|---|---|---|
| employment | schema:worksFor | Alice → worksFor → Acme |
| creation | schema:creator | Book → creator → Alice |
OWL Predicates
| Relationship | Predicate | Example |
|---|---|---|
| clustering | owl:sameAs | Alice (X) → sameAs → Alice (LinkedIn) |
| disambiguation | owl:differentFrom | Alice (A) → differentFrom → Alice (B) |
Actions & Workflow Predicates
Defined in Actions Schema, but registered here for reference.
| Relationship | Predicate | Example |
|---|---|---|
| grouping | schema:isPartOf | Action Step → isPartOf → Session Event |
| sequence | prov:wasInformedBy | Action B → wasInformedBy → Action A |
| execution | schema:agent | Action → agent → Person/Agent |
Identity Clustering (owl:sameAs)
When multiple identifiers exist for the same real-world entity (e.g., "Alice on X" and "Alice on GitHub"), we link them using owl:sameAs. FCP treats these as bidirectional identity claims that form clusters of equivalent identifiers.
How Clustering Works
- Undirected Edges:
A owl:sameAs BimpliesB owl:sameAs Afor clustering purposes - Transitive Closure: If
A sameAs BandB sameAs C, then A, B, and C form a single identity cluster - Canonical Primary: Each cluster resolves to a single canonical identifier using MIN(fingerprint) — the entity with the lexicographically smallest Fide ID becomes the primary for the entire cluster
Trust Model
Not all owl:sameAs statements are automatically trusted. Indexers use an evaluation-based trust system:
- Evaluation Method:
Fide-AliasResolutionTrust-v1(0xe5 type) - Trust Votes: Indexers create evaluation statements with:
- Object
"1"= trust this identity link - Object
"-1"= reject this identity link
- Object
- Inclusion Criteria: Only
owl:sameAsstatements with net positive trust (trust_votes > reject_votes) are used for clustering
Cluster-Wide Resolution
Indexers use recursive CTEs to identify full connected components (identity clusters) and materialize resolved views where all cluster members point to the same canonical primary. This ensures consistent identity resolution regardless of which identifier you query from.
See Indexing - Identity Resolution for implementation details.
Example: Alice's Identity Cluster
// Three identity statements
{ subject: "https://x.com/alice", predicate: "owl:sameAs", object: "https://github.com/alice" }
{ subject: "https://github.com/alice", predicate: "owl:sameAs", object: "https://linkedin.com/alice" }
// Trust evaluations (from indexers)
{ subject: statement1_id, predicate: "Fide-AliasResolutionTrust-v1", object: "1" }
{ subject: statement2_id, predicate: "Fide-AliasResolutionTrust-v1", object: "1" }
// Result: All three identifiers resolve to the one with MIN(fingerprint)
// e.g., if github.com/alice has the smallest Fide ID, it becomes the canonical primarySemantic vs. Identity Equivalence
Use owl:sameAs strictly for Identity (e.g., "Alice = x.com/alice").
For fuzzy value mapping (e.g., "Sphere ≈ Round"), avoid sameAs. Instead:
- Use hierarchy:
Sphere→skos:broader→Round - Let the application/AI layer resolve semantic synonyms.
Control & Authority
We need to know which CryptographicAccounts or delegate agents act on behalf of an Active Entity (e.g. Person, Organization, or AutonomousAgent). We use sec:controller for this.
Direction: CryptographicAccount → sec:controller → Active Entity (W3C DID spec).
Correction (prov:wasRevisionOf)
Replace erroneous statements: NewStatementFideId → prov:wasRevisionOf → OldStatementFideId. Create correct statements, sign a new attestation, link back via prov:wasRevisionOf. Indexers hide the old and show the new.
Storage & Querying
These correction patterns are stored and queried as views over the statement graph. See Indexing - Resolved Statements for how indexers materialize relationship patterns for efficient querying.