Unified Resource Coordinate
© R.A.Sol
HPPR supports two address forms:
- by hash:
////<hash> - by coordinate:
//<group>/<app>/<location>
Hash addresses are immutable. Coordinate addresses are time-dependent and may resolve to different packets as new packets are stored.
A versioned coordinate pins one exact packet.
Terms
- Location: the
Locationheader value in Plex or Seal packets. - Coordinate: a string prefixed with
//://<group>/<app>/<location>.
Version Selectors
Multiple packets can share one coordinate. Add
/|/... to select a version.
- Top-coordinate: no
|, resolves to the latest packet. Example://g/a/loc - Versioned-coordinate: includes type path, TAI,
and hash. Example:
//g/a/loc/|/plex/<tai>/<hash>
Example
Packet:
🖧: P.EXAMPLE~HASH~EXAMPLE~HASH~EXAMPLE~HASH~EX.H3
Group: a-group
App: some-app
Location: our-collection/item
TAI: 1640995200:123000000
...
Addresses:
- Direct hash:
////P.EXAMPLE~HASH~EXAMPLE~HASH~EXAMPLE~HASH~EX.H3 - Top-coordinate:
//a-group/some-app/our-collection/item - Versioned-coordinate:
//a-group/some-app/our-collection/item/|/plex/1640995200:123000000/P.EXAMPLE~HASH~EXAMPLE~HASH~EXAMPLE~HASH~EX.H3
Get resolution
In the tables below, <loc> is the Location
header value and does not end with /.
The tip is the latest packet at a path.
Tie-break order is highest TAI, then highest hash.
| Path | Gets |
|---|---|
.../<loc> |
tip |
.../<loc>/ |
tip |
.../<loc>/| |
tip |
.../<loc>/|/plex |
Plex tip |
.../<loc>/|/plex/<tai> |
Plex tip at tai |
.../<loc>/|/plex/<tai>/<hash> |
exact Plex |
.../<loc>/|/seal |
Seal tip |
.../<loc>/|/seal/<vkey> |
Seal tip for signer |
.../<loc>/|/seal/<vkey>/<tai> |
signer Seal tip at tai |
.../<loc>/|/seal/<vkey>/<tai>/<hash> |
exact Seal |
List resolution
| Path | Lists |
|---|---|
.../<loc>/ |
child locations, plus |/ when present |
.../<loc>/|/ |
plex/ and or seal/ |
.../<loc>/|/plex/ |
TAIs |
.../<loc>/|/plex/<tai>/ |
hashes |
.../<loc>/|/seal/ |
signer verification keys |
.../<loc>/|/seal/<vkey>/ |
TAIs |
.../<loc>/|/seal/<vkey>/<tai>/ |
hashes |