Skip to content

Schema.org Relationship Modeling Research

Understanding Schema.org’s relationship model is critical because:

  1. Schema.org is the web standard — Used on 45+ million domains, co-created by Google, Microsoft, Yahoo, Yandex
  2. Google interprets these relationships — Affects Knowledge Graph, search understanding, AI reasoning
  3. JSON-LD is the preferred format — 83% adoption; Google’s recommended approach
  4. Pragmatic design over academic purity — Tradeoffs made for real-world adoption

This document focuses specifically on RELATIONSHIPS, not entity types.


PropertyDescriptionDirectionalityNotes
knowsMost generic bi-directional social/work relationSymmetricDeliberately generic; equivalent to FOAF’s foaf:knows
spousePerson’s spouseSymmetricExpects Person
colleagueA colleague of the personSymmetricAccepts Person or URL
relatedToMost generic familial relationSymmetricFor family connections
parentA parent of this personDirectionalInverse: children
childrenA child of the personDirectionalInverse: parent
siblingA sibling of the personSymmetricNo explicit inverse needed
followsMost generic uni-directional social relationDirectionalSocial media-style following

Key Insight: Schema.org deliberately uses generic terms (knows, relatedTo) rather than granular relationship types. This is a conscious design choice favoring broad adoption over precise semantics.

PropertyDescriptionDirectionNotes
worksForOrganizations that person works forPerson → OrgCurrent employment
affiliationOrganization person is affiliated withPerson → OrgBroader than employment (schools, clubs, teams)
memberOfOrganization/ProgramMembership person belongs toPerson → OrgHas inverse: member
alumniOfOrganization person is alumni ofPerson → OrgHas inverse: alumni
sponsorPerson/org that supports somethingEither directionFinancial/support relationship
funderPerson/org providing financial contributionEither directionMore specific than sponsor
PropertyDescriptionDirectionInverse
memberMember of an OrganizationOrg → Person/OrgmemberOf
employeeSomeone working for the organizationOrg → Person
founderPerson/org who founded this organizationOrg → Person/Org
alumniAlumni of the organizationOrg → PersonalumniOf
parentOrganizationParent organizationOrg → OrgsubOrganization
subOrganizationSubsidiary/child organizationOrg → OrgparentOrganization
PropertyDescriptionDomainInverse
hasPartIndicates something contains partsCreativeWork, PlaceisPartOf
isPartOfIndicates something is part of a larger wholeCreativeWork, PlacehasPart
containedInPlaceGeographic containmentPlacecontainsPlace
containsPlacePlace contains another placePlacecontainedInPlace
PropertyDescriptionDirectionNotes
authorWho created itCreativeWork → Person/Org
creatorBroader than authorCreativeWork → Person/OrgFor non-textual works
publisherWho published itCreativeWork → Person/Org
contributorSecondary contributorCreativeWork → Person/Org
aboutSubject matterCreativeWork → ThingWhat the work is about
mentionsReferences another thingCreativeWork → ThingWeaker than about

Relationship Directionality & Inverse Properties

Section titled “Relationship Directionality & Inverse Properties”

Schema.org explicitly declares inverse relationships using the inverseOf property at the schema level:

alumni → inverseOf → alumniOf
member → inverseOf → memberOf
hasPart → inverseOf → isPartOf
parentOrganization → inverseOf → subOrganization
owns → inverseOf → owner
makesOffer → inverseOf → offeredBy
mainEntity → inverseOf → mainEntityOfPage

Key Properties with Declared Inverses:

PropertyInverse Property
alumniOfalumni
memberOfmember
isPartOfhasPart
parentOrganizationsubOrganization
ownsowner
makesOfferofferedBy
mainEntityOfPagemainEntity
aboutsubjectOf
fundingfundedItem

Many Schema.org relationships lack declared inverses:

  • worksFor — No inverse like employs (use employee on Organization instead)
  • knows — Bi-directional by definition, no formal inverse
  • spouse — Symmetric, no inverse needed
  • author — No formal inverse (though creator property exists)
  • parent/children — These ARE inverses of each other but not formally declared

Practical Implication: When an inverse doesn’t exist, you must:

  1. Express the relationship from both directions explicitly
  2. Use JSON-LD’s @reverse keyword
  3. Let consuming applications infer the inverse

When Schema.org lacks a property for the inverse direction, JSON-LD provides @reverse:

{
"@context": "https://schema.org",
"@type": "WebPage",
"@reverse": {
"mentions": [
{
"@type": "WebPage",
"url": "https://example.com/page-that-links-to-me"
}
]
}
}

This expresses “this other page mentions me” when you can only say “I mention them” with the standard property.

Important: Google’s Rich Results Test validates @reverse syntax, but it’s unclear how much Google uses reverse relationships for knowledge extraction.


Schema.org handles time-bound relationships through the Role type:

