RDF and the Ontology
WeOS models all content as linked data using the Resource Description Framework (RDF). Every resource type carries a JSON-LD context that maps its properties to well-known vocabularies. This design serves three purposes: it gives LLMs a grounded understanding of your content, it produces structured data that search engines consume for SEO, and it creates a shared language across different resource types.
Why RDF?
Most CMSs store content as opaque blobs — a “product” is just a row with a title column. The CMS knows the column name, but it doesn’t know what “title” means. An LLM editing that content has to guess based on column names and conventions.
With RDF, every property has a precise definition. When a WeOS resource type declares "@vocab": "https://schema.org/", the property name isn’t just a string column — it’s schema:name, defined by Schema.org as “the name of the item.” An LLM that understands Schema.org (and all major LLMs do) can reason about the content accurately.
JSON-LD Contexts
Every resource type in WeOS has a JSON-LD @context that maps property names to vocabulary IRIs. Here’s the context from the core Person type:
{
"@vocab": "https://schema.org/",
"foaf": "http://xmlns.com/foaf/0.1/"
}
This means:
@vocabsets Schema.org as the default vocabulary — unqualified property names likename,email,givenNameresolve toschema:name,schema:email,schema:givenName- The
foafprefix makes FOAF (Friend of a Friend) vocabulary available — you could usefoaf:knowsto express social connections
The @type field declares what kind of thing this resource is:
{
"@vocab": "https://schema.org/",
"@type": "Product"
}
This tells both LLMs and search engines: “this resource is a Schema.org Product.”
Vocabularies Used
WeOS draws from established vocabularies, choosing the best fit for each domain:
| Vocabulary | Prefix | Used for |
|---|---|---|
| Schema.org | schema: |
General-purpose: products, articles, events, persons, organizations |
| FOAF | foaf: |
People and social connections |
| vCard | vcard: |
Contact information |
| W3C ORG | org: |
Organizations, memberships, roles |
| Activity Streams 2.0 | as: |
Social activities and feeds |
| GoodRelations | gr: |
E-commerce: offers, prices, availability |
| PROV-O | prov: |
Provenance and audit trails |
| SKOS | skos: |
Knowledge organization: concepts, taxonomies |
How This Benefits LLMs
When an LLM connects to WeOS via MCP, it doesn’t just see column names — it sees semantic types. A resource with @type: "Product" and properties name, price, sku gives the LLM enough context to:
- Understand intent — “add a new product” maps directly to creating a resource of type Product
- Infer relationships — a Product can have Offers (GoodRelations), Reviews (Schema.org), and a brand (Schema.org)
- Generate valid data — the LLM knows
priceshould be a number andskushould be a string identifier - Produce structured output — the JSON-LD data is already valid structured data for Google, Bing, and other consumers
How This Benefits SEO
JSON-LD is Google’s recommended format for structured data. Because WeOS stores content as JSON-LD natively, your content is already in the format search engines expect. A blog post with @type: "BlogPosting" and properties headline, datePublished, author can be served directly as a <script type="application/ld+json"> block in the HTML — no transformation needed.
The @graph Format
When a resource has relationships (triples), WeOS stores the data in JSON-LD @graph format:
{
"@context": {"@vocab": "https://schema.org/"},
"@graph": [
{
"@id": "urn:task:abc123",
"@type": "Action",
"name": "Design landing page",
"status": "open",
"priority": "medium"
},
{
"project": "urn:project:xyz789"
}
]
}
The first node (index 0) contains the entity’s own properties. The second node (index 1) contains references to other resources (edges). This separation keeps the entity data clean while preserving relationship information.
See Atomic Models and Triples for more on how relationships work.
Further Reading
- Atomic Models and Triples — how resources link to each other
- Projections — how JSON-LD data becomes queryable SQL columns
- Preset Catalog — see the JSON-LD contexts for all built-in types