GraphCentric developer view

/people/ms

https://graphcentric.com/people/ms

Navigation

Methods

MethodStatusBasis
GETavailablerepresentation candidates are configured
HEADavailableGET representation headers
OPTIONSavailableHTTP capability discovery

Resource Details

URI
https://graphcentric.com/people/ms
Graph
https://graphcentric.com/graphs/public-resources
Query
s3://graphcentric.com/public-person.sparql

Resource Configuration Model

Turtle

Server rendered
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/people/ms.html>
        rdf:type           gcs:WebResource;
        gcs:contentType    "text/html;charset=utf-8";
        gcs:frame          <s3://graphcentric.com/public-person-frame.jsonld>;
        gcs:graph          <https://graphcentric.com/graphs/public-resources>;
        gcs:outerTemplate  <s3://graphcentric.com/templates/public.html>;
        gcs:query          <s3://graphcentric.com/public-person.sparql>;
        gcs:template       <s3://graphcentric.com/public-person.html> .

<https://graphcentric.com/people/ms/.links/resource-configuration-html>
        rdf:type     gcs:Link;
        gcs:rel      "https://graphcentric.info/link-relations/resource-configuration";
        gcs:target   <https://graphcentric.com/people/ms.resource-configuration.html>;
        schema:name  "Resource Configuration HTML" .

<https://graphcentric.com/people/ms/.links/alternate-html>
        rdf:type     gcs:Link;
        gcs:rel      "alternate";
        gcs:target   <https://graphcentric.com/people/ms.html>;
        schema:name  "Malcolm Sparks public profile HTML" .

<https://graphcentric.com/people/ms>
        rdf:type   gcs:WebResource;
        gcs:frame  <s3://graphcentric.com/public-person-frame.jsonld>;
        gcs:graph  <https://graphcentric.com/graphs/public-resources>;
        gcs:link   <https://graphcentric.com/people/ms/.links/alternate-html> , <https://graphcentric.com/people/ms/.links/describes> , <https://graphcentric.com/people/ms/.links/resource-configuration-html>;
        gcs:query  <s3://graphcentric.com/public-person.sparql> .

<https://graphcentric.com/people/ms.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/people/ms/.links/describes>
        rdf:type     gcs:Link;
        gcs:rel      "describes";
        gcs:target   <https://graphcentric.com/people/22d4c93006d76289b4b7>;
        schema:name  "Private people record" .

SPARQL Query

s3://graphcentric.com/public-person.sparql
BASE <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:Person;
    dcterms:title ?pageTitle;
    dcterms:description ?bio;
    schema:name ?name;
    schema:jobTitle ?jobTitle;
    schema:description ?bio;
    gcs:bio ?bio;
    schema:url ?personUrl;
    gcs:describes ?privatePerson;
    gcs:hasArticles ?hasArticles;
    gcs:article ?article.

  ?article
    a schema:Article;
    schema:headline ?headline;
    schema:description ?articleDescription;
    gcs:summary ?articleDescription;
    schema:datePublished ?datePublished;
    schema:url ?url;
    schema:position ?position;
    schema:image ?image.

  ?image
    a schema:ImageObject;
    schema:name ?imageName;
    schema:contentUrl ?imageContentUrl;
    schema:description ?imageAltText.
}
WHERE {
  BIND(IF(STRENDS(STR(?_subject), ".html"), IRI(STRBEFORE(STR(?_subject), ".html")), ?_subject) AS ?publicProfileResource)

  GRAPH <graphs/cms> {
    ?publicProfileResource a schema:Person;
      schema:name ?name;
      schema:jobTitle ?jobTitle;
      schema:description ?bio;
      gcs:describes ?privatePerson.

    OPTIONAL {
      ?article a schema:Article;
        gcs:published true;
        schema:author ?privatePerson;
        schema:headline ?headline;
        schema:description ?articleDescription;
        schema:datePublished ?datePublished;
        schema:url ?url;
        schema:position ?position.

      OPTIONAL {
        ?article schema:image ?image.
        ?image schema:name ?imageName;
          schema:contentUrl ?imageContentUrl.
        OPTIONAL { ?image schema:description ?imageAltText. }
      }
      BIND(true AS ?hasArticles)
    }
  }

  BIND(CONCAT(?name, " - GraphCentric") AS ?pageTitle)
  BIND(IRI(CONCAT(STR(?publicProfileResource), ".html")) AS ?personUrl)
}

