Skip to content

feat: Support organisation-level publishing on Organization - #213

Open
howaskew wants to merge 4 commits into
masterfrom
feat/organization-activity-location
Open

howaskew wants to merge 4 commits into
masterfrom
feat/organization-activity-location

Conversation

@howaskew

@howaskew howaskew commented Nov 12, 2026 •

Copy link
Copy Markdown
Contributor

Merging releases data-models 3.0.12 and dispatches the usual updates (validator site, model libraries, developer documentation, test suite).

Summary

Supports publishing data about organisations in their own right, as described in Modelling Opportunity Data 2.1 Editor's Draft section 5.8.1 and discussed in openactive/modelling-opportunity-data#313.

Organization:

  • New optional fields: activity, location, ageRange, genderRestriction, alternateName, memberOf, member and license.
  • location accepts a Place, an array of Place, a PostalAddress or text, as in the spec.
  • A stand-alone Organization in feed mode (RPDEFeed), either the top-level object or an RPDE item's data, requires name, activity, location and beta:dateVerified, plus license for the top-level object only, and recommends @id, description, url, sameAs, email and telephone. This uses imperativeConfigurationWithContext with the containing field names $ and data, so Organizations used as organizer, provider or elsewhere are unaffected.

FeedItem: accepts kind "Organization" and an Organization as data.

Vocabulary: oa:activity, oa:ageRange and oa:genderRestriction gain schema:Organization in their domains. The published definitions of oa:activity and oa:ageRange (taken from Course.json) are reworded so they are no longer event-only.

Notes

Verification

  • data-models: 5,906 specs, 0 failures.
  • data-model-validator against this branch: 448 existing specs and the 8 new ones pass. A stand-alone Organization and an RPDE page of Organizations fail without activity and location; a stand-alone Organization fails without license, and a feed item without it passes; an organizer in a SessionSeries is unaffected in both feed modes; the new field types are accepted and invalid values rejected. The corrected spec example passes with no failures.
  • models-lib generators (.NET, PHP, Ruby, TypeScript) all complete. OpenActive.NET compiles with the new models apart from an existing, unrelated error (Schema.NET.3DModel for beta:virtualTour, also in OpenActive.NET#63). The .NET License property is generated with new although Schema.NET.Organization has no License, which gives warning CS0109 only.

When squash-merging, check the suggested commit message does not contain a skip-CI marker.

howaskew and others added 4 commits October 30, 2026 13:55
For organisation-level publishing. Adds optional activity, location
and ageRange fields to Organization, which extends the oa:activity and
oa:ageRange domains to schema:Organization (schema:location already
applies to Organization).

Rewords both published definitions in Course.json, the alphabetically
first declaring model, so they are no longer event-only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Brings Organization in line with Modelling Opportunity Data 2.1 Editor's
Draft section 5.8.1 (describing an Organization independent of any
specific event):

- location also accepts an array of Place, a PostalAddress or text.
  allowReferencing is not set, as the .NET generator does not support
  it with multiple types; an @id reference is accepted as text.
- New optional fields: genderRestriction, alternateName, memberOf
  (an @id or an Organization) and member (one @id or an array).
- A stand-alone Organization in feed mode, either the top-level object
  ($) or an RPDE item's data, requires name, activity and location, and
  recommends @id, description, url, sameAs, email and telephone.
  Organizations in other fields, such as organizer and provider, are
  unaffected.
- FeedItem accepts kind "Organization" and an Organization as data.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Modelling Opportunity Data section 5.8.1 makes beta:dateVerified
REQUIRED for organisation-level data. Add it to the required fields for
a stand-alone Organization in feed mode (the top-level object and an
RPDE item's data). The validator checks that it is present; data must
include the beta namespace in @context for it to be recognised.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
"#PostalAddress"
],
"alternativeTypes": [
"https://schema.org/Text"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need this. Place.address with a String value can be used for this purpose

"model": "#Place",
"alternativeModels": [
"ArrayOf#Place",
"#PostalAddress"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need this. Place.address with a PostalAddress value can be used for this purpose

"model": "#Organization",
"allowReferencing": true,
"description": [
"The `@id` of an organization that this organization is affiliated to. For example, a club can link to its national governing body."

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This can be an id or a nested Organization object. Description should be updated accordingly.

"member": {
"fieldName": "member",
"sameAs": "https://schema.org/member",
"requiredType": "ArrayOf#https://schema.org/URL",

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should this be ArrayOf#Organization instead of URL with "allowReferencing": true

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants