Attributes

Describing what entities are and what they have

Attributes are statements that describe properties of an entity. Subject (Entity) → Predicate → Object (value).

Prop

Type


Core Attributes

SubjectPredicateObject
did:fide:0x15... (Alice)did:fide:0x65... (schema:type)did:fide:0x66... ("schema:Person")
did:fide:0x15... (Alice)did:fide:0x65... (schema:name)did:fide:0x66... ("Alice Smith")
did:fide:0x15... (Alice)did:fide:0x65... (schema:description)did:fide:0x66... ("Software Engineer")

Danger: Don't Use Names as IDs

Avoid deriving IDs from common names. "Alice Smith" produces the same ID for every Alice Smith. The name should be a schema:name attribute, while the Entity should be identified by a Primary Fide ID, CryptographicAccount, or Platform ID.

Why no schema:identifier?

Fide IDs are the identifiers. We don't use schema:identifier strings.

To link an entity to an external account (like GitHub or Twitter), use a Relationship (sameAs or sec:controller) to the Entity Identifier representing that account (e.g., did:fide:0x15...), rather than a string attribute.


Context & Timestamps

Timestamps and validity periods are also attributes! However, they usually describe the Statement or the Attestation, not the Entity itself.

Core FCP Predicates

ContextSubjectPredicateObject (Timestamp)
Attestation Timestamp (optional)Attestation Fide IDprov:generatedAtTime"2026-01-23T12:00:00Z"

Common Schema.org Predicates

ContextSubjectPredicateObject (Timestamp)
Valid FromStatement Fide IDschema:validFrom"2026-01-01T00:00:00Z"
Valid UntilStatement Fide IDschema:validThrough"2026-12-31T23:59:59Z"

Why is this powerful?

By treating time as an attribute of the statement, you can have multiple conflicting statements about the same entity that are valid at different times (e.g., "Alice works at Google" [2020-2022] vs "Alice works at OpenAI" [2023-Present]).

Timestamp Requirement (Strict)

All temporal values must be full RFC 3339 UTC timestamps (for example, "2026-01-01T00:00:00Z"), and indexers should persist them as timestamptz.

Do not use date-only strings (for example, "2026-01-01"), local-time timestamps without a zone, or relative text like "yesterday."


Controller Attributes

Sometimes you want to describe the controller of an entity without knowing their specific ID. You can use controller:* predicates.

Pattern: Subject (Social Account) → controller:skill → "Rust Definition"

Meaning: "Whoever controls this social account has the skill 'Rust Development'."

This allows you to attach reputation to anonymous controllers via their public assets.

On this page