GraphCentric developer view
/blog/link-relations
Navigation
Methods
| Method | Status | Basis |
|---|---|---|
| GET | available | representation candidates are configured |
| HEAD | available | GET representation headers |
| OPTIONS | available | HTTP capability discovery |
Resource Details
- URI
- https://graphcentric.com/blog/link-relations
- Graph
- https://graphcentric.com/graphs/public-resources
- Query
- s3://graphcentric.com/blog-article.sparql
Link Relations
5 links| rel | title | type | href |
|---|---|---|---|
| alternate | Link Relations Article HTML | text/html;charset=utf-8 | https://graphcentric.com/blog/link-relations.html |
| alternate | Link Relations Article Markdown | text/markdown | https://graphcentric.com/blog/link-relations.md |
| alternate | Link Relations Article Turtle | text/turtle | https://graphcentric.com/blog/link-relations.ttl |
| author | https://graphcentric.com/people/22d4c93006d76289b4b7 | ||
| https://graphcentric.info/link-relations/resource-configuration | Link Relations Resource Configuration HTML | text/html;charset=utf-8 | https://graphcentric.com/blog/link-relations.resource-configuration.html |
Resource Configuration Model
Turtle
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX gcs: <https://graphcentric.com/schema/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX schema: <https://schema.org/>
PREFIX sh: <http://www.w3.org/ns/shacl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
<https://graphcentric.com/blog/link-relations.md>
rdf:type gcs:WebResource;
gcs:contentType "text/markdown";
gcs:graph <https://graphcentric.com/graphs/public-resources>;
gcs:template <s3://graphcentric.com/templates/blog-article.md> .
<https://graphcentric.com/blog/link-relations/.links/alternate-markdown>
rdf:type gcs:Link;
gcs:rel "alternate";
gcs:target <https://graphcentric.com/blog/link-relations.md>;
schema:name "Link Relations Article Markdown" .
<https://graphcentric.com/blog/link-relations/.links/resource-configuration-html>
rdf:type gcs:Link;
gcs:rel "https://graphcentric.info/link-relations/resource-configuration";
gcs:target <https://graphcentric.com/blog/link-relations.resource-configuration.html>;
schema:name "Link Relations Resource Configuration HTML" .
<https://graphcentric.com/blog/link-relations/.links/alternate-html>
rdf:type gcs:Link;
gcs:rel "alternate";
gcs:target <https://graphcentric.com/blog/link-relations.html>;
schema:name "Link Relations Article HTML" .
<https://graphcentric.com/blog/link-relations/.links/author>
rdf:type gcs:Link;
gcs:rel "author";
gcs:target <https://graphcentric.com/people/22d4c93006d76289b4b7> .
<https://graphcentric.com/blog/link-relations.ttl>
rdf:type gcs:WebResource;
gcs:contentType "text/turtle";
gcs:graph <https://graphcentric.com/graphs/public-resources> .
<https://graphcentric.com/blog/link-relations/.links/alternate-turtle>
rdf:type gcs:Link;
gcs:rel "alternate";
gcs:target <https://graphcentric.com/blog/link-relations.ttl>;
schema:name "Link Relations Article Turtle" .
<https://graphcentric.com/blog/link-relations.resource-configuration.html>
rdf:type gcs:WebResource;
gcs:contentType "text/html;charset=utf-8";
gcs:graph <https://graphcentric.com/graphs/public-resources> .
<https://graphcentric.com/blog/link-relations.html>
rdf:type gcs:WebResource;
gcs:contentType "text/html;charset=utf-8";
gcs:graph <https://graphcentric.com/graphs/public-resources>;
gcs:outerTemplate <s3://graphcentric.com/templates/public.html>;
gcs:template <s3://graphcentric.com/templates/blog-article.html> .
<https://graphcentric.com/blog/link-relations>
rdf:type gcs:WebResource;
gcs:frame <s3://graphcentric.com/blog-article-frame.jsonld>;
gcs:graph <https://graphcentric.com/graphs/public-resources>;
gcs:link <https://graphcentric.com/blog/link-relations/.links/alternate-html> , <https://graphcentric.com/blog/link-relations/.links/alternate-markdown> , <https://graphcentric.com/blog/link-relations/.links/alternate-turtle> , <https://graphcentric.com/blog/link-relations/.links/author> , <https://graphcentric.com/blog/link-relations/.links/resource-configuration-html>;
gcs:query <s3://graphcentric.com/blog-article.sparql> .
SPARQL Query
s3://graphcentric.com/blog-article.sparqlBASE <https://graphcentric.com/>
PREFIX schema: <https://schema.org/>
PREFIX gcs: <https://graphcentric.com/schema/>
PREFIX dcterms: <http://purl.org/dc/terms/>
CONSTRUCT {
?_subject
a schema:Article;
dcterms:title ?headline;
dcterms:description ?description;
schema:headline ?headline;
schema:alternativeHeadline ?alternativeHeadline;
schema:description ?description;
schema:datePublished ?datePublished;
schema:dateModified ?dateModified;
schema:keywords ?keywords;
schema:articleBody ?articleBodyHtml;
schema:url ?url;
schema:author ?author;
schema:image ?image;
schema:citation ?citation;
schema:quotation ?quote;
gcs:furtherReading ?reading.
?author
a schema:Person;
schema:name ?authorName;
schema:jobTitle ?authorRole.
?image
a schema:ImageObject;
schema:name ?imageName;
schema:contentUrl ?imageContentUrl;
schema:encodingFormat ?imageEncodingFormat;
schema:width ?imageWidth;
schema:height ?imageHeight;
schema:contentSize ?imageContentSize;
schema:caption ?imageCaption;
schema:description ?imageAltText;
gcs:genAiPrompt ?imageGenAiPrompt;
gcs:genAiModel ?imageGenAiModel;
gcs:genAiProvider ?imageGenAiProvider.
?citation
a schema:CreativeWork;
schema:name ?citationName;
schema:url ?citationUrl;
schema:description ?citationDescription;
schema:text ?citationText;
schema:position ?citationPosition.
?quote
a schema:Quotation;
schema:text ?quoteText;
schema:citation ?quoteCitation;
schema:position ?quotePosition.
?reading
a schema:CreativeWork;
schema:name ?readingName;
schema:url ?readingUrl;
schema:description ?readingDescription;
schema:position ?readingPosition.
}
WHERE {
GRAPH <graphs/cms> {
?_subject a schema:Article;
schema:headline ?headline;
schema:description ?description;
schema:datePublished ?datePublished;
schema:url ?url;
schema:author ?author.
OPTIONAL { ?_subject schema:alternativeHeadline ?alternativeHeadline. }
OPTIONAL { ?_subject schema:dateModified ?dateModified. }
OPTIONAL { ?_subject schema:keywords ?keywords. }
OPTIONAL { ?_subject schema:articleBody ?articleBodyHtml. }
OPTIONAL {
?_subject schema:image ?image.
?image schema:name ?imageName;
schema:contentUrl ?imageContentUrl.
OPTIONAL { ?image schema:encodingFormat ?imageEncodingFormat. }
OPTIONAL { ?image schema:width ?imageWidth. }
OPTIONAL { ?image schema:height ?imageHeight. }
OPTIONAL { ?image schema:contentSize ?imageContentSize. }
OPTIONAL { ?image schema:caption ?imageCaption. }
OPTIONAL { ?image schema:description ?imageAltText. }
OPTIONAL { ?image gcs:genAiPrompt ?imageGenAiPrompt. }
OPTIONAL { ?image gcs:genAiModel ?imageGenAiModel. }
OPTIONAL { ?image gcs:genAiProvider ?imageGenAiProvider. }
}
OPTIONAL {
?_subject schema:citation ?citation.
?citation schema:name ?citationName.
OPTIONAL { ?citation schema:url ?citationUrl. }
OPTIONAL { ?citation schema:description ?citationDescription. }
OPTIONAL { ?citation schema:text ?citationText. }
OPTIONAL { ?citation schema:position ?citationPosition. }
}
OPTIONAL {
?_subject schema:quotation ?quote.
?quote schema:text ?quoteText.
OPTIONAL { ?quote schema:citation ?quoteCitation. }
OPTIONAL { ?quote schema:position ?quotePosition. }
}
OPTIONAL {
?_subject gcs:furtherReading ?reading.
?reading schema:name ?readingName.
OPTIONAL { ?reading schema:url ?readingUrl. }
OPTIONAL { ?reading schema:description ?readingDescription. }
OPTIONAL { ?reading schema:position ?readingPosition. }
}
}
OPTIONAL {
GRAPH <graphs/public-staff-information> {
?author schema:name ?authorName.
OPTIONAL { ?author schema:jobTitle ?authorRole. }
}
}
}
Query Scope
Named Graphs
Resource State
Turtle
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX gcs: <https://graphcentric.com/schema/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX schema: <https://schema.org/>
PREFIX sh: <http://www.w3.org/ns/shacl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
<https://graphcentric.com/blog/link-relations#quote-data-centric-manifesto-1>
rdf:type schema:Quotation;
schema:citation <https://graphcentric.com/references/data-centric-manifesto>;
schema:position 1;
schema:text "Applications visit the data - Reactive UIs, autonomous agents, and services query and update the graph rather than owning data silos." .
<https://graphcentric.com/references/iana-link-relations>
rdf:type schema:CreativeWork;
schema:description "The Internet Assigned Numbers Authority registry of standard link relation types.";
schema:name "IANA Link Relations Registry";
schema:position 1;
schema:text "IANA maintains the canonical registry of standard link relations used by web resources and agents.";
schema:url <https://www.iana.org/assignments/link-relations/link-relations.xhtml> .
<https://graphcentric.com/references/rfc-8288>
rdf:type schema:CreativeWork;
schema:description "The Web Linking RFC that defines typed links and their use in HTTP headers.";
schema:name "RFC 8288: Web Linking";
schema:position 2;
schema:text "RFC 8288 formalizes web links and link relation types for HTTP resources.";
schema:url <https://www.rfc-editor.org/rfc/rfc8288> .
<https://graphcentric.com/people/22d4c93006d76289b4b7>
rdf:type schema:Person .
<https://graphcentric.com/references/data-centric-manifesto>
rdf:type schema:CreativeWork;
schema:description "A manifesto for treating data as a durable, self-describing asset independent of application silos.";
schema:name "The Data-Centric Manifesto";
schema:position 1;
schema:url <https://www.datacentricmanifesto.org/> .
<https://graphcentric.com/blog/link-relations>
rdf:type schema:Article;
dcterms:description "Link relations give machines explicit cues for how to move through a website without relying on brittle, hardcoded APIs. This article explains why the original web model was already agent-friendly and why that matters again in the age of AI agents.";
dcterms:title "Link Relations: Why the Original Web Already Knew About AI Agents";
gcs:furtherReading <https://graphcentric.com/references/data-centric-manifesto>;
schema:alternativeHeadline "The web was designed for agents from the beginning.";
schema:articleBody "<p>Welcome to the second edition of <strong>GraphCentric Weekly</strong>. This week we are exploring a key mechanism from the original World Wide Web that has new relevance in the age of AI: <strong>link relations</strong>.</p><h2>Agents, Agents Everywhere</h2><p>The word agent is having its moment. Yet the term agent was already central to the designers of the web as far back as 1990. The original vision always included non-human clients, most notably spiders and crawlers. Without those agents we would never have had search engines.</p><p>The designers of the web long anticipated what we now call the rise of the robots. They built the web to serve clients capable of making decisions, not just rendering pages for humans.</p><h2>Humans and Machines Navigate Differently</h2><p>Humans respond to visual design cues. AI agents can now do something similar, but it is expensive. They must consume large amounts of HTML, interpret visual semantics, and guess which links to follow. Machine-readable formats are far more efficient.</p><p>Link relations provide explicit, labeled cues. A link relation is a standardized keyword that describes the purpose of a link. Humans use visual design to choose their path. Machines follow these labeled relations instead.</p><h2>Static APIs versus Dynamic Web Navigation</h2><p>The dominant approach today is static: fixed API endpoints with known URIs, query parameters, and contracts. If the API changes, the client breaks. The alternative is dynamic: the machine interacts with the same resources a human would, following labeled links just as we do.</p><p>This dynamic philosophy is at the heart of REST. HATEOAS means the server tells the client what it can do next through links and their relations, rather than the client relying on hardcoded knowledge.</p><h2>Final Thoughts</h2><p>The web was designed for agents from the beginning. Link relations, HATEOAS, and dynamic clients close the loop. We have an opportunity to move beyond static interfaces and finish what the early web pioneers started.</p>";
schema:author <https://graphcentric.com/people/22d4c93006d76289b4b7>;
schema:citation <https://graphcentric.com/references/iana-link-relations> , <https://graphcentric.com/references/rfc-8288>;
schema:dateModified "2026-05-04"^^xsd:date;
schema:datePublished "2026-05-04"^^xsd:date;
schema:description "Link relations give machines explicit cues for how to move through a website without relying on brittle, hardcoded APIs. This article explains why the original web model was already agent-friendly and why that matters again in the age of AI agents.";
schema:headline "Link Relations: Why the Original Web Already Knew About AI Agents";
schema:image <https://graphcentric.com/media/blog/link-relations/graphcentric-ai-first-foundation>;
schema:keywords "link relations, HATEOAS, REST, AI agents, semantic web, RDF";
schema:quotation <https://graphcentric.com/blog/link-relations#quote-data-centric-manifesto-1>;
schema:url <https://graphcentric.com/blog/link-relations.html> .
<https://graphcentric.com/media/blog/link-relations/graphcentric-ai-first-foundation>
rdf:type schema:ImageObject;
gcs:genAiModel "TODO";
gcs:genAiPrompt "TODO: original generation prompt";
gcs:genAiProvider "TODO";
schema:caption "A GenAI illustration to depict how Link Relations enable agents to discover more about the context of a resource.";
schema:contentSize 567302;
schema:contentUrl <https://graphcentric.com/media/blog/link-relations/graphcentric-ai-first-foundation.jpg>;
schema:description "Illustrated diagram titled GraphCentric AI-First Foundation, with an RDF graph at the center and surrounding access-control and web-application concepts.";
schema:encodingFormat "image/jpeg";
schema:height 832;
schema:name "GraphCentric AI-First Foundation";
schema:width 1248 .
SSE Status
Stream link relations| stream | status | subscribers | last id | state |
|---|---|---|---|---|
| No stream resources are linked from this resource. | ||||
Cache Status
Placeholder: configuration cache/runtime query cache status is not exposed to this renderer yet.
Cache-Control
Placeholder: response cache-control policy is not exposed yet.
ETag
Placeholder: source representation ETag calculation is representation-specific and not exposed here yet.
Content-Security-Policy
Placeholder: CSP headers are not exposed to this renderer yet.