Repository navigation
Releases: urpx-org/urpx
Release list
v0.5.1
URPX v0.5.1 Release Notes
Released: 2026-10-06.
Type: Working Group Draft patch release.
Previous release: v0.5.0
Overview
URPX (Utility Rate Plan Exchange) is an open standard for representing and exchanging utility rate plan data between utilities, regulators, vendors, and researchers. URPX is built on the semantic web standards RDF, OWL, and SHACL.
URPX data is exchanged as JSON-LD (JavaScript Object Notation for Linked Data), a lightweight, human-readable format. The URPX API specification is under development and is not part of this release.
URPX is at the Working Group Draft stage. The URPX Working Group, under LF Energy Standards and Specifications (LFESS), accepted the standard as a Draft on 2026-07-17. Draft is the middle of the three LFESS stages (Sandbox, Draft, Approved): the vocabulary is published for implementation and review, and terms can still change between releases. Every change will be recorded in the release notes and the changelog.
What v0.5.1 offers
- The ontology and the SHACL shapes, in Turtle, at their permanent
urpx.orgnamespace (https://urpx.org/ns/ontology/,https://urpx.org/ns/shacl/core/). - A JSON-LD context (
https://urpx.org/ns/context) to reference from instance data. - A curated corpus of four test cases (twelve data files) across two utilities (Pacific Gas & Electric, Consolidated Edison) and two jurisdictions (California, New York), covering time-of-use pricing, tariff filings, market-supply pricing, and resolved rate plan snapshots.
- Clear licensing: specification text under the W3C Software Notice and Document License, example datasets under CDLA-Permissive-2.0, source and tooling under Apache-2.0.
- Comprehensive documentation: a full data dictionary, per-section class diagrams, a tutorial, an FAQ, and quality-assurance guidance.
What changed since v0.5.0
- Three additive vocabulary changes, each with its shape constraint:
urpx:publicationPlatform, a string property onurpx:URPXPackagenaming the software platform that produced or assembled the package;urpx:vendorOrganization, a new member ofurpx:OrganizationTypeValuefor an organization that operates such a platform without itself being an energy-market participant; andurpx:url, now also allowed onurpx:Organization. All three are optional. No existing identifier changes. - Two ontology domain corrections and one mapping correction bring the ontology in line with constraints the shapes and the test cases already carry:
urpx:descriptionmay now be stated onurpx:Evaluation, andurpx:effectiveDateonurpx:RatePlanVersion, matching shapes that already allowed them; and the URPX to Schema.org SKOS mapping now maps the declaredurpx:timezoneIdentifier. These add no constraint and change no identifier. - Licensing by file category, completing the transition recorded in
TRANSITION.md: specification files (ontology, shapes, SKOS mappings, JSON-LD context, documentation pages, diagrams) underW3C-20150513; dataset files (test-case data, generated catalogs, per-test-case diagrams) underCDLA-Permissive-2.0; source, tooling, and repository metadata underApache-2.0. Thedcterms:licensestatement inside the ontology and the shapes agrees with each file's SPDX header, and the repository is REUSE-compliant. - The copyright holder on project files is The URPX Authors. Third-party source assets in the test cases (utility tariff documents and pricing data) keep their own holders and the
LicenseRef-PublicRecordnotice. - All four test cases, and the test-case catalog, declare v0.5.1. Eleven of the twelve data files name the organization and the platform that assembled their package.
- The development record (tasks, specifications, working reports, roadmaps and worked sample instances), the five design-decision logs and the two draft mapping profiles move to urpx-org/urpx-dev. This repository holds the standard, its documentation and the curated test cases.
The full license texts are in LICENSES/; the per-category assignment is recorded in TRANSITION.md.
Migration
- No existing identifier changes. Existing bindings and queries continue to work unchanged, and the two new terms and the widened property are optional. One new constraint: an
urpx:Organizationmay carry at most oneurpx:urlvalue. - Point
targetURPXVersionathttps://github.com/urpx-org/urpx/raw/v0.5.1/ontology/urpx-ontology.ttl. - Repository and document paths changed: the files that were under
dev-docs/, the design-decision logs, and the two draft mapping profiles are now inurpx-org/urpx-dev. Links into those paths need updating.
What's next
- The access API specification: discovery, version retrieval, and eligibility checks over published rate plan data. In development; see the API specification for the current sketch.
- Mapping profiles: Green Button and LF Energy Connected Data Specifications (CDS) profiles are drafts under working group review. See Interoperability.
- Highly dynamic pricing: an interchange payload for streams of resolved price values, with settlement status per observation; machine-readable value expressions for price calculation; discovery metadata for dynamic price endpoints; and a transform to the California Energy Commission's MIDAS rate server. Draft specifications are in urpx-dev, planned as the first additive bundle after this release.
- Energy resource specifications for clean energy purchasing: how a rate plan states the emissions profile and energy sources of the supply and delivery it prices, so a buyer can choose by them. In early design; the open question is whether that profile sits inside the rate plan or in a companion vocabulary the plan points at.
- The working group continues to refine the ontology and the validation rules. Open specifications and the roadmap are in urpx-org/urpx-dev; meeting agendas and notes are in urpx-org/urpx-wg.
References
v0.5.0
URPX v0.5.0 Release Notes
Released: 2026-09-08.
Type: Pre-draft minor release.
Previous release: v0.4.0
Overview
URPX v0.5.0 moves the vocabulary to its permanent namespace at urpx.org. The terms, the shapes and the semantics are unchanged from v0.4.0. This release changes identifiers only.
The ontology namespace moves from https://urpx-org.github.io/urpx/ontology/ to https://urpx.org/ns/ontology/, and the shapes namespace moves to https://urpx.org/ns/shacl/core/. Every term keeps its local name and changes only its host and path.
This release is not backward-compatible with v0.4.0 at the identifier level. Data or tooling that binds the previous namespace resolves no term until it rebinds.
What changed
- The ontology base IRI is
https://urpx.org/ns/ontology/. - The shapes base IRI is
https://urpx.org/ns/shacl/core/. - The ontology and the shapes identify themselves as version 0.5.0.
owl:versionIRI,dcterms:hasVersion, the release node, its distribution and both download URLs name v0.5.0. The ontology states the version literal onowl:versionInfoand the shapes file states it ondcat:version. - No term is added, removed or redefined. The vocabulary is identical to v0.4.0 apart from the namespace and the version metadata.
Breaking Changes
-
The vocabulary namespace changes host and path.
A document that bindsurpxtohttps://urpx-org.github.io/urpx/ontology/resolves no term after this release. Rebind it tohttps://urpx.org/ns/ontology/. -
The shapes namespace changes likewise.
Rebindurpx-shacltohttps://urpx.org/ns/shacl/core/.
Migration
- Rebind the
urpxprefix tohttps://urpx.org/ns/ontology/, and, where it is used, rebindurpx-shacltohttps://urpx.org/ns/shacl/core/. - Point
targetURPXVersionathttps://github.com/urpx-org/urpx/raw/v0.5.0/ontology/urpx-ontology.ttl. - The local names are unchanged, so no term is renamed. A rebind of the prefix is the whole of the migration.
Notes
- The example data files under
test-cases/and the published JSON-LD context still reference the previous host. They move to the new namespace in a following release.
References
v0.4.0
URPX v0.4.0 Release Notes
Released: 2026-09-08.
Type: Pre-draft minor release.
Previous release: v0.3.0
Overview
URPX v0.4.0 gives every identifier one pattern and the exchange package one containment property.
An identifier states its register on scheme and its value on skos:notation. This holds for organization, rate plan and rate plan modifier identifiers alike. The register set is an open class rather than a fixed enumeration.
A URPXPackage reaches every exchangeable unit through packages. A package that carries no content unit no longer conforms.
Every shipped test-case data file declares the URPX version its contents were authored against. Both the ontology and the shapes identify themselves as v0.4.0.
This release is not backward-compatible with v0.3.0. Organization identifiers, packages that carried a source publication, and packages that carried only a version declaration each need rework before the data is treated as v0.4.0-conformant.
Highlights
schemecarries the register for every identifier. Its domain is the union ofOrganizationIdentifier,RatePlanIdentifierandRatePlanModifierIdentifier. Its range isIdentifierScheme.IdentifierSchemeis the class of registers and naming authorities that issue identifiers. It is an open class. Eleven members ship with the vocabulary: nine organization registers, pluscaMidasRinSchemeandutilityTariffCodeScheme. An implementer operating a register outside those eleven mints its own IRI as anIdentifierSchemeinstance.caMidasRinSchemeandutilityTariffCodeSchemeare defined terms. Each carries a label, a definition and a preferred label.identifierJurisdictionapplies to all three identifier classes. It is optional and at most one on each.OrganizationIdentifierShape,RatePlanIdentifierShapeandRatePlanModifierIdentifierShapetake one surface:schemerequired,skos:notationrequired,identifierJurisdictionoptional. All three are closed.packagesis the containment property of the exchange envelope. Its domain isURPXPackage. Its range is the union ofRatePlan,RatePlanModifier,RatePlanVersion,RatePlanModifierVersion,PricingModel,TariffFilingandSourcePublication.URPXPackageShaperequires at least one ofpackages,hasRatePlanorhasRatePlanModifieron every package. Each of the three paths stays optional on its own.hasRatePlanandhasRatePlanModifierremain valid, so a consumer reading package contents reads all three paths.- All twelve shipped test-case data files carry a
URPXPackagewithtargetURPXVersion, whichURPXPackageShaperequires; eleven declare v0.4.0 andpge-e-elecdeclares v0.3.0, which is the version it validates against. The version a file was written for is a fact in the file rather than a property of where it is stored. - The ontology and the shapes identify themselves as version 0.4.0. In each document,
owl:versionIRI,dcterms:hasVersion, the release node, its distribution and both download URLs name v0.4.0. The ontology states the version literal onowl:versionInfoand the shapes file states it ondcat:version. A consumer resolving a package'stargetURPXVersionreaches a document that names the same version. - The PG&E E-TOU-C test case carries a worked organization identifier:
OrganizationtohasIdentitytoOrganizationIdentitytohasIdentifiertoOrganizationIdentifier, withschemenamingeiaScheme,skos:notationcarrying the EIA value andidentifierJurisdictionnaming the jurisdiction.
Breaking Changes
If you maintain datasets or downstream tooling, pay particular attention to these changes:
-
identifierSchemeis removed.
schemecarries the register for all three identifier classes.OrganizationIdentifierShapeis closed, so an organization identifier still assertingidentifierSchemefails validation. -
utilityIdis removed.
skos:notationcarries the literal for every identifier, including the EIA, DUNS and LEI values that property held. The same closure applies: an organization identifier still assertingutilityIdfails validation. -
IdentifierSchemeValuebecomes the classIdentifierScheme.
The nine registers keep their IRIs, labels and definitions, and are typed to the new class. Theowl:oneOfenumeration on the ontology side and thesh:inlist on the shape side are both dropped, andIdentifierSchemeValueShapeis removed.schemetakessh:nodeKind sh:IRI, which is the constraint that makes a register outside the published members legal. -
The identifier shapes require a register and a value.
schemeandskos:notationare each required onOrganizationIdentifierShape. The two properties they replace were both optional, so an organization identifier that named neither register nor value validated before and does not now.RatePlanIdentifierShapeandRatePlanModifierIdentifierShapealready required both. They gain optionalidentifierJurisdictionand are otherwise unchanged. -
hasTariffPublicationis removed.
packagescarries a source publication, as it carries every other unit a package holds.URPXPackageShapeis closed, so a package still assertinghasTariffPublicationfails validation. -
A
URPXPackagestates at least one content unit.
URPXPackageShaperequires at least one ofpackages,hasRatePlanorhasRatePlanModifier. A package carrying only metadata and a version declaration no longer conforms.
Migration
Datasets built against v0.3.0 need term-level rework, not a version bump alone:
-
On organization identifiers, rename
identifierSchemetoschemeandutilityIdtoskos:notation. Both are required. -
An organization's registry identifier belongs on an
OrganizationIdentifier, not on the organization node.OrganizationShapeis open by design, so a value asserted directly on the organization keeps validating while carrying no identifier a consumer can read;urpx:eiaIdis not a defined term in the vocabulary at any version.OrganizationIdentityShapeis closed and requireshasName, so the identity node names the organization alongside the identifier. -
Move an organization's EIA, DUNS or LEI value onto an
OrganizationIdentifierreached through the identity chain:"urpx:hasIdentity": { "@type": "urpx:OrganizationIdentity", "urpx:hasName": { "@type": "urpx:OrganizationName", "urpx:name": "Pacific Gas & Electric Company" }, "urpx:hasIdentifier": { "@type": "urpx:OrganizationIdentifier", "urpx:scheme": { "@id": "urpx:eiaScheme" }, "skos:notation": "14328", "urpx:identifierJurisdiction": "US" } }
-
Retype nodes declared
urpx:IdentifierSchemeValuetourpx:IdentifierScheme. The register IRIs are unchanged. -
Rewrite
schemeobject IRIs that carry a hyphenated register name.urpx:utility-tariff-codebecomesurpx:utilityTariffCodeScheme, andurpx:ca-midas-rinbecomesurpx:caMidasRinScheme. Neither hyphenated form was ever a defined term. -
A register outside the eleven published members is an IRI of your own, typed
urpx:IdentifierScheme.schemeno longer constrains its value to a fixed list. -
JSON-LD data that does not already bind the
skosprefix adds"skos": "http://www.w3.org/2004/02/skos/core#"to its@context. Without the binding,skos:notationdoes not expand and the required value is not asserted. -
On a
URPXPackage,hasTariffPublicationbecomespackages.hasRatePlanandhasRatePlanModifierremain valid, so a package may carry a rate plan or a modifier through either those properties orpackages. -
Give every
URPXPackageat least one content unit. A package that exists only to declare a version states the unit it carries as well. -
Point
targetURPXVersionat this release:https://github.com/urpx-org/urpx/raw/v0.4.0/ontology/urpx-ontology.ttl. -
Re-run SHACL validation against
urpx-shacl.ttl. The closed identifier and package shapes surface any retired property still asserted in the data.
References
v0.3.0
URPX v0.3.0 Release Notes (Draft)
Status: Draft, pending Working Group review. Dates and version metadata are finalized when this draft is tagged.
Type: Pre-draft minor release
Previous release: v0.2.1
Overview
URPX v0.3.0 reframes how published pricing material relates to the rate plan. Pricing content now lives in PricingModel nodes carried by publication-level containers (TariffFiling, SourcePublication); rate plans and modifiers are sharpened to pure identity records; and versions become consolidation artifacts that declare their own coverage through a required CoverageClaim, which states completeness; self-containment and an explaining Evaluation are optional.
This release is not backward-compatible with v0.2.x. Existing URPX datasets should be reviewed and migrated before being treated as v0.3.0-conformant.
Highlights
- Introduced the pricing-model architecture:
PricingModelcarries pricing content, filed publicly through aTariffFilingor, for filing-less material (competitive supply, contract, market-indexed, scenario, partial ingest), standing on its own with its own validity dates. - Retired the tariff document class family (
TariffPublicationand its subclasses) in favor of a singleSourcePublicationclass with apublicationTypeenumeration. - Renamed
URPXDocument→URPXPackage. - Added first-class identity classes,
RatePlanIdentifierandRatePlanModifierIdentifier, linked fromRatePlan/RatePlanModifierviahasIdentifier. - Made
RatePlanVersionandRatePlanModifierVersionconsolidation artifacts: each now requires aCoverageClaimstating completeness (completenessResult); self-containment (selfContained) and an explainingEvaluationare optional. - Separated the two axes a coverage claim reports.
completenessResultstates how much of the plan the snapshot covers, drawn from a six-memberCompletenessResultValue. Two conditions that are properties of how the snapshot was assembled rather than of how complete it is now sit besideselfContainedas booleans onCoverageClaim:stale, for a snapshot whose sources are known to have moved on, andfallbackSourced, for one that had to fall back to a secondary source. A claim can now say "complete, but fallback-sourced" without either fact displacing the other. - Added a filing-lifecycle vocabulary:
supersedes,replaces/replacedBy,cancelledBy,cancelledOn,cancelsPriceDefinition, andsunsetOnfor intentional terminal discontinuation (as distinct from a data gap). - Added scenario cost modeling (
ScenarioCostModel,ScenarioCostResult) and temporal scoping (TemporalScope,TemporalPeriod). - Renamed the plan-to-organization link
publishedBytoofferedBy, and its inversepublishestooffers, so the property names the organization that offers the plan rather than asserting that the plan is a published artifact.offeredByandoffersare declaredowl:inverseOfeach other and align with schema.orgofferedBy/offersby reference. Both are optional in either direction.publishedByis re-homed ontoSourcePublicationandURPXPackage, where publication is a property of the artifact. - Extended
commodity,offeredBy, andserviceRoletoRatePlanandRatePlanModifier;commodityis now multi-valued at the plan/modifier level (a plan or modifier may span commodities, e.g. a combined water/sewer modifier) and single-valued at the price and metric level. - Added element-level consolidation lineage:
contributedByrecords the pricing model via which each snapshot element entered, andconsolidatedFromlists every contributing model on the version, so a resolved snapshot carries its own derivation and a consumer can trace each element back to its source filing and rate case. AModelExclusionrecord on the claim'sEvaluation(hasModelExclusion, pairingexcludedModelwith anexclusionReason) states machine-readably why a listed model contributed nothing, so the lineage completeness cross-check can be re-run by any consumer. - Completed the temporal vocabulary:
hasTemporalPeriodlinks aTemporalScopeto the named interval its span denotes,startDateTimeandendDateTimenow apply toTemporalScopefor intraday windows, andcancelledOnDateTimeandsunsetOnDateTimeadd dateTime-precise twins of the two lifecycle dates.dateModifiedanddateTimeModifiednow apply toPricingModelandTariffFiling, giving overlapping, unlinked publication units a vocabulary-carried ordering signal. - Documented three enumerations that previously shipped as bare member IRIs.
CompletenessResultValue(6 members),ConfidenceValue(verified,estimated,projected) andEvaluationKindValue(consolidation,coverageEvaluation,validation,comparison,benchmark) now carry a label and a definition on every member, so all three appear in the generated data dictionary and each value has a stated meaning to exchange rather than only a name to match on. - Grouped the phase codes under four categories.
PhaseCategoryValueintroducessinglePhaseCategory,splitPhaseCategory,threePhaseCategoryandmeasurementCategory, and eachPhaseCodeKindValuemember declares its category withskos:broader, so a consumer can select "any three-phase code" without enumerating the individual codes. - Made the plan-to-version and plan-to-model navigation links assertable.
hasRatePlanVersionandhasRatePlanModifierVersionmay be stated on a rate plan or modifier alongside the version-sideforRatePlan/forRatePlanModifier, andisReferencedByPricingModelnow applies to bothRatePlanandRatePlanModifier. All three are optional: a data set may carry either direction or both, so a JSON-LD consumer can traverse without a reverse-path query, and a producer that prefers a single direction is not obliged to duplicate it. - Closed every operational SHACL shape against its full declared property surface, with three deliberate, documented open exceptions for subclass-family reasons (
OrganizationShape,PriceSetShape,PriceSetAlternativeShape). - Completed the vocabulary's internal referential integrity: every
urpx:term the ontology references is now defined in it, including the phase categories above, the enumeration members, and the charge-type members' bill-portion pointers. - Added a Consolidated Edison SC1 Rate I test case set, including a self-contained resolved snapshot that carries element-level consolidation lineage, a five-statement supersession chain, and a supply-snapshot variant that resolves a market supply charge from an external feed through a
retrievedElsewherereference against aModelCollectionthread, alongside the PG&E test cases carried forward to the v0.3.0 model. - Rewrote the tutorial's Terminology section ("Rate Plan vs Tariff vs Price") and the documentation set to consistently use "rate plan," "price," or "rate group" in place of the ambiguous bare word "rate."
Breaking Changes
If you maintain datasets or downstream tooling, pay particular attention to these changes:
-
The tariff document class family is retired.
TariffPublication,TariffBookDocument,TariffStatementDocument,TariffSupplementDocument,TariffAddendumDocument,SupplyChargesDocument,DERExportsDocument, andHighlyDynamicPricesDocumentare removed. UseSourcePublicationwith thepublicationTypeenumeration (SourcePublicationTypeValue) instead. The unused parallelPublicationTypeValueenumeration is also removed; the documented member individuals now live onSourcePublicationTypeValue. -
URPXDocumentis renamed toURPXPackage.
All property domains, ranges, and shapes follow the rename. -
RatePlanVersionandRatePlanModifierVersionnow require a coverage claim.
Every version must carry exactly oneCoverageClaim(viahasCoverageClaim). OnlycompletenessResultis required;selfContainedand an explainingEvaluationare optional. Versions without a coverage claim will fail validation. -
ReferenceInclusionValuemembers are renamed.
included→includedHere;shopFor→retrievedElsewhere. -
RateGroupno longer subclassesServiceClass.
A rate group is a named grouping inside a service class, not a kind of service class. Containment is now expressed viaparentServiceClass. -
Version shapes no longer allow
supersedes.
Lifecycle now lives on the filing; a version's timeline position derives from the filing chain rather than from a directsupersedeslink on the version itself. -
The nested tariff reference classes are removed.
TariffBookReferenceandTariffStatementReference, and their linking propertieshasTariffBookReferenceandhasTariffStatementReference, are removed. Page and leaf locators, statement type, and receipt dates sit directly onDataSourceReference; the tariff book versus statement distinction is carried by the referencedSourcePublication'spublicationType. -
CompletenessResultValueis narrowed to six members.
complete,partial,pending,unsupported,unknown,noCoverage.staleandfallbackSourcedare no longer completeness verdicts; they are booleans onCoverageClaim. A claim that previously carriedcompletenessResultofstaleorfallbackSourcedstates its completeness on the six-member scale and sets the matching boolean.SourcePublicationTypeValuelikewise carries the documented publication-type members; the parallelPublicationTypeValueenumeration is removed. -
SourceReferenceis renamedDataSourceReference.
The class now matches thehasDataSourceReferenceproperty that reaches it.SourceReferenceShapebecomesDataSourceReferenceShape.
Migration
Datasets buil...
URPX v0.2.1 pre-draft release
Changed
- SHACL:
urpx:summaryAmountis now optional (sh:minCountrelaxed from 1 to 0).
Rate plan instances that omit a summary amount are now schema-valid.
Added
- Test case: PGE E-TOU-C 2026-03-01 — demonstrates ServiceBracket separation pattern.
v0.0.0-release-action-test
Release workflow smoke test.
Delete after verification.
URPX v0.2.0 Pre-Draft Release
Overview
URPX v0.2.0 is a substantial pre-draft update focused on clearer price modeling, a fully reworked structured condition architecture, stronger SHACL validation, and better documentation for implementers and reviewers.
Compared with v0.1.2, this release is not backward-compatible. Existing URPX datasets should be reviewed and migrated before being treated as v0.2.0-conformant.
Highlights
- Reworked the billing model so
PriceDefinitionis owned byBillingModeland linked to its ledger withurpx:referencesLedger. - Replaced the legacy condition model with the rooted
ConditionExpressionarchitecture used across eligibility, applicability, and profile-alternative contexts. - Tightened eligibility modeling so each
EligibilityRuleuses a singleConditionExpression, and direct profile links on rules are no longer valid. - Retired direct
ApplicabilityGroupselector properties in favor ofConditionExpressionover profile-based properties. - Added
ServiceBracketso tier bounds move offServiceTierand can vary by context. - Added
GeneralRulefor reusable tariff-book-level shared rules. - Added
RateCaseand datetime provenance properties to improve regulatory and source traceability. - Renamed identifier properties to make uniqueness explicit and added required
urpx:targetURPXVersiononURPXDocument. - Added
customerChoiceandisDefaultsemantics for rate plan versions. - Renamed
numberOfMeterstometerCount, renamednumberOfOccupantstooccupancyCount, and removeddemandThreshold. - Expanded the documentation set with condition modeling, quality assurance, and test-data review guidance.
Breaking Changes
If you maintain datasets or downstream tooling, pay particular attention to these changes:
-
PriceDefinitionownership moved fromLedgertoBillingModel.
Existing data must move definitions to the billing model layer and addurpx:referencesLedger. -
The applicability condition model was replaced.
Legacy constructs such ashasCondition,hasConditionLogic, legacy terminal-node patterns, earlier applicability/dimension-value structures, and directApplicabilityGroupselector properties were removed in favor ofConditionExpression,rootNode,ComparisonNode,BooleanOperationNode, typed operand nodes, and profile-based condition properties. -
Eligibility rules now require a single
ConditionExpression.
EligibilityRulemust useurpx:hasConditionExpression, and directhasCustomerProfile/hasServicePointProfilelinks onEligibilityRuleare no longer valid. -
Tier bounds moved to
ServiceBracket.
lowerBound,lowerBoundOperator,upperBound, andupperBoundOperatorno longer belong onServiceTier. Bound data must move to one or moreServiceBracketnodes, withreferencesServiceBracketused where exact bracket linkage is needed. -
Identifier properties were renamed.
ratePlanIdentifierbecameratePlanUniqueIdentifier, andmodifierIdentifierbecamemodifierUniqueIdentifier. -
URPXDocumentnow requirestargetURPXVersion.
Documents should point to the ontology version they were authored against using the raw tagged ontology URL, for example:
https://github.com/urpx-org/urpx/raw/v0.2.0/ontology/urpx-ontology.ttl -
Enrollment/default semantics changed.
isOptionalwas removed in favor ofcustomerChoiceandisDefaultonRatePlanVersion. -
Profile count terminology and threshold handling changed.
numberOfMetersbecamemeterCount,numberOfOccupantsbecameoccupancyCount, anddemandThresholdwas removed. -
Eligibility profile inputs moved to
Scenariofor eligibility evaluation for an individual customer or scenario.hasCustomerProfileandhasServicePointProfileno longer belong directly onEligibilityRule, eligibility conditions are expressed onEligibilityRuleusinghasConditionExpression.
Migration Guidance
To migrate a v0.1.2 dataset to v0.2.0:
- move
PriceDefinitioninstances underBillingModel - add
urpx:referencesLedgerto everyPriceDefinition - replace legacy rule condition structures with a single
urpx:hasConditionExpressionon eachEligibilityRule - migrate retired
ApplicabilityGroupselector properties toConditionExpressionoverCustomerProfile/ServicePointProfileproperties - move tier bounds from
ServiceTiertoServiceBracketand addurpx:hasServiceBracketwhere tier bounds are authored - rename legacy identifier properties
- replace
isOptionalwithcustomerChoiceandisDefault - rename
numberOfMeterstometerCountandnumberOfOccupantstooccupancyCount - remove
demandThresholdand express threshold logic through rules / metric patterns - add
urpx:targetURPXVersiontoURPXDocumentusing:
https://github.com/urpx-org/urpx/raw/v0.2.0/ontology/urpx-ontology.ttl - rerun SHACL validation against
shacl/urpx-shacl.ttl
The updated PG&E E-ELEC example under test-cases/ can be used as a current-model reference.
Validation and Documentation
v0.2.0 strengthens validation and reviewer support:
- SHACL coverage was expanded to match the new billing, condition, applicability, service-bracket, identifier, and provenance models.
urpx-condition-modeling.mddocuments the current structured condition pattern.urpx-quality-assurance.mdsummarizes validation expectations.urpx-test-data-review-guide.mdprovides a tariff-book-to-URPX review workflow for test cases.urpx-data-dictionary.mdwas refreshed for the v0.2.0 ontology surface.
Repository and Governance Updates
This release also adds project-level governance and licensing metadata:
- REUSE licensing metadata and public-record handling for third-party tariff-book source material
TRANSITION.mddocumenting the planned post-Draft license transition- updated
CONTRIBUTING.md,SECURITY.md, andAGENTS.md
These changes do not alter the URPX data model, but they do affect repository hygiene, review workflow, and release readiness.
References
v0.1.2Pre-Draft release
What's Changed
- V0.1.1 2026 03 04 t1000 z ft updates by @una-smithsimon-fluxtailor in #8
New Contributors
- @una-smithsimon-fluxtailor made their first contribution in #8
Full Changelog: v0.1.1...v0.1.2
Initial v0.1.1 Pre-draft URPX Release
Core ontology, shacl, and draft documentation