Executive Summary
@context,
@id, and @type turns local payloads into global graph nodes without breaking
JSON.parse() clients.
@id IRIs joins third-party
SaaS feeds (like Workable) automatically—proven live across 4,850 triples at
rdf.evidenceaction.org.
In Part 1, we saw why probabilistic AI architectures
fail without a deterministic data foundation. In Part 2, we
looked under the hood at how Knowledge Graphs model business reality using Subject – Predicate –
Object triples and global Web identifiers (IRIs). At this point in the conversation, almost every VP of
Engineering or Product asks the same practical question: "Even if I agree with the architecture,
doesn't building our first Knowledge Graph require a six-month database migration, a cross-team security
audit, and an enterprise ontology committee?"
The short answer is no. If your engineering team already knows how to write JSON and publish a website, you already have every tool and skill required to stand up a production Knowledge Graph in a couple of weeks—without touching a single internal IT system or breaking a single existing REST endpoint.
Rather than walking through a hypothetical tutorial, this installment examines a real production deployment I
built for Evidence Action—a global
nonprofit organization delivering health interventions across Africa and Asia. In just two weeks, using
nothing more than plain JSON-LD files on disk and standard open vocabularies, we stood up a
4,850-triple Knowledge Graph (live visual explorer
and public SPARQL endpoint),
connected their third-party hiring platform into the graph without vendor support, and made the entire
organization natively queryable by both deterministic code and LLM agents.
Core Thesis
The fastest, highest-leverage way to start an enterprise Knowledge Graph is not by migrating your internal
PostgreSQL or CRM tables. It is by taking the public facts your organization already publishes for
humans in HTML—who you are, where you operate, what you deliver, who leads your teams, and who partners
with you—and expressing them for machines in W3C JSON-LD using three standard keys
(@context, @id, @type). Those public entities form the canonical hub
of your graph that third-party SaaS tools and internal APIs can immediately snap into.
When engineering teams try to launch an internal Knowledge Graph initiative, they almost always make the mistake of starting with their most sensitive, most coupled internal databases: production billing tables, customer PII in Salesforce, or internal ERP ledgers. Before a single triple is written, the project is bogged down in data-access approvals, schema-freeze negotiations, and ETL pipeline tickets.
When I began building the Knowledge Graph for Evidence Action, I started at the exact opposite end of the spectrum: what is simultaneously the most valuable and the easiest data in the entire organization?
Not just for Evidence Action, but for almost any company, the answer is the public core of the organization. Think about the facts every business already puts on its public website:
Starting with your public organizational core gives you three structural advantages right out of the gate:
JSON-LD files on disk.
If your engineering or growth team has encountered JSON-LD before, they probably saw it inside a
<script type="application/ld+json"> tag used for Google Search rich snippets. Because of
that, it is easy for a technical leader to glance at a JSON-LD snippet and think, "Oh, that's just SEO
stuff."
That reaction misses the bigger picture. Think about why your company publishes HTML web pages and links out
to other websites with <a href="..."> tags: you do it so humans can understand who
you are, how your products work, and how you connect to the rest of the world. Publishing a Knowledge Graph in
JSON-LD is doing the exact same thing, except you are publishing a structured representation of
your organization for machines.
| Dimension | Publishing HTML for Humans | Publishing JSON-LD for Machines |
|---|---|---|
| Primary Consumer & Format | Visual browsers rendering layout tags (<div>, <p>, <h2>) for human reading. |
Deterministic graph engines (Oxigraph, SPARQL) and AI agents reading @context, @id, and @type. |
| Search & Discovery (SEO) | Unstructured keyword indexing and heuristic text-snippet extraction. | Explicit Schema.org entity cards (Organization, Person, JobPosting, Service) verified directly by search engines. |
| Third-Party SaaS Integration | Manual copy-paste or brittle point-to-point ETL code across isolated vendor APIs. | Any external SaaS feed (e.g., Workable ATS) joins the organizational graph automatically by referencing canonical @id URLs. |
| External Knowledge & AI Readiness | Outbound <a href> links require a human to click and read; RAG pipelines chunk prose into lossy vector embeddings. |
Outbound links connect directly to Wikidata, Google's Knowledge Graph, and the United Nations, while AI agents query exact multi-hop facts via SPARQL. |
Search engine optimization is an immediate dividend of publishing JSON-LD, not its ceiling. Once those canonical machine-readable entities exist, they become the integration hubs that let third-party SaaS feeds snap into your data model and allow AI agents to query your organization natively in natural language—without touching a single internal IT system until you choose to.
In Section 03 of Part 2, we introduced
JSON-LD (JSON for Linked Data) alongside N-Triples and Turtle, and
promised to unpack the three special keys prefixed with an @ sign: @context,
@id, and @type.
Let's look at a concrete example from the Evidence Action project. Evidence Action operates in India through a regional technical partner based in New Delhi called EAII Advisors. If a typical web developer were writing a plain JSON file or REST API response to describe EAII Advisors, they would write something like this:
{
"id": "eaii-india",
"name": "EAII Advisors",
"legalName": "EAII Advisors Pty Ltd",
"foundingDate": "2020",
"description": "India technical partner",
"parentOrg": "evidence-action",
"office": {
"id": "eaii-office",
"streetAddress": "Tower C, Max House, Okhla Industrial Estate Phase 3 Rd, Bahapur",
"city": "New Delhi",
"region": "Delhi",
"postalCode": "110-020",
"country": "India"
}
}
To a human developer who wrote the application, that JSON looks clean. To any machine outside that single codebase, it is an isolated silo of strings:
"eaii-india" or
"evidence-action"? If your hiring platform or finance system has its own record for the India
office, there is no global identifier allowing a machine to know they refer to the same real-world
organization.
"parentOrg" mean legal corporate ownership,
fiscal sponsorship, or a department hierarchy? Does "country": "India" join with
"country_code": "IN" in another microservice?
Now look at how we upgraded that exact JSON object into W3C JSON-LD for the Evidence Action
Knowledge Graph using standard Schema.org
terms:
{
"@context": "https://schema.org/",
"@id": "https://rdf.evidenceaction.org/graphs/core/eaii-india",
"@type": ["NGO", "Organization"],
"name": "EAII Advisors",
"legalName": "EAII Advisors Pty Ltd",
"foundingDate": "2020",
"description": "India technical partner",
"parentOrganization": {
"@id": "https://rdf.evidenceaction.org/graphs/core/evidence-action",
"@type": ["NGO", "Organization"],
"name": "Evidence Action"
},
"address": {
"@id": "https://rdf.evidenceaction.org/graphs/places/eaii-office",
"@type": "PostalAddress",
"streetAddress": "Tower C, Max House, Okhla Industrial Estate Phase 3 Rd, Bahapur",
"addressLocality": "New Delhi",
"addressRegion": "Delhi",
"postalCode": "110-020",
"addressCountry": {
"@id": "https://rdf.evidenceaction.org/graphs/places/india",
"@type": "Country",
"name": "India"
}
}
}
Notice how little changed syntactically—it is still 100% valid JSON—yet adding those three keywords completely transforms what a machine can do with the payload:
@context (The Shared Dictionary): Setting
"@context": "https://schema.org/" tells any JSON-LD processor that short property names like
"name", "legalName", "parentOrganization", and
"address" are shorthand for the global Web IRIs https://schema.org/name,
https://schema.org/parentOrganization, and so on. Your developers keep writing clean, readable
JSON keys without typing full URLs on every line.
@id (The Global Primary Key): Instead of a local string like
"eaii-india", "@id": "https://rdf.evidenceaction.org/graphs/core/eaii-india"
assigns a globally unique Web identifier to EAII Advisors. Notice that the nested objects—the parent
organization (.../core/evidence-action), the physical office address
(.../places/eaii-office), and the country (.../places/india)—also have their own
@id URLs. Whenever any other file or application references one of those
@id URLs, the graph automatically merges the facts together.
@type (The Entity Classification): Declaring
"@type": ["NGO", "Organization"] (or "PostalAddress" and "Country")
tells the graph—and any AI agent—what kind of real-world thing each node is, independent of which file or
database table it came from.
JSON.parse() Clients Never Break
One of the biggest fears engineering managers have when hearing "RDF" or "Knowledge Graph" is that their
frontend TypeScript apps or mobile clients will have to learn a new parser. With JSON-LD, that
fear disappears:
const org = JSON.parse(response), org.name
is still "EAII Advisors", org.parentOrganization.name is still
"Evidence Action", and org.address.addressLocality is still
"New Delhi". The @context, @id, and @type keys are just
ordinary JSON properties that legacy code can ignore or read as strings.
Subject – Predicate – Object triples that join across the entire enterprise graph.
Practitioner Note: http://schema.org/ vs. https://schema.org/
If you compare the snippet above with the examples in Part 2,
you will notice Part 2 used http://schema.org/ whereas Evidence Action's graph uses
https://schema.org/. Because RDF treats IRIs as exact character-by-character identifiers,
http://schema.org/name and https://schema.org/name are two distinct URIs unless
normalized. Either convention works—historic Schema.org RDF releases use http:// while modern
web JSON-LD snippets often use https://—as long as your graph and your SPARQL
PREFIX declarations use the same one consistently.
Once we established that pattern—taking public facts from Evidence Action's website and writing modular
JSON-LD files on disk—how long did it take to model the core of a global organization operating
across multiple continents?
It took two weeks. We did not buy a six-figure proprietary graph appliance, we did not spin up a complex Kafka streaming topology, and we did not touch a single internal database. We simply organized a directory of JSON-LD files covering Evidence Action's offices, programs, leadership, board members, academic credentials, and partner foundations, and loaded them into an open-source graph store exposed at https://rdf.evidenceaction.org/.
Even in a static snapshot, you can see how the "Strings to Things" principle plays out at organizational scale. Instead of isolated tables or HTML pages, every shared entity becomes a gravitational hub in the network. The table below breaks down the eight color-coded node clusters visible in Figure 1:
| Node Color | Domain Cluster | Primary RDF / Schema.org Types | Example Canonical IRI in Graph |
|---|---|---|---|
| Royal Blue | Organizations, NGOs & Universities | schema:Organization, schema:NGO, schema:EducationalOrganization |
https://rdf.evidenceaction.org/graphs/core/evidence-action |
| Purple | People, Leadership & Contact Points | schema:Person, schema:ContactPoint |
https://rdf.evidenceaction.org/graphs/people/ankur-garg |
| Emerald Green | Global Health Programs & Interventions | schema:Service, ea-ont:Program |
https://rdf.evidenceaction.org/graphs/programs/deworm-the-world |
| Orange | Geographic Places, Countries & Offices | schema:Country, schema:Place, schema:PostalAddress |
https://rdf.evidenceaction.org/graphs/places/india |
| Coral Red | Academic Credentials & Degrees | schema:EducationalOccupationalCredential |
https://rdf.evidenceaction.org/graphs/people/ankur-garg#masters-cambridge |
| Cyan | Web Pages & Published Documents | schema:WebSite, schema:WebPage |
https://www.evidenceaction.org/programs/deworm-the-world/ |
| Amber / Gold | SKOS Taxonomy Concepts & Lifecycle Stages | skos:Concept, schema:DefinedTerm |
https://rdf.evidenceaction.org/graphs/focus-area-concepts#CleanWater |
| Slate Gray | Concept Schemes & Ontology Meta-Nodes | skos:ConceptScheme, rdfs:Class, owl:ObjectProperty |
https://rdf.evidenceaction.org/graphs/program-lifecycle-concepts |
If you look closely at the upper region of Figure 1 (and Rows 7 and 8 of the table above), you will spot
something important beyond standard Schema.org entities:
focus-area-concepts &
program-lifecycle-concepts): While Schema.org covered roughly 80% of
Evidence Action's core nouns (organizations, people, addresses, credentials), every enterprise also has
domain-specific concepts—such as Evidence Action's six-stage Accelerator pipeline or its thematic focus
areas (Clean Water, Maternal and Newborn Health, Neglected Tropical Diseases).
We modeled those using the W3C SKOS (Simple Knowledge Organization System) standard and a tiny,
four-term RDFS extension so they act as high-value connective tissue across the graph.
We are intentionally saving the deep dive into how those SKOS taxonomies, surgical
RDFS extensions, and external Wikidata / Google / UN bridges work for Part 4 ("Breaking
Down Silos: Shared Vocabularies, Taxonomies, and Connecting to Global Knowledge"). Right now, the
key takeaway is simpler: once your core Schema.org entities have canonical @id URLs,
enriching the graph with new applications becomes strictly additive.
Once you have a core graph on disk, the next question is: "How do we integrate our day-to-day operational applications when our third-party SaaS vendors don't support RDF or Knowledge Graphs?"
Evidence Action uses Workable as its third-party Applicant Tracking System (ATS) to manage open job requisitions. Out of the box, Workable knows nothing about Evidence Action's Knowledge Graph. In a traditional data architecture, connecting ATS job postings to organizational structure, regional partner entities, and country programs would require modifying a central data warehouse schema and maintaining brittle join tables.
Because our core graph already defined canonical @id IRIs for Evidence Action
(.../core/evidence-action), its India partner (.../core/eaii-india), its New Delhi
office (.../places/eaii-office), and India (.../places/india), integrating Workable
took a tiny JSON-LD wrapper. Here is the exact <script type="application/ld+json"> payload
generated for a live role in New Delhi:
<script type="application/ld+json">
{
"@context": "https://schema.org/",
"@type": "JobPosting",
"@id": "https://rdf.evidenceaction.org/graphs/jobs/91DD310DAE",
"identifier": {
"@type": "PropertyValue",
"name": "Workable Shortcode",
"propertyID": "workable-shortcode",
"value": "91DD310DAE"
},
"title": "(Associate) Director, Expansion, AI Access Initiative (EAII)",
"description": "Evidence Action is hiring for the Full-time position of (Associate) Director, Expansion, AI Access Initiative (EAII), based in New Delhi, India. This is a Mid-Senior level role.",
"datePosted": "2026-09-08",
"url": "https://apply.workable.com/j/91DD310DAE",
"hiringOrganization": {
"@type": ["NGO", "Organization"],
"@id": "https://rdf.evidenceaction.org/graphs/core/evidence-action",
"name": "Evidence Action",
"sameAs": "https://www.evidenceaction.org"
},
"employmentType": "FULL_TIME",
"employmentUnit": {
"@type": ["NGO", "Organization"],
"@id": "https://rdf.evidenceaction.org/graphs/core/eaii-india",
"name": "EAII Advisors"
},
"experienceRequirements": "Mid-Senior level",
"jobLocation": {
"@type": "Place",
"address": {
"@type": "PostalAddress",
"@id": "https://rdf.evidenceaction.org/graphs/places/eaii-office",
"addressLocality": "New Delhi",
"addressRegion": "Delhi",
"addressCountry": {
"@type": "Country",
"@id": "https://rdf.evidenceaction.org/graphs/places/india",
"name": "India"
}
}
}
}
</script>
Look at what happens at the graph layer because of four specific lines in that snippet:
"hiringOrganization": { "@id": "https://rdf.evidenceaction.org/graphs/core/evidence-action" }
"employmentUnit": { "@id": "https://rdf.evidenceaction.org/graphs/core/eaii-india" }
"address": { "@id": "https://rdf.evidenceaction.org/graphs/places/eaii-office" }
"addressCountry": { "@id": "https://rdf.evidenceaction.org/graphs/places/india" }
We did not have to ask Workable to change its product roadmap, and we did not have to run a single migration
on the existing Evidence Action graph. Simply by emitting a schema:JobPosting node whose foreign
references use the canonical @id URLs from our core graph, every open requisition in New Delhi
automatically snaps into the existing network:
JobPosting record.
91DD310DAE is now one hop
away from EAII Advisors, two hops away from the India leadership team (such as Country Director
Ankur Garg and his team in New Delhi), and directly connected to the health programs delivered
in India (Deworm the World and Equal Vitamin Access).
@id IRIs.
Throughout this series, we have emphasized a critical architectural truth: Knowledge Graphs work remarkably well with LLMs and AI agents, but they are in no way tied to or dependent on them. A well-modeled Knowledge Graph delivers deterministic value on Day 1 through direct queries, structured publishing, and cross-application integration—and then acts as a zero-hallucination force multiplier when you point an AI agent at it.
You do not have to take my word for it. The Evidence Action Knowledge Graph is live on the public Web. You can inspect its visual topology at https://rdf.evidenceaction.org/, and you can query the live endpoint directly at https://rdf.evidenceaction.org/sparql.
Paste any of the three queries below into
https://rdf.evidenceaction.org/sparql
(or run them from your terminal via curl) to see how those plain JSON-LD files behave as a
unified graph. (Note: As highlighted in Section 02, the live Evidence Action graph uses
PREFIX schema: <https://schema.org/>.)
This query traverses from the parent organization (.../core/evidence-action) across every child
entity linked via schema:parentOrganization, their physical office addresses, and the countries
they operate in:
PREFIX schema: <https://schema.org/>
SELECT DISTINCT ?org ?name ?countryName
WHERE {
?org schema:parentOrganization <https://rdf.evidenceaction.org/graphs/core/evidence-action> ;
schema:name ?name ;
schema:address ?addr .
?addr schema:addressCountry ?country .
?country schema:alternateName ?countryName .
}
ORDER BY ?name
What it returns: All 7 regional offices and technical partner entities across three
continents—EAII Advisors (India), Evidence Action Kenya
(Kenya), Evidence Action Liberia (Liberia), Evidence Action
Malawi (Malawi), Evidence Action Nigeria (Nigeria),
Evidence Action U.S. Office (United States), and Evidence Action Uganda
(Uganda).
This query traverses from schema:Person nodes across their
schema:EducationalOccupationalCredential nodes to the universities
(schema:recognizedBy) that awarded their degrees:
PREFIX schema: <https://schema.org/>
SELECT ?personName ?jobTitle ?degreeName ?universityName
WHERE {
?person a schema:Person ;
schema:name ?personName ;
schema:hasCredential ?cred .
OPTIONAL { ?person schema:jobTitle ?jobTitle }
?cred schema:name ?degreeName ;
schema:recognizedBy ?uni .
?uni schema:name ?universityName .
}
ORDER BY ?personName
LIMIT 15
What it returns: Verified multi-hop academic lineages across leadership and board
members—including Ankur Garg (Executive Vice President and Country Director, India (EAII
Advisors) — Master’s degree in Technology Policy, University of Cambridge),
Christina Riechers (Head of Product & Engineering — degrees recognized by
Harvard University, Massachusetts Institute of Technology, and Stanford
University), and Danielle Bayer (Chief Executive Officer — degrees recognized by
Stanford Graduate School of Business and Harvard Kennedy School).
This query starts from the canonical geographic node for India
(<https://rdf.evidenceaction.org/graphs/places/india>)—the exact same @id
referenced by the Workable JobPosting in Section 04—and finds every health program serving India
along with the partner organizations delivering it:
PREFIX schema: <https://schema.org/>
SELECT ?programName ?partnerName
WHERE {
?program schema:areaServed <https://rdf.evidenceaction.org/graphs/places/india> ;
schema:name ?programName ;
schema:provider ?partner .
?partner schema:name ?partnerName .
}
ORDER BY ?programName ?partnerName
What it returns: The active health interventions operating in India (Deworm the
World and Equal Vitamin Access) paired with their operating providers (EAII
Advisors, Evidence Action, Evidence Action Kenya, Evidence Action
Malawi, and Evidence Action Nigeria)—illustrating how any external job posting or
operational record linked to places/india or core/eaii-india inherits the
organization's full programmatic context for free.
Now test the second half of the equation. If you use an AI coding or research agent with web/HTTP tool access (such as Claude Code, Gemini, Cursor, or a custom MCP agent), hand it any of the three natural-language prompts below and watch how it explores the live graph without hallucinating:
"You do not need a two-year data warehouse overhaul to give your AI agents deterministic memory. A folder of well-modeled JSON-LD files on disk can stand up a production Knowledge Graph in two weeks."
We have now seen how any engineering team can go from zero to a live, queryable Knowledge Graph in weeks by
starting with its public organizational core, upgrading everyday JSON into W3C JSON-LD
(@context, @id, @type) with Schema.org, and wrapping
third-party SaaS feeds like Workable so they snap into canonical @id URLs automatically.
But what happens when off-the-shelf Schema.org terms are not specific enough for your proprietary
business concepts—or when Engineering, Product, Marketing, and external datasets each use different
terminology for the same domain?
| Installment | Title | Core Executive & Technical Question Answered |
|---|---|---|
| Part 1 | Why Enterprise AI Hits a Wall: The Limits of RAG, Long Context, and the Case for Knowledge Graphs | Why do Vector RAG, long context, SQL, and proprietary GraphRAG stall—and why is an open Knowledge Graph the antidote? |
| Part 2 | Things, Not Strings: How Knowledge Graphs Actually Model Your Business | How do global identifiers (URIs) and Subject–Predicate–Object triples let your data model evolve without brittle schema migrations? |
| Part 3 (Current) | From Everyday JSON to a Knowledge Graph: Why Getting Started Is Easier Than You Think | How does JSON-LD turn the facts you already publish and the SaaS feeds you already run into a live Knowledge Graph in weeks? |
| Part 4 | Breaking Down Silos: Shared Vocabularies, Taxonomies, and Connecting to Global Knowledge | How do W3C SKOS taxonomies, surgical RDFS extensions, and global graphs (Wikidata, Google KG, UN SDGs) unify internal and external silos? |
| Part 5 | Deterministic Logic vs. Probabilistic Guessing: How Inference Solves What LLMs Can't | How do logical rules, ontological inference, and SHACL validation guarantee 100% auditability where LLMs guess? |
| Part 6 | Knowledge Graphs in Production: Querying, Token Economics, and Agent Workflows | How do AI agents query live SPARQL endpoints in production to cut prompt token volume by 90%+ while eliminating hallucinations? |
In Part 4: "Breaking Down Silos: Shared Vocabularies, Taxonomies, and Connecting to Global
Knowledge," we will zoom directly into those amber concept hubs and external bridges from Figure 1—showing
how W3C SKOS concept schemes, lightweight RDFS subclassing, and outbound links to
Wikidata, Google's Knowledge Graph, and the United Nations
create semantic connective tissue across your organization and the wider Web.