{
"@context": "https://schema.org",
"@type": "SportsTeam",
"name": "San Francisco 49ers",
"member": {
"@type": "OrganizationRole",
"member": {
"@type": "Person",
"name": "Joe Montana"
},
"startDate": "1979",
"endDate": "1992",
"roleName": "Quarterback"
}
}

Role Properties:

  • startDate — When the role began (ISO 8601 format)
  • endDate — When the role ended (ISO 8601 format)
  • roleName — Specific name of the role (e.g., “Quarterback”, “CEO”)

Role Subtypes:

  • Role — Generic role wrapper
  • OrganizationRole — For organizational membership with numberedPosition
  • EmployeeRole — Adds baseSalary, salaryCurrency for employment
  • PerformanceRole — For performers (characterName)
  • LinkRole — For qualifying hyperlinks

Direct temporal properties (without Role wrapper):

PropertyUsed OnPurpose
startDateEvent, Role, Schedule, CreativeWorkSeasonWhen something begins
endDateEvent, Role, Schedule, CreativeWorkSeasonWhen something ends
validFromOffer, PriceSpecification, PermitWhen something becomes valid
validThroughOffer, JobPosting, DemandWhen validity expires
birthDatePersonDate of birth
deathDatePersonDate of death
foundingDateOrganizationWhen org was founded
dissolutionDateOrganizationWhen org was dissolved
datePublishedCreativeWorkPublication date
dateCreatedCreativeWorkCreation date
dateModifiedCreativeWorkLast modification

Key Distinction:

  • startDate/endDate — For events and time-bound activities
  • validFrom/validThrough — For validity periods (offers, pricing, permits)
{
"@context": "https://schema.org/",
"@type": "Person",
"name": "Albert Einstein",
"hasOccupation": [
{
"@type": "Role",
"hasOccupation": {
"@type": "Occupation",
"name": "Patent examiner",
"occupationalCategory": "23-2099.00"
},
"startDate": "1901",
"endDate": "1906"
},
{
"@type": "Occupation",
"name": "Professor of Physics",
"educationRequirements": "PhD in Physics"
}
]
}

Schema.org has no built-in mechanism for:

  • Relationship strength/intensity (1-10 scale)
  • Acquaintance vs friend vs close friend
  • Confidence levels
  • Frequency of interaction
  • Emotional closeness

This is a significant limitation for social/personal relationship modeling.

The RELATIONSHIP vocabulary extends FOAF with more granular relationship types:

RelationshipDefinition
acquaintanceOfMore than slight knowledge but short of friendship
friendOfMutual friendship
closeFriendOfClose mutual friendship
parentOfParent of this person
childOfChild of this person
spouseOfMarried to
lifePartnerOfDomestic partner
enemyOfMutual enmity
collaboratesWithWorking together on a project
employerOfEmploys this person
employedByEmployed by this person
mentorOfActs as mentor
apprenticeToApprentice of

Note: This vocabulary is categorical (friend vs acquaintance) rather than quantitative (strength = 0.7).

For relationship strength, you’d need custom properties:

{
"@context": {
"@vocab": "https://schema.org/",
"relationshipStrength": "https://example.org/relationshipStrength"
},
"@type": "Person",
"name": "Alice",
"knows": {
"@type": "Person",
"name": "Bob",
"relationshipStrength": 0.8
}
}

However, Google won’t interpret custom properties for search features.


Schema.org uses subPropertyOf to establish property hierarchies:

  • If property A is a subproperty of B, then A implies B
  • Example: If author were subproperty of creator, every author would also be a creator

Example Hierarchies:

affiliation → subPropertyOf → memberOf (affiliation is more specific)
GenericSpecific Alternatives
knowscolleague, spouse, sibling
relatedToparent, children, spouse
creatorauthor, illustrator, composer
contributoreditor, translator

Recommendation: Use the most specific property that applies. Use generic properties (knows, relatedTo) only when more specific ones don’t fit.


{
"@context": "https://schema.org",
"@type": "Person",
"name": "Jane Doe",
"colleague": [
"http://www.xyz.edu/students/alicejones.html",
"http://www.xyz.edu/students/bobsmith.html"
]
}

Note: Relationships can accept URLs as values (not just embedded objects).

{
"@context": "https://schema.org",
"@type": "Person",
"name": "George Bush",
"disambiguatingDescription": "41st President of the United States",
"children": {
"@type": "Person",
"name": "George W. Bush",
"disambiguatingDescription": "43rd President of the United States"
}
}
{
"@context": "https://schema.org",
"@graph": [
{
"@id": "#person1",
"@type": "Person",
"name": "Alice",
"knows": {"@id": "#person2"}
},
{
"@id": "#person2",
"@type": "Person",
"name": "Bob",
"knows": {"@id": "#person1"}
}
]
}
{
"@context": "https://schema.org",
"@type": "Person",
"name": "Tim Berners-Lee",
"sameAs": [
"https://www.wikidata.org/wiki/Q80",
"https://en.wikipedia.org/wiki/Tim_Berners-Lee",
"https://twitter.com/timberners_lee"
]
}

