GraphCentric developer view
https://graphcentric.one/jobs
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.one/jobs
- Graph
- https://graphcentric.one/graphs/public-resources
- Query
- s3://graphcentric.one/jobs.sparql
Link Relations
7 links| rel | title | type | href |
|---|---|---|---|
| alternate | HTML | text/html;charset=utf-8 | https://graphcentric.one/jobs.html |
| alternate | JSON-LD | application/ld+json;charset=utf-8 | https://graphcentric.one/jobs.jsonld |
| https://graphcentric.info/link-relations/datastar-html-patch-stream | Jobs HTML Patch Stream | https://graphcentric.one/jobs.html.stream | |
| https://graphcentric.info/link-relations/jsonld-state-stream | Jobs JSON-LD Stream | https://graphcentric.one/jobs.jsonld.stream | |
| related | Candidates | text/html;charset=utf-8 | https://graphcentric.one/candidates.html |
| related | Hiring reports | text/html;charset=utf-8 | https://graphcentric.one/hiring/reports.html |
| related | Interviews | text/html;charset=utf-8 | https://graphcentric.one/interviews.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.one/jobs>
rdf:type gcs:WebResource;
gcs:graph <https://graphcentric.one/graphs/public-resources>;
gcs:link <https://graphcentric.one/jobs/.links/related-candidates> , <https://graphcentric.one/jobs/.links/related-interviews> , <https://graphcentric.one/jobs/.links/datastar-html-patch-stream> , <https://graphcentric.one/jobs/.links/related-hiring-reports> , <https://graphcentric.one/jobs/.links/alternate-jsonld> , <https://graphcentric.one/jobs/.links/alternate-html> , <https://graphcentric.one/jobs/.links/jsonld-state-stream>;
gcs:query <s3://graphcentric.one/jobs.sparql>;
schema:name "Jobs" .
<https://graphcentric.one/jobs/.links/jsonld-state-stream>
rdf:type gcs:Link;
gcs:rel "https://graphcentric.info/link-relations/jsonld-state-stream";
gcs:target <https://graphcentric.one/jobs.jsonld.stream>;
gcs:type "text/event-stream";
schema:name "Jobs JSON-LD Stream" .
<https://graphcentric.one/interviews.html>
rdf:type gcs:WebResource;
gcs:contentType "text/html;charset=utf-8";
gcs:frame <s3://graphcentric.one/interviews-frame.jsonld>;
gcs:graph <https://graphcentric.one/graphs/public-resources>;
gcs:outerTemplate <s3://graphcentric.one/templates/one-root-v2.html>;
gcs:template <s3://graphcentric.one/interviews.html>;
schema:name "Interviews HTML" .
<https://graphcentric.one/jobs/.links/related-candidates>
rdf:type gcs:Link;
gcs:rel "related";
gcs:target <https://graphcentric.one/candidates.html>;
gcs:type "text/html";
schema:name "Candidates" .
<https://graphcentric.one/candidates.html>
rdf:type gcs:WebResource;
gcs:contentType "text/html;charset=utf-8";
gcs:frame <s3://graphcentric.one/candidates-frame.jsonld>;
gcs:graph <https://graphcentric.one/graphs/public-resources>;
gcs:outerTemplate <s3://graphcentric.one/templates/one-root-v2.html>;
gcs:template <s3://graphcentric.one/candidates.html>;
schema:name "Candidates HTML" .
<https://graphcentric.one/jobs/.links/alternate-html>
rdf:type gcs:Link;
gcs:rel "alternate";
gcs:target <https://graphcentric.one/jobs.html>;
gcs:type "text/html";
schema:name "HTML" .
<https://graphcentric.one/jobs/.links/datastar-html-patch-stream>
rdf:type gcs:Link;
gcs:rel "https://graphcentric.info/link-relations/datastar-html-patch-stream";
gcs:target <https://graphcentric.one/jobs.html.stream>;
gcs:type "text/event-stream";
schema:name "Jobs HTML Patch Stream" .
<https://graphcentric.one/jobs.jsonld>
rdf:type gcs:WebResource;
gcs:contentType "application/ld+json;charset=utf-8";
gcs:frame <s3://graphcentric.one/jobs-frame.jsonld>;
gcs:graph <https://graphcentric.one/graphs/public-resources>;
gcs:qualityOfSource "0.9"^^xsd:float;
schema:name "Jobs JSON-LD" .
<https://graphcentric.one/jobs/.links/alternate-jsonld>
rdf:type gcs:Link;
gcs:rel "alternate";
gcs:target <https://graphcentric.one/jobs.jsonld>;
gcs:type "application/ld+json";
schema:name "JSON-LD" .
<https://graphcentric.one/jobs/.links/related-interviews>
rdf:type gcs:Link;
gcs:rel "related";
gcs:target <https://graphcentric.one/interviews.html>;
gcs:type "text/html";
schema:name "Interviews" .
<https://graphcentric.one/hiring/reports.html>
rdf:type gcs:WebResource;
gcs:contentType "text/html;charset=utf-8";
gcs:frame <s3://graphcentric.one/hiring/reports-frame.jsonld>;
gcs:graph <https://graphcentric.one/graphs/public-resources>;
gcs:outerTemplate <s3://graphcentric.one/templates/one-root-v2.html>;
gcs:template <s3://graphcentric.one/hiring/reports.html>;
schema:name "Hiring Reports HTML" .
<https://graphcentric.one/jobs.html>
rdf:type gcs:WebResource;
gcs:contentType "text/html;charset=utf-8";
gcs:frame <s3://graphcentric.one/jobs-frame.jsonld>;
gcs:graph <https://graphcentric.one/graphs/public-resources>;
gcs:outerTemplate <s3://graphcentric.one/templates/one-root-v2.html>;
gcs:template <s3://graphcentric.one/jobs.html>;
schema:name "Jobs HTML" .
<https://graphcentric.one/jobs/.links/related-hiring-reports>
rdf:type gcs:Link;
gcs:rel "related";
gcs:target <https://graphcentric.one/hiring/reports.html>;
gcs:type "text/html";
schema:name "Hiring reports" .
SPARQL Query
s3://graphcentric.one/jobs.sparqlBASE <https://graphcentric.one/>
PREFIX schema: <https://schema.org/>
PREFIX one: <https://graphcentric.info/ns/one#>
PREFIX gcs: <https://graphcentric.com/schema/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
# Hiring โ Jobs (plan 30 Stage 6, LIVE). Company-visible job postings in
# /graphs/one-jobs (NO candidate data โ that is the private one-hiring
# compartment). One row per schema:JobPosting; the count backs the design's
# Hiring panel "Jobs" badge (4c). Open-role count is derived here for the header.
CONSTRUCT {
?_subject a one:JobList ;
schema:name "Jobs" ;
one:kicker ?kicker ;
one:description ?pageDesc ;
one:isPublic "true" ;
one:canManage ?canManage ;
one:jobCount ?jobCount ;
one:openCount ?openCount ;
one:jobRow ?job .
?job a one:JobRow ;
schema:name ?title ;
one:jobIri ?jobIriStr ;
one:jobKey ?jobKey ;
one:statusName ?statusName ;
one:statusSlug ?statusSlug ;
one:department ?department ;
one:jobLocation ?location ;
one:workplaceType ?workplaceType ; schema:employmentType ?employmentType ; one:contractType ?contractType ;
one:detailUrl ?detailUrl ;
schema:description ?description ;
one:openings ?openings ;
schema:datePosted ?datePosted ;
one:sortKey ?sortKey .
}
WHERE {
# Caller role โ server-side shell rail trim + panel footer (plan 30).
BIND(IF(EXISTS { GRAPH </graphs/org-chart> { ?_user gcs:memberOf </teams/one-admins> } }, "Admin",
IF(EXISTS { GRAPH </graphs/org-chart> { ?_user gcs:memberOf </teams/one-managers> } }, "Manager",
IF(EXISTS { GRAPH </graphs/org-chart> { ?_user gcs:memberOf </teams/one-recruiters> } }, "Recruiter",
IF(EXISTS { GRAPH </graphs/org-chart> { ?_user gcs:memberOf </teams/one-employees> } }, "Employee", "")))) AS ?userRole)
# Display-only role label (plan 37 walkthrough): contractors read "Contractor" in
# the shell footer; ?userRole keeps its trim semantics untouched.
BIND(IF(EXISTS { GRAPH </graphs/one-org> { ?_user one:workerType </worker-types/contractor> } }, "Contractor", ?userRole) AS ?userRoleLabel)
# Force /graphs/org-chart into this query's dataset (platform quirk, DEVLOG #90):
# mothership builds a query's dataset from graphs referenced in POSITIVE patterns
# only, so org-chart referenced solely inside the userRole BIND's EXISTS is never
# loaded and every such EXISTS silently returns false -> userRole collapses to ""
# (a trimmed shell rail). This scalar sub-SELECT reads it positively (one row, no
# fan-out) so the userRole/board EXISTS above see the real memberships.
{ SELECT (COUNT(*) AS ?orgChartLoaded) WHERE { GRAPH </graphs/org-chart> { ?ocS ?ocP ?ocO } } }
# Scalar sub-SELECTs (no GROUP BY) always yield one row, so the page root emits
# even before any posting is visible.
{ SELECT (COUNT(DISTINCT ?j) AS ?jobCountRaw) WHERE {
GRAPH </graphs/one-jobs> { ?j a schema:JobPosting . }
} }
{ SELECT (COUNT(DISTINCT ?jo) AS ?openCountRaw) WHERE {
GRAPH </graphs/one-jobs> { ?jo a schema:JobPosting ; one:jobStatus </job-statuses/open> . }
} }
BIND(STR(?openCountRaw) AS ?openCount)
BIND(STR(IF(?userRole = "", ?openCountRaw, ?jobCountRaw)) AS ?jobCount)
BIND(IF(
EXISTS { GRAPH </graphs/org-chart> { ?_user gcs:memberOf </teams/one-admins> } } ||
EXISTS { GRAPH </graphs/org-chart> { ?_user gcs:memberOf </teams/one-recruiters> } } ||
EXISTS { GRAPH </graphs/org-chart> { ?_user gcs:memberOf </teams/one-managers> } },
"true", "") AS ?canManage)
BIND(IF(?userRole = "", "Careers", "Hiring") AS ?kicker)
BIND(IF(?userRole = "", "Open roles.", "Open and in-flight roles.") AS ?pageDesc)
OPTIONAL {
GRAPH </graphs/one-jobs> {
?job a schema:JobPosting ;
schema:title ?title ;
one:jobKey ?jobKey ;
one:jobStatus ?status .
OPTIONAL { ?job one:department ?department . }
OPTIONAL { ?job one:jobLocation ?location . }
OPTIONAL { ?job one:workplaceType ?workplaceType }
OPTIONAL { ?job schema:employmentType ?employmentType }
OPTIONAL { ?job one:contractType ?contractType }
# For aggregators reading the JSON-LD (DOC-192 ยง9.1 J): the description
# a requisition published, the openings and the posting date.
OPTIONAL { ?job schema:description ?description . }
OPTIONAL { ?job one:openings ?openings . }
OPTIONAL { ?job schema:datePosted ?datePosted . }
}
# A visitor sees only open postings. A signed-in workspace member sees
# every posting they can read (drafts and filled stay on the hiring list).
FILTER(?userRole != "" || ?status = </job-statuses/open>)
# Status label from the shared controlled vocabulary (SKOS concept).
# Anonymous callers cannot read one-internal: fall back to the IRI tail.
OPTIONAL { GRAPH </graphs/one-internal> { ?status schema:name ?statusNameRaw ; schema:identifier ?statusSlugRaw . } }
BIND(COALESCE(?statusNameRaw, REPLACE(STR(?status), "^.*/", "")) AS ?statusName)
BIND(COALESCE(?statusSlugRaw, REPLACE(STR(?status), "^.*/", "")) AS ?statusSlug)
BIND(STR(?job) AS ?jobIriStr)
BIND(STR(?job) AS ?detailUrl)
BIND(?jobKey AS ?sortKey)
}
}
Query Scope
Named Graphs
Resource State
Turtle
PREFIX dcterms: <http://purl.org/dc/terms/>
PREFIX gcs: <https://graphcentric.com/schema/>
PREFIX one: <https://graphcentric.info/ns/one#>
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.one/jobs/JOB-1>
rdf:type one:JobRow;
one:department "";
one:detailUrl "https://graphcentric.one/jobs/JOB-1";
one:jobIri "https://graphcentric.one/jobs/JOB-1";
one:jobKey "JOB-1";
one:jobLocation "";
one:sortKey "JOB-1";
one:statusName "open";
one:statusSlug "open";
schema:datePosted "2026-09-08"^^xsd:date;
schema:name "Junior Developer" .
<https://graphcentric.one/jobs>
rdf:type one:JobList;
one:canManage "";
one:description "Open roles.";
one:isPublic "true";
one:jobCount "2";
one:jobRow <https://graphcentric.one/JB-1> , <https://graphcentric.one/jobs/JOB-1>;
one:kicker "Careers";
one:openCount "2";
schema:name "Jobs" .
<https://graphcentric.one/JB-1>
rdf:type one:JobRow;
one:contractType "Permanent employment";
one:detailUrl "https://graphcentric.one/JB-1";
one:jobIri "https://graphcentric.one/JB-1";
one:jobKey "JB-1";
one:jobLocation "London";
one:openings 2;
one:sortKey "JB-1";
one:statusName "open";
one:statusSlug "open";
one:workplaceType "On-site working";
schema:datePosted "2026-10-20"^^xsd:date;
schema:description "\\- designing and developing an integrated stack of enterprise applications for various corporate back-office functions\n\n\\- using Semantic Web technologies such as SPARQL and RDF, web technologies such as HTML, CSS and JavaScript\n\n\\- working with a Graph database (Apache Fuseki), and helping to improve its performance\n\n\\- working with security technologies such as OAuth2 and OpenID Connect\n\n\\- working with AI models, from the leading frontier labs such as OpenAI, xAI and Anthropic\n\n\\- doing various front-end and back-end development tasks\n\n\\- ontology modelling with RDF";
schema:employmentType "Full-time employment";
schema:name "Junior Developer" .
SSE Status
Stream link relations| stream | status | subscribers | last id | state |
|---|---|---|---|---|
| https://graphcentric.one/jobs.html.stream | inactive | 0 | ||
| https://graphcentric.one/jobs.jsonld.stream | inactive | 0 |