Weft
A vocabulary for evidence-backed career graphs.
Weft describes a person's career as a graph: the roles they held, what they studied, built and wrote, the credentials and awards they received, and the skills each of those involved. Every role, degree and project is its own node, linked to where it happened and to the skills it used, taught or certified, so a skill can always be traced back to the work behind it.
Weft builds on schema.org for the kinds of things (people, organisations, roles, credentials, creative works, defined terms) and adds the relations that schema.org doesn't have, or only has as plain text. Skills can be matched to shared concepts such as ESCO or Wikidata with SKOS mappings. CV and portfolio sites, talent tools and research datasets can all use it; Graph Resume is the first application.
The name comes from weaving: the warp is the timeline of roles, studies and projects, and the weft is the skills threaded through them.
TurtleJSON-LDRDF/XMLN-TriplesJSON-LD contextSHACL shapesExample
How it fits together
The kinds of things come from schema.org: the person is a schema:Person, each job a schema:OrganizationRole, each degree or certificate a schema:EducationalOccupationalCredential, each project a schema:CreativeWork, each skill a schema:DefinedTerm, grouped into skill areas (schema:DefinedTermSet). Only awards and career breaks needed classes of their own.
The relations are Weft's. schema.org mostly links a person straight to an organisation (schema:worksFor, schema:alumniOf) and lists skills on the person as text. In Weft every job, degree and project is its own node, linked to where it happened and to the skills it used, trained or certified. That's the evidence layer: any skill can be traced back to the work behind it, and a skill nothing points to stands out.
Where a Weft relation is a special case of a schema.org property it says so (rdfs:subPropertyOf, owl:inverseOf), so data stays useful to tools that only know schema.org. Skills, languages and tools can be matched to shared concepts in ESCO or Wikidata with skos:exactMatch and skos:closeMatch.
Using it
In Turtle, declare the prefix and describe the career with schema.org types and Weft relations:
@prefix weft: <https://w3id.org/weft#> .
@prefix schema: <https://schema.org/> .
@prefix ex: <https://example.org/jordan#> .
ex:me a schema:Person ;
schema:name "Jordan Example" ;
weft:worksAs ex:r-senior .
ex:r-senior a schema:OrganizationRole ;
schema:name "Senior Data Analyst" ;
schema:startDate "2023-03" ;
weft:at ex:o-lumen ;
weft:used ex:s-sql .
ex:o-lumen a schema:Organization ; schema:name "Lumen Freight" .
ex:s-sql a schema:DefinedTerm ; schema:name "SQL" .
As JSON-LD, the context lets you write the same thing as plain JSON:
{
"@context": "https://w3id.org/weft/context.jsonld",
"id": "https://example.org/jordan#me",
"type": "Person",
"name": "Jordan Example",
"worksAs": {
"id": "https://example.org/jordan#r-senior",
"type": "OrganizationRole",
"name": "Senior Data Analyst",
"startDate": "2023-03",
"at": {
"id": "https://example.org/jordan#o-lumen",
"type": "Organization",
"name": "Lumen Freight"
},
"used": [
{
"id": "https://example.org/jordan#s-sql",
"type": "DefinedTerm",
"name": "SQL"
}
]
}
}
Then ask the graph questions, for example in SPARQL:
PREFIX weft: <https://w3id.org/weft#>
PREFIX schema: <https://schema.org/>
# Which roles, projects and courses back each skill?
SELECT ?skill ?evidence WHERE {
?x weft:used|weft:trainedIn|weft:shows ?s .
?s schema:name ?skill .
?x schema:name ?evidence .
} ORDER BY ?skill
To check data, run tools/check.py from the repository (every relation connects the kinds of things it should) and validate it against the SHACL shapes, which also warn about skills nothing backs up.
All relations at a glance
Classes
Award weft:Award
A recognition given to the person, for example by an employer. schema.org only has award as a text property, so this makes awards nodes that can be linked to who gave them.
- IRI
https://w3id.org/weft#Award- Subclass of
schema:Thing- Compare
schema:award
- Team award for the depot analytics rollout is a Award
Career break weft:CareerBreak
A period between roles, with what happened during it. Lets a gap be described honestly instead of left blank.
- IRI
https://w3id.org/weft#CareerBreak- Subclass of
schema:Thing
- Gap year is a Career break
Relations
Examples are from the example, a made-up person.
held role weft:heldRole
The person held this role. Use the more specific worked as (finished) or works as (current).
- IRI
https://w3id.org/weft#heldRole- From
schema:Person- To
schema:OrganizationRole- Broader than
weft:workedAs,weft:worksAs- Compare
schema:hasOccupation
Usually stated through weft:workedAs, weft:worksAs.
worked as weft:workedAs
The person held this role in the past; the role has an end date.
- IRI
https://w3id.org/weft#workedAs- From
schema:Person- To
schema:OrganizationRole- Narrower than
weft:heldRole
- Jordan Example worked as Data Analyst
works as weft:worksAs
The person holds this role now; the role has no end date.
- IRI
https://w3id.org/weft#worksAs- From
schema:Person- To
schema:OrganizationRole- Narrower than
weft:heldRole
- Jordan Example works as Senior Data Analyst
studied weft:studied
The person studied for this degree or certificate, finished or still in progress. (schema:hasCredential would claim the credential is already held.)
- IRI
https://w3id.org/weft#studied- From
schema:Person- To
schema:EducationalOccupationalCredential- Compare
schema:hasCredential,schema:alumniOf
- Jordan Example studied Analytics Engineering Certificate
- Jordan Example studied B.Sc. Statistics
holds weft:holds
The person holds this certification.
- IRI
https://w3id.org/weft#holds- From
schema:Person- To
schema:EducationalOccupationalCredential- Narrower than
schema:hasCredential
- Jordan Example holds Cloud Data Practitioner
built weft:built
The person built or authored this project.
- IRI
https://w3id.org/weft#built- From
schema:Person- To
schema:CreativeWork- Compare
schema:creator
- Jordan Example built Delivery delay dashboard
wrote weft:wrote
The person is an author of this publication.
- IRI
https://w3id.org/weft#wrote- From
schema:Person- To
schema:ScholarlyArticle- Inverse of
schema:author
- Jordan Example wrote A short note on seasonal parcel forecasts
speaks weft:speaks
The person speaks this language; how well is given by proficiency on the language.
- IRI
https://w3id.org/weft#speaks- From
schema:Person- To
schema:Language- Narrower than
schema:knowsLanguage
- Jordan Example speaks English
- Jordan Example speaks German
received weft:received
The person received this award.
- IRI
https://w3id.org/weft#received- From
schema:Person- To
weft:Award- Compare
schema:award
- Jordan Example received Team award for the depot analytics rollout
specialises in weft:focusOn
One of the person's skill areas.
- IRI
https://w3id.org/weft#focusOn- From
schema:Person- To
schema:DefinedTermSet
- Jordan Example specialises in Data engineering
- Jordan Example specialises in Statistics
took weft:took
The person took this career break.
- IRI
https://w3id.org/weft#took- From
schema:Person- To
weft:CareerBreak
- Jordan Example took Gap year
at weft:at
Where a role was held (the employer) or where a degree or certificate was studied (the school).
- IRI
https://w3id.org/weft#at- From
schema:OrganizationRoleorschema:EducationalOccupationalCredential- To
schema:Organization- Compare
schema:worksFor,schema:alumniOf
- Analytics Engineering Certificate at Example Data Academy
- B.Sc. Statistics at Example University of Applied Sciences
- Data Analyst at Lumen Freight
promoted from weft:promotedFrom
This role followed the earlier role through a promotion at the same organisation.
- IRI
https://w3id.org/weft#promotedFrom- From
schema:OrganizationRole- To
schema:OrganizationRole
- Senior Data Analyst promoted from Data Analyst
led to weft:ledTo
A programme of study that led directly to this role, for example a certificate run with an employer.
- IRI
https://w3id.org/weft#ledTo- From
schema:EducationalOccupationalCredential- To
schema:OrganizationRole
- Analytics Engineering Certificate led to Data Analyst
run with weft:runWith
An organisation that co-ran this programme with the school.
- IRI
https://w3id.org/weft#runWith- From
schema:EducationalOccupationalCredential- To
schema:Organization
- Analytics Engineering Certificate run with Lumen Freight
part of weft:partOf
This project was done as part of a degree or a larger work, for example a thesis within a master's.
- IRI
https://w3id.org/weft#partOf- From
schema:CreativeWork- To
schema:EducationalOccupationalCredentialorschema:CreativeWork- Compare
schema:isPartOf
- Bachelor's thesis: forecasting weekly parcel volumes part of B.Sc. Statistics
included weft:included
Something done during a career break, such as freelance work or a certification.
- IRI
https://w3id.org/weft#included- From
weft:CareerBreak- To
schema:OrganizationRoleorschema:EducationalOccupationalCredentialorschema:CreativeWork
- Gap year included Cloud Data Practitioner
- Gap year included Food bank stock tracker (volunteer)
awarded by weft:awardedBy
The organisation that gave the award.
- IRI
https://w3id.org/weft#awardedBy- From
weft:Award- To
schema:Organization- Compare
schema:recognizedBy
- Team award for the depot analytics rollout awarded by Lumen Freight
used weft:used
A skill put to use in this role, project or career break, including a language used at work. Together with trained in and shows, it ties each skill to the work behind it.
- IRI
https://w3id.org/weft#used- From
schema:OrganizationRoleorschema:CreativeWorkorweft:CareerBreakorweft:Award- To
schema:DefinedTermorschema:Language- Compare
schema:skills
- Team award for the depot analytics rollout used dbt
- Gap year used Spreadsheets
- Delivery delay dashboard used dbt
trained in weft:trainedIn
A skill taught or practised during this degree or course.
- IRI
https://w3id.org/weft#trainedIn- From
schema:EducationalOccupationalCredential- To
schema:DefinedTerm- Compare
schema:teaches
- Analytics Engineering Certificate trained in SQL
- B.Sc. Statistics trained in Python
- B.Sc. Statistics trained in Statistical modelling
shows weft:shows
A skill this certification is evidence of.
- IRI
https://w3id.org/weft#shows- From
schema:EducationalOccupationalCredential- To
schema:DefinedTerm- Compare
schema:competencyRequired
- Cloud Data Practitioner shows SQL
belongs to weft:inGroup
The skill area this skill is grouped under. Weft doesn't limit how many; an application can (Graph Resume allows one).
- IRI
https://w3id.org/weft#inGroup- From
schema:DefinedTerm- To
schema:DefinedTermSet- Narrower than
schema:inDefinedTermSet
- dbt belongs to Data engineering
- Python belongs to Data engineering
- Spreadsheets belongs to Data engineering
Value properties
kind weft:kind
An application's own label for what kind of item this is (for example Role, Education, Certification, Project, Skill). Several kinds can share a schema.org type: a degree and a certification are both schema:EducationalOccupationalCredential, and kind keeps them apart without new classes.
- IRI
https://w3id.org/weft#kind- To
xsd:string
- Team award for the depot analytics rollout kind “Award”
highlight weft:highlight
One achievement or responsibility in a role, degree or project, as one short statement (like a bullet point on a CV). Order is not significant.
- IRI
https://w3id.org/weft#highlight- To
xsd:string
- Data Analyst highlight “Replaced a weekly spreadsheet report with a SQL model and a dashboard the operations tea…”
location weft:location
Where it took place, as free text (city and country, or remote). Use schema:location for a structured place.
- IRI
https://w3id.org/weft#location- To
xsd:string- Compare
schema:location
- Data Analyst location “Hamburg, Germany”
proficiency weft:proficiency
How well a language is spoken: a CEFR level (A1 to C2) or Native, Fluent or Basic.
- IRI
https://w3id.org/weft#proficiency- From
schema:Language- To
xsd:string
- English proficiency “Native”
Related vocabularies
Weft reuses or links to these rather than replacing them.
Used by
- Graph Resume: Rishi Rajani's résumé as an interactive knowledge graph, published as Turtle and JSON-LD. Data (Turtle)
Using Weft somewhere? Open an issue to be listed.
Citing
Rishi Rajani (2026). Weft: a vocabulary for evidence-backed career graphs, version 1.0. https://w3id.org/weft/1.0