diff --git a/gitbook-docs/resources_notes.md b/gitbook-docs/resources_notes.md new file mode 100644 index 000000000..a09f1819e --- /dev/null +++ b/gitbook-docs/resources_notes.md @@ -0,0 +1,252 @@ +# Notes + +Notes are a Signal K resource type that provide a means to capture and display additional information in a variety of formats. They are accessed via the Signal K API path `/signalk/v1/api/resources/notes`. + +Notes can contian both text and / or a link to additional text, images, etc. + +They can stand alone or be associated with: +- a geographic location by assigning a value to `position` +- an area by assigning a value to `geohash` or `region` +- other notes by entering the same value in `group` for each of the related notes. + +--- + +### Note Properties: + +`title`: Text containing the title of the note. + +`description`: Text describing the object that the note is associated with. + +`mimeType`: MIME type of the note. If this property is `null` or `undefined` then the note is considered plain text. + +`url`: Link to additional note content. If this property is `null` or `undefined` then the `description` should be considred the content of the note. + +`group`: Text representing the name of a collection that this note is part of. Notes with the same `group` value are considered part of the collection. If this property is `null` or `undefined` then the note is not part of any collection. + +`authors`: A list containing the details of the authors / contributors to the note content. Each author entry can contain one or more of the following: `name`, `email`, `url`. + +`geohash`: Geographic area to which the note is attached. + +`position`: Geographic position to which the note is attached. If defined in conjunction with `geohash`, it should be within the `geohash` area. + +`region`: The UUID of a `region` resource to which the Note is attached. + +`properties`: An object that is a placeholder for application / use case specific values. + +_Example: Define a `draft` property to indicate the note has not been finalised._ +```json +{ + "title": "Big Island", + "description": "Big Island Approach notes.....", + "geohash": "rbejg", + "properties": { + "draft": true + } +} +``` + +### Example: Combining `region` and `group` + +Using a combination of `region` and `group` the following notes contain information about safe anchorages in the Great Barrier Reef _(defined in a `region` resource)_. + +```json +{ + "urn:mrn:signalk:uuid:c0d79335-4e25-4245-8892-54e8ccc4123b" : { + "title": "Whitehaven Beach", + "description": "Whitehaven Beach is a pristinebeach on Whitsunday Island.....", + "geohash": "rk3uv", + "group": "GBR Safe Anchorages", + "region": "urn:mrn:signalk:uuid:c0d79335-4e25-4245-8892-54e8ccc8021e" + }, + "urn:mrn:signalk:uuid:c0d79335-4e25-4245-8892-54e8ccc4123b" : { + "title": "Shute Harbour", + "description": "is a sheltered port for small vessels located approximately 10 km east of Airlie Beach.....", + "geohash": "rk3u9", + "group": "GBR Safe Anchorages", + "region": "urn:mrn:signalk:uuid:c0d79335-4e25-4245-8892-54e8ccc8021e" + } +} +``` + +### Example: Combining `region`, `geohash` and `position` + +By using a combination of `region`, `geohash` and `position` notes can be assigned to specific geolocations within an area. +```json +{ + "urn:mrn:signalk:uuid:c0d79335-4e25-4245-8892-54e8ccc4123b" : { + "title": "Big Harbour etry", + "description": "...is a sheltered port .....", + "region": "urn:mrn:signalk:uuid:c0d79335-4e25-4245-8892-54e8ccc8021e", + "geohash": "rk3u9", + "position":{ + "latitude": -20.2919444444, + "longitude": 148.785 + } + }, + "urn:mrn:signalk:uuid:c0d79335-4e25-4245-8892-54e8ccc4123b" : { + "title": "Big Harbour Jetty", + "description": "...", + "region": "urn:mrn:signalk:uuid:c0d79335-4e25-4245-8892-54e8ccc8021e", + "geohash": "rk3u9", + "position":{ + "latitude": -20.2913, + "longitude": 148.779 + } + } +} +``` + +--- + +## Working with Notes + +The retrieval, creation, updating or deletion of notes is done by making the appropriate request to the Signal K server. + +See [Request/Response](request_response.md) for more details on request/response behaviour in Signal K. + +_Note: Resource requests do not require a `context`._ + +--- +#### RETRIEVING NOTES +To retrieve a list of notes from the server make a __GET__ request to the notes path. _e.g. `/signalk/v1/api/resources/notes`_ + +To retrieve an individual note make a __GET__ request to its path. + +__via HTTP:__ +``` +GET `/signalk/v1/api/resources/notes/urn:mrn:signalk:uuid:36f9b6b5-959f-46a1-8a68-82159742aadd`_ +``` + +__via Delta:__ +``` +"get": [{ + "path": "resources.notes" +}] + +"get": [{ + "path": "resources.notes.urn:mrn:signalk:uuid:36f9b6b5-959f-46a1-8a68-82159742aadd" +}] +``` +--- +#### CREATING NOTES + +__via HTTP:__ + +Send a __POST__ request containing the note's details. +```json +POST http://localhost:3000/signalk/v1/api/vessels/resources/notes +{ + "value": { + "title": "Dusky Shoal", + "description": "Anchoring information for Dsuky Shoal.....", + "authors": [ + { + "name": "Ian West" + } + ], + "geohash": "rbejg:Big Island", + "properties": { + "draft": true + }, + "timestamp": "2015-03-06T16:57:53.643Z", + "source": { + "label": "note", + "type": "manual" + } + } +} +``` + +__via Delta:__ + +Send a __PUT__ request containing the note's details. +```json +{ + "requestId": "6b0e776f-811a-4b35-980e-b93405371bc5", + "put": [{ + "path": "resources.notes", + "value": { + "position":{ + "latitude": -35.02577800787516, + "longitude": 138.02825595260182 + }, + "title":"My Note", + "description":"My note description", + "url":"http://mynote/url", + "mimeType":"text/html" + } + }] +} +``` +--- + +#### UPDATING NOTES + +To update a note send a __PUT__ request containing the note's details, via either an HTTP or Delta request, to the path of the note. + +The note to be updated is identified by its __uuid__. + +__via HTTP:__ +```json +PUT http://localhost:3000/signalk/v1/api/vessels/resources/notes/urn:mrn:signalk:uuid:36f9b6b5-959f-46a1-8a68-82159742aadd +{ + "value": { + "position":{ + "latitude": -35.02577800787516, + "longitude": 138.02825595260182 + }, + "title":"My Note", + "description":"My note description", + "url":"http://mynote/url", + "mimeType":"text/html" + }, + "source": "myApp", +} +``` + +__via Delta:__ + +```json +{ + "requestId": "6b0e776f-811a-4b35-980e-b93405371bc5", + "put": [{ + "path": "resources.notes.urn:mrn:signalk:uuid:36f9b6b5-959f-46a1-8a68-82159742aadd", + "value": { + "position":{ + "latitude": -35.02577800787516, + "longitude": 138.02825595260182 + }, + "title":"My Note", + "description":"My note description", + "url":"http://mynote/url", + "mimeType":"text/html" + } + }] +} +``` +--- + +#### DELETING NOTES + +__via HTTP:__ + +To delete a note send a __DELETE__ request to the note's path. + +``` +DELETE http://localhost:3000/signalk/v1/api/vessels/resources/notes/urn:mrn:signalk:uuid:36f9b6b5-959f-46a1-8a68-82159742aadd +``` + +__via Delta:__ + +Send a PUT message to the path of the note to be removed with a value of `null`. + +```json +{ + "requestId": "6b0e776f-811a-4b35-980e-b93405371bc5", + "put": [{ + "path": "resources.notes.urn:mrn:signalk:uuid:36f9b6b5-959f-46a1-8a68-82159742aadd", + "value": null + }] +} +``` +--- diff --git a/schemas/groups/resources.json b/schemas/groups/resources.json index 731101530..e95dc80a7 100644 --- a/schemas/groups/resources.json +++ b/schemas/groups/resources.json @@ -1,332 +1,363 @@ { - "type": "object", - "$schema": "http://json-schema.org/draft-04/schema#", - "id": "https://signalk.org/specification/1.0.0/schemas/groups/resources.json#", - "title": "resources", - "description": "Resources to aid in navigation and operation of the vessel", - "properties": { - "charts": { - "type": "object", - "title": "chart", - "description": "A holder for charts, each named with their chart code", - "patternProperties": { - "(^[A-Za-z0-9_-]{8,}$)": { - "type": "object", - "description": "A chart", - "properties": { - "name": { - "type": "string", - "description": "Chart common name", - "example":"NZ615 Marlborough Sounds" - }, - "identifier": { - "type": "string", - "description": "Chart number", - "example":"NZ615" - }, - "description": { - "type": "string", - "description": "A description of the chart" - }, - "tilemapUrl": { - "type": "string", - "description": "A url to the tilemap of the chart for use in TMS chartplotting apps", - "example":"http://{server}:8080/mapcache/NZ615" - }, - "region": { - "type": "string", - "description": "Region related to note. A pointer to a region UUID. Alternative to geohash" - }, - "geohash": { - "description": "Position related to chart. Alternative to region", - "$ref": "../definitions.json#/definitions/geohash" - }, - "chartUrl": { - "type": "string", - "description": "A url to the chart file's storage location", - "example":"file:///home/pi/freeboard/mapcache/NZ615" - }, - "scale": { - "type": "integer", - "description": "The scale of the chart, the larger number from 1:200000" - }, - "chartLayers": { - "type": "array", - "description": "If the chart format is WMS, the layers enabled for the chart.", - "items": { - "type": "string", - "description": "Identifier for the layer." - } - }, - "bounds": { - "type": "array", - "description": "The bounds of the chart. An array containing the position of the upper left corner, and the lower right corner. Useful when the chart isn't inherently geo-referenced.", - "items": { - "$ref": "../definitions.json#/definitions/position", - "description": "Position of a corner of the chart" - } - }, - "chartFormat": { - "type": "string", - "description": "The format of the chart", - "enum": [ - "gif", - "geotiff", - "kap", - "png", - "jpg", - "kml", - "wkt", - "topojson", - "geojson", - "gpx", - "tms", - "wms", - "S-57", - "S-63", - "svg", - "other" - ] - }, - "timestamp": { - "description": "timestamp of the last update to this data", - "$ref": "../definitions.json#/definitions/timestamp" - }, - "source": { - "description": "Source of this data", - "$ref": "../definitions.json#/definitions/source" - } - } - } - } - }, - "routes": { - "type": "object", - "title": "route", - "description": "A holder for routes, each named with a UUID", - "patternProperties": { - "^urn:mrn:signalk:uuid:[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-4[0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}$": { - "type": "object", - "description": "A route, named with a UUID", - "properties": { - "name": { - "type": "string", - "description": "Route's common name", - "example":"Nelson Harbour to Adele Is" - }, - "description": { - "type": "string", - "description": "A description of the route" - }, - "distance": { - "description": "Total distance from start to end", - "type": "number", - "units": "m" - }, - "start": { - "type": "string", - "description": "The waypoint UUID at the start of the route" - }, - "end": { - "type": "string", - "description": "The waypoint UUID at the end of the route" - }, - "feature": { - "title": "Feature", - "description": "A Geo JSON feature object which describes the route between the waypoints", - "required": [ - "geometry", - "properties" - ], - "properties": { - "type": { - "enum": [ - "Feature" - ] - }, - "geometry": { - "title": "LineString", - "properties": { - "type": { - "enum": [ - "LineString" - ] - }, - "coordinates": { - "$ref": "../external/geojson/geometry.json#/definitions/lineString" + "type": "object", + "$schema": "http://json-schema.org/draft-04/schema#", + "id": "https://signalk.org/specification/1.0.0/schemas/groups/resources.json#", + "title": "resources", + "description": "Resources to aid in navigation and operation of the vessel", + "properties": { + "charts": { + "type": "object", + "title": "chart", + "description": "A holder for charts, each named with their chart code", + "patternProperties": { + "(^[A-Za-z0-9_-]{8,}$)": { + "type": "object", + "description": "A chart", + "properties": { + "name": { + "type": "string", + "description": "Chart common name", + "example":"NZ615 Marlborough Sounds" + }, + "identifier": { + "type": "string", + "description": "Chart number", + "example":"NZ615" + }, + "description": { + "type": "string", + "description": "A description of the chart" + }, + "tilemapUrl": { + "type": "string", + "description": "A url to the tilemap of the chart for use in TMS chartplotting apps", + "example":"http://{server}:8080/mapcache/NZ615" + }, + "region": { + "type": "string", + "description": "Region related to note. A pointer to a region UUID. Alternative to geohash" + }, + "geohash": { + "description": "Position related to chart. Alternative to region", + "$ref": "../definitions.json#/definitions/geohash" + }, + "chartUrl": { + "type": "string", + "description": "A url to the chart file's storage location", + "example":"file:///home/pi/freeboard/mapcache/NZ615" + }, + "scale": { + "type": "integer", + "description": "The scale of the chart, the larger number from 1:200000" + }, + "chartLayers": { + "type": "array", + "description": "If the chart format is WMS, the layers enabled for the chart.", + "items": { + "type": "string", + "description": "Identifier for the layer." + } + }, + "bounds": { + "type": "array", + "description": "The bounds of the chart. An array containing the position of the upper left corner, and the lower right corner. Useful when the chart isn't inherently geo-referenced.", + "items": { + "$ref": "../definitions.json#/definitions/position", + "description": "Position of a corner of the chart" + } + }, + "chartFormat": { + "type": "string", + "description": "The format of the chart", + "enum": [ + "gif", + "geotiff", + "kap", + "png", + "jpg", + "kml", + "wkt", + "topojson", + "geojson", + "gpx", + "tms", + "wms", + "S-57", + "S-63", + "svg", + "other" + ] + }, + "timestamp": { + "description": "timestamp of the last update to this data", + "$ref": "../definitions.json#/definitions/timestamp" + }, + "source": { + "description": "Source of this data", + "$ref": "../definitions.json#/definitions/source" + } } - } - }, - "properties": { - "type": [ - "object", - "null" - ], - "description": "Additional data of any type", - "additionalProperties": true - }, - "id": { - "FIXME": "may be there, type not known (string? number?)" } - - } - }, - "timestamp": { - "description": "Timestamp of the last update to this data", - "$ref": "../definitions.json#/definitions/timestamp" - }, - "source": { - "description": "Source of this data", - "$ref": "../definitions.json#/definitions/source" } - } - } - } - }, - "notes": { - "type": "object", - "title": "notes", - "description": "A holder for notes about regions, each named with a UUID. Notes might include navigation or cruising info, images, or anything", - "patternProperties": { - "^urn:mrn:signalk:uuid:[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-4[0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}$": { - "type": "object", - "description": "A note about a region, named with a UUID. Notes might include navigation or cruising info, images, or anything", - "properties": { - "title": { - "type": "string", - "description": "Note's common name" - }, - "description": { - "type": "string", - "description": "A textual description of the note" - }, - "region": { - "type": "string", - "description": "Region related to note. A pointer to a region UUID. Alternative to position or geohash" - }, - "position": { - "description": "Position related to note. Alternative to region or geohash", - "$ref": "../definitions.json#/definitions/position" - }, - "geohash": { - "description": "Position related to note. Alternative to region or position", - "$ref": "../definitions.json#/definitions/geohash" - }, - "mimeType": { - "type": "string", - "description": "MIME type of the note" - }, - "url": { - "type": "string", - "description": "Location of the note" - }, - "timestamp": { - "description": "Timestamp of the last update to this data", - "$ref": "../definitions.json#/definitions/timestamp" - }, - "source": { - "description": "Source of this data", - "$ref": "../definitions.json#/definitions/source" + }, + "routes": { + "type": "object", + "title": "route", + "description": "A holder for routes, each named with a UUID", + "patternProperties": { + "^urn:mrn:signalk:uuid:[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-4[0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}$": { + "type": "object", + "description": "A route, named with a UUID", + "properties": { + "name": { + "type": "string", + "description": "Route's common name", + "example":"Nelson Harbour to Adele Is" + }, + "description": { + "type": "string", + "description": "A description of the route" + }, + "distance": { + "description": "Total distance from start to end", + "type": "number", + "units": "m" + }, + "start": { + "type": "string", + "description": "The waypoint UUID at the start of the route" + }, + "end": { + "type": "string", + "description": "The waypoint UUID at the end of the route" + }, + "feature": { + "title": "Feature", + "description": "A Geo JSON feature object which describes the route between the waypoints", + "required": [ + "geometry", + "properties" + ], + "properties": { + "type": { + "enum": [ + "Feature" + ] + }, + "geometry": { + "title": "LineString", + "properties": { + "type": { + "enum": [ + "LineString" + ] + }, + "coordinates": { + "$ref": "../external/geojson/geometry.json#/definitions/lineString" + } + } + }, + "properties": { + "type": [ + "object", + "null" + ], + "description": "Additional data of any type", + "additionalProperties": true + }, + "id": { + "FIXME": "may be there, type not known (string? number?)" + } + } + }, + "timestamp": { + "description": "Timestamp of the last update to this data", + "$ref": "../definitions.json#/definitions/timestamp" + }, + "source": { + "description": "Source of this data", + "$ref": "../definitions.json#/definitions/source" + } + } + } } - } - } - } - }, - "regions": { - "type": "object", - "title": "region", - "description": "A holder for regions, each named with UUID", - "patternProperties": { - "^urn:mrn:signalk:uuid:[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-4[0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}$": { - "type": "object", - "description": "A region of interest, each named with a UUID", - "properties": { - "geohash": { - "description": "geohash of the approximate boundary of this region", - "$ref:": "../definitions.json#/definitions/geohash" - }, - "feature": { - "title": "Feature", - "description": "A Geo JSON feature object which describes the regions boundary", - "required": [ - "geometry", - "properties" - ], - "properties": { - "type": { - "enum": [ - "Feature" - ] - }, - "geometry": { - "oneOf": [ - { - "title": "Polygon", - "properties": { - "type": { - "enum": [ - "Polygon" - ] + }, + "notes": { + "type": "object", + "title": "notes", + "description": "A holder for notes about regions, each named with a UUID. Notes might include navigation or cruising info, images, or anything", + "patternProperties": { + "^urn:mrn:signalk:uuid:[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-4[0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}$": { + "type": "object", + "description": "A note about a region, named with a UUID. Notes might include navigation or cruising info, images, or anything", + "properties": { + "title": { + "type": "string", + "description": "Note's common name" + }, + "description": { + "type": "string", + "description": "A textual description of the note" + }, + "region": { + "type": "string", + "description": "A pointer to a region UUID to which the Note is related. Can be defined in addition to position or geohash" + }, + "position": { + "description": "Position related to note.", + "$ref": "../definitions.json#/definitions/position" + }, + "geohash": { + "description": "Area related to note. Geohash area should encompass the position value (if it is defined).", + "$ref": "../definitions.json#/definitions/geohash" + }, + "mimeType": { + "type": "string", + "description": "MIME type of the note" + }, + "url": { + "type": "string", + "description": "Location of the note" }, - "coordinates": { - "$ref": "../external/geojson/geometry.json#/definitions/polygon" + "group": { + "type": "string", + "description": "Name of a group or collection to which the note is attached" + }, + "authors": { + "type": "array", + "description": "List of note author(s)", + "items": { "$ref": "#/definitions/author" } + }, + "properties": { + "type": [ "object", "null"], + "description": "Extension properties placholder for use by applications.", + "additionalProperties": true + }, + "timestamp": { + "description": "Timestamp of the last update to this data", + "$ref": "../definitions.json#/definitions/timestamp" + }, + "source": { + "description": "Source of this data", + "$ref": "../definitions.json#/definitions/source" } - } - }, - { - "title": "MultiPolygon", - "properties": { - "type": { - "enum": [ - "MultiPolygon" - ] + } + } + } + }, + "regions": { + "type": "object", + "title": "region", + "description": "A holder for regions, each named with UUID", + "patternProperties": { + "^urn:mrn:signalk:uuid:[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-4[0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}$": { + "type": "object", + "description": "A region of interest, each named with a UUID", + "properties": { + "geohash": { + "description": "geohash of the approximate boundary of this region", + "$ref:": "../definitions.json#/definitions/geohash" }, - "coordinates": { - "type": "array", - "items": { - "$ref": "../external/geojson/geometry.json#/definitions/polygon" - } + "feature": { + "title": "Feature", + "description": "A Geo JSON feature object which describes the regions boundary", + "required": [ + "geometry", + "properties" + ], + "properties": { + "type": { + "enum": [ + "Feature" + ] + }, + "geometry": { + "oneOf": [ + { + "title": "Polygon", + "properties": { + "type": { + "enum": [ + "Polygon" + ] + }, + "coordinates": { + "$ref": "../external/geojson/geometry.json#/definitions/polygon" + } + } + }, + { + "title": "MultiPolygon", + "properties": { + "type": { + "enum": [ + "MultiPolygon" + ] + }, + "coordinates": { + "type": "array", + "items": { + "$ref": "../external/geojson/geometry.json#/definitions/polygon" + } + } + } + } + ] + }, + "properties": { + "type": [ + "object", + "null" + ], + "description": "Additional data of any type", + "additionalProperties": true + }, + "id": { + "FIXME": "may be there, type not known (string? number?)" + } + } + }, + "timestamp": { + "description": "Timestamp of the last update to this data", + "$ref": "../definitions.json#/definitions/timestamp" + }, + "source": { + "description": "Source of this data", + "$ref": "../definitions.json#/definitions/source" } - } } - ] - }, - "properties": { - "type": [ - "object", - "null" - ], - "description": "Additional data of any type", - "additionalProperties": true - }, - "id": { - "FIXME": "may be there, type not known (string? number?)" } - - } - }, - "timestamp": { - "description": "Timestamp of the last update to this data", - "$ref": "../definitions.json#/definitions/timestamp" - }, - "source": { - "description": "Source of this data", - "$ref": "../definitions.json#/definitions/source" } - } + }, + "waypoints": { + "type": "object", + "title": "waypoints", + "description": "A holder for waypoints, each named with a UUID", + "patternProperties": { + "^urn:mrn:signalk:uuid:[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-4[0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}$": { + "description": "A waypoint, named with a UUID", + "$ref": "../definitions.json#/definitions/waypoint" + } + } } - } }, - "waypoints": { - "type": "object", - "title": "waypoints", - "description": "A holder for waypoints, each named with a UUID", - "patternProperties": { - "^urn:mrn:signalk:uuid:[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-4[0-9A-Fa-f]{3}-[89ABab][0-9A-Fa-f]{3}-[0-9A-Fa-f]{12}$": { - "description": "A waypoint, named with a UUID", - "$ref": "../definitions.json#/definitions/waypoint" - } - } + "definitions": { + "author": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of author" + }, + "email": { + "type": "string", + "description": "E-mail address of author" + }, + "url": { + "type": "string", + "description": "Link to author details" + } + } + } } - } } diff --git a/test/data/full-valid/resources-note-sample.json b/test/data/full-valid/resources-note-sample.json new file mode 100644 index 000000000..c5a61dace --- /dev/null +++ b/test/data/full-valid/resources-note-sample.json @@ -0,0 +1,93 @@ +{ + "vessels": { + "urn:mrn:signalk:uuid:c0d79334-4e25-4245-8892-54e8ccc8021d": { + "uuid": "urn:mrn:signalk:uuid:c0d79334-4e25-4245-8892-54e8ccc8021d", + "navigation": { + "position": { + "timestamp": "2015-03-06T16:57:53.643Z", + "$source": "nmea2.II", + "sentence": "RMC", + "value": { + "longitude": 173.1693, + "latitude": -41.156426, + "altitude": 0 + } + } + } + } + }, + + "resources": { + "notes": { + "urn:mrn:signalk:uuid:c0d79335-4e25-4245-8892-54e8ccc8021d": { + "title": "Big Island", + "description": "Big Island Approach notes.....", + "mimeType": "text/html", + "url": "https://myhost.com/bigisland.html", + "group": "Islands", + "geohash": "rbejg", + "position": { + "timestamp": "2015-03-06T16:57:53.643Z", + "$source": "self", + "value": { + "longitude": 173.17, + "latitude": -41.157, + "altitude": 0 + } + }, + "region": "urn:mrn:signalk:uuid:c0d79335-4e25-4245-8892-54e8ccc8021e", + "authors": [ + { + "name": "John Smith", + "email": "john.smith@mail.com", + "url": "https://jsmith.org" + } + ], + "properties": { + "draft": true + }, + "timestamp": "2015-03-06T16:57:53.643Z", + "source": { + "label": "note", + "type": "manual" + } + }, + "urn:mrn:signalk:uuid:c0d79335-4e25-4245-8892-54e8ccc8022d": { + "title": "Little Island", + "description": "Little Island Approach notes.....", + "geohash": "rbejg", + "region": "urn:mrn:signalk:uuid:c0d79335-4e25-4245-8892-54e8ccc8021e", + "properties": {}, + "authors": [], + "timestamp": "2015-03-06T16:57:53.643Z", + "source": { + "label": "note", + "type": "manual" + } + }, + "urn:mrn:signalk:uuid:c0d79335-4e25-4245-8892-54e8ccc8023d": { + "title": "Other Island", + "description": "Other Island Approach notes.....", + "geohash": "rbejg", + "timestamp": "2015-03-06T16:57:53.643Z", + "source": { + "label": "note", + "type": "manual" + } + }, + "urn:mrn:signalk:uuid:c0d79335-4e25-4245-8892-54e8ccc8024d": { + "title": "Simple Note", + "description": "Just a simple, unattached note.....", + "timestamp": "2015-03-06T16:57:53.643Z", + "source": { + "label": "note", + "type": "manual" + } + } + } + }, + + "version": "1.0.0", + "self": "urn:mrn:signalk:uuid:c0d79334-4e25-4245-8892-54e8ccc8021d" + } + \ No newline at end of file