sameAs is critical for entity reconciliation — it declares “this entity is the same as that entity on another site.”


knows is defined as “bi-directional” but there’s no formal mechanism ensuring symmetry. If Alice knows Bob, must Bob knows Alice be stated?

Schema.org’s answer: Both directions should be stated explicitly for clarity. The schema doesn’t enforce symmetry.

Schema.org doesn’t have native relationship reification (making statements about statements). The Role pattern is a workaround, not true reification.

Example problem: “Alice worked for Company X from 2010-2015, introduced by Bob”

The Role pattern handles dates but not “introduced by Bob.”

Many useful inverses aren’t defined:

  • worksFor has no employs inverse
  • author has no authorOf inverse
  • knows (symmetric) doesn’t need inverse, but tooling doesn’t always recognize this

Schema.org prioritizes “something is better than nothing” over precise semantics:

“The vocabulary is intentionally ‘flat and less normalized’ rather than database-oriented”

This means:

  • Properties accept Text even when specific types are expected
  • Relationships can be URLs or embedded objects
  • Data quality varies wildly in the wild

All properties are multi-value by default. There’s no way to say “a Person can have only one spouse” (legally debatable anyway).

No native properties for:

  • Who asserted this relationship
  • When was it asserted
  • Confidence level
  • Source of information

Schema.org creates custom datatypes (like schema:Text, schema:URL) that duplicate XSD standards, causing interoperability issues with RDF tools.


Recent additions relevant to relationships:

  • lifeEvent property added to Person (accepts Event type)
  • linkRelationship property for web link relationships
  • Enhanced event types: ConferenceEvent, PerformingArtsEvent, InstantaneousEvent
  • OWL equivalences added for external ontology interoperability
  1. More event/action types — Moving beyond static entities to temporal occurrences
  2. Cross-vocabulary alignment — Better interop with GS1, UN/CEFACT
  3. Pending vocabulary growth — 825+ terms in pending section
  4. Extension namespaces — Domain-specific vocabularies (health, auto)

AspectSchema.orgFOAF
Relationship granularityGeneric (knows)Also generic (knows)
ExtensionsVia propertiesRELATIONSHIP vocabulary
Adoption45M+ domainsAcademic/semantic web
JSON-LD supportNativeSupported
Google interpretationYesLimited
AspectSchema.orgWikidata
Relationship modelProperties on entitiesStatements with qualifiers
Temporal supportRole patternQualifiers (start time, end time)
ProvenanceNot nativeReferences on statements
ReificationLimited (Role)Full qualifier support
Scale1,528 properties12,000+ properties

  1. Relationships as properties — Simple, widely understood model
  2. Inverse property pairs — Declare both directions for important relationships
  3. Role pattern for temporal — Wrap relationships that need dates
  4. sameAs for identity — Critical for cross-source reconciliation
  5. Generic + specific — Have both knows and colleague, spouse, etc.
  1. Relationship strength/weight — Add custom properties if needed
  2. Provenance — Track who asserted relationships and when
  3. Confidence levels — Useful for AI-extracted relationships
  4. Richer temporal model — Consider Wikidata-style qualifiers
  5. Bi-directional enforcement — If A knows B, create B knows A automatically

For a personal knowledge graph, consider:

Person-Person:

  • knows (generic)
  • relatedTo (family - generic)
  • spouse, parent, children, sibling (family - specific)
  • colleague, collaboratesWith (professional)

Person-Organization:

  • memberOf / member
  • worksFor / employee (or custom employs)
  • alumniOf / alumni
  • affiliation
  • founded / founder

Content:

  • author / creator
  • about / mentions
  • isPartOf / hasPart

Identity:

  • sameAs — Always include for cross-referencing

Schema.org Official:

JSON-LD:

Alternative Vocabularies:

Inverse Properties:

Temporal Modeling:

Limitations & Criticism:

JSON-LD @reverse:


  • Created focused research document on Schema.org relationships
  • Web searches covering:
    • Core relationship properties (knows, spouse, colleague, memberOf)
    • JSON-LD relationship patterns
    • Inverse properties and directionality
    • Temporal relationships (Role pattern, startDate/endDate)
    • Relationship strength limitations
    • Recent Schema.org evolution (v29.4)
    • Known limitations and criticisms
  • Fetched and analyzed complete Schema.org Person type definition
  • Compared with FOAF, RELATIONSHIP vocabulary, Wikidata approaches

Key Findings:

  1. Schema.org uses generic relationship types (knows) by design
  2. Role pattern is the standard for time-bound relationships
  3. No native support for relationship strength/weight
  4. @reverse in JSON-LD enables inverse relationships not in schema
  5. ~40% of relationship properties have explicit inverses
  6. Pragmatic design prioritizes adoption over semantic precision

Implications for Our Project:

  • Use Schema.org property names for interoperability
  • Extend with custom properties for strength/confidence if needed
  • Implement Role pattern for temporal relationships
  • Always create both directions of important relationships
  • Include sameAs for entity reconciliation