Query Scope

Named Graphs

6 graphs

Resource State

Turtle

Server rendered
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/ai-agent-production-database>
        rdf:type              schema:Article;
        gcs:summary           "OAuth2 scopes provide a practical way to limit what AI agents can do on behalf of users in production systems. This article shows how a mature web standard can become an enforceable safety boundary before an agent gets anywhere near destructive operations.";
        schema:datePublished  "2026-04-28"^^xsd:date;
        schema:description    "OAuth2 scopes provide a practical way to limit what AI agents can do on behalf of users in production systems. This article shows how a mature web standard can become an enforceable safety boundary before an agent gets anywhere near destructive operations.";
        schema:headline       "How to Prevent Your AI Agent Deleting Your Production Database";
        schema:image          <https://graphcentric.com/media/blog/ai-agent-production-database/ai-agent-database-guardrails>;
        schema:position       3;
        schema:url            <https://graphcentric.com/blog/ai-agent-production-database.html> .

<https://graphcentric.com/blog/semantic-layer-context>
        rdf:type              schema:Article;
        gcs:summary           "AI projects need more than larger models: they need reliable business context. This article explains why context graphs and semantic layers help humans and AI agents access connected, traceable information for better decisions.";
        schema:datePublished  "2026-05-12"^^xsd:date;
        schema:description    "AI projects need more than larger models: they need reliable business context. This article explains why context graphs and semantic layers help humans and AI agents access connected, traceable information for better decisions.";
        schema:headline       "The Rise of the Semantic Layer: Context is King";
        schema:image          <https://graphcentric.com/media/blog/semantic-layer-context/semantic-layer-context>;
        schema:position       1;
        schema:url            <https://graphcentric.com/blog/semantic-layer-context.html> .

<https://graphcentric.com/media/blog/ai-agent-production-database/ai-agent-database-guardrails>
        rdf:type            schema:ImageObject;
        schema:contentUrl   <https://graphcentric.com/media/blog/ai-agent-production-database/ai-agent-database-guardrails.jpg>;
        schema:description  "Illustration representing guardrails between AI agents and production database operations.";
        schema:name         "AI Agent Database Guardrails" .

<https://graphcentric.com/media/blog/semantic-layer-context/semantic-layer-context>
        rdf:type            schema:ImageObject;
        schema:contentUrl   <https://graphcentric.com/media/blog/semantic-layer-context/semantic-layer-context.jpg>;
        schema:description  "Illustration representing a semantic layer that connects business context for humans and AI agents.";
        schema:name         "Semantic Layer Context" .

<https://graphcentric.com/people/ms>
        rdf:type             schema:Person;
        dcterms:description  "Malcolm is building GraphCentric around the idea that application data should live in a shared, governed semantic layer rather than inside isolated application silos. His work focuses on RDF, web-native resource design, access-controlled updates, and making enterprise data safely usable by both people and AI agents.";
        dcterms:title        "Malcolm Sparks - GraphCentric";
        gcs:article          <https://graphcentric.com/blog/link-relations> , <https://graphcentric.com/blog/ai-agent-production-database> , <https://graphcentric.com/blog/semantic-layer-context>;
        gcs:bio              "Malcolm is building GraphCentric around the idea that application data should live in a shared, governed semantic layer rather than inside isolated application silos. His work focuses on RDF, web-native resource design, access-controlled updates, and making enterprise data safely usable by both people and AI agents.";
        gcs:describes        <https://graphcentric.com/people/22d4c93006d76289b4b7>;
        gcs:hasArticles      true;
        schema:description   "Malcolm is building GraphCentric around the idea that application data should live in a shared, governed semantic layer rather than inside isolated application silos. His work focuses on RDF, web-native resource design, access-controlled updates, and making enterprise data safely usable by both people and AI agents.";
        schema:jobTitle      "Founder";
        schema:name          "Malcolm Sparks";
        schema:url           <https://graphcentric.com/people/ms.html> .

<https://graphcentric.com/blog/link-relations>
        rdf:type              schema:Article;
        gcs:summary           "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: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:position       2;
        schema:url            <https://graphcentric.com/blog/link-relations.html> .

<https://graphcentric.com/media/blog/link-relations/graphcentric-ai-first-foundation>
        rdf:type            schema:ImageObject;
        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:name         "GraphCentric AI-First Foundation" .

SSE Status

Stream link relations
streamstatussubscriberslast idstate
No stream resources are linked from this resource.