{
  "$id": "https://schemas.wmo.int/wis2/broker/message/4.0.0/schema.yml",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "allOf": [
    {
      "properties": {
        "geometry": {
          "oneOf": [
            {
              "$ref": "#/definitions/PointOrPolygon/oneOf/0"
            },
            {
              "properties": {
                "coordinates": {
                  "items": {
                    "items": {
                      "type": "number"
                    },
                    "minItems": 2,
                    "type": "array"
                  },
                  "type": "array"
                },
                "type": {
                  "enum": [
                    "MultiPoint"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type",
                "coordinates"
              ],
              "type": "object"
            },
            {
              "properties": {
                "coordinates": {
                  "items": {
                    "items": {
                      "type": "number"
                    },
                    "minItems": 2,
                    "type": "array"
                  },
                  "minItems": 2,
                  "type": "array"
                },
                "type": {
                  "enum": [
                    "LineString"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type",
                "coordinates"
              ],
              "type": "object"
            },
            {
              "properties": {
                "coordinates": {
                  "items": {
                    "items": {
                      "items": {
                        "type": "number"
                      },
                      "minItems": 2,
                      "type": "array"
                    },
                    "minItems": 2,
                    "type": "array"
                  },
                  "type": "array"
                },
                "type": {
                  "enum": [
                    "MultiLineString"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type",
                "coordinates"
              ],
              "type": "object"
            },
            {
              "$ref": "#/definitions/PointOrPolygon/oneOf/1"
            },
            {
              "properties": {
                "coordinates": {
                  "items": {
                    "items": {
                      "items": {
                        "items": {
                          "type": "number"
                        },
                        "minItems": 2,
                        "type": "array"
                      },
                      "minItems": 4,
                      "type": "array"
                    },
                    "type": "array"
                  },
                  "type": "array"
                },
                "type": {
                  "enum": [
                    "MultiPolygon"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type",
                "coordinates"
              ],
              "type": "object"
            },
            {
              "properties": {
                "geometries": {
                  "items": {
                    "$ref": "#/allOf/0/properties/geometry"
                  },
                  "type": "array"
                },
                "type": {
                  "enum": [
                    "GeometryCollection"
                  ],
                  "type": "string"
                }
              },
              "required": [
                "type",
                "geometries"
              ],
              "type": "object"
            }
          ]
        },
        "id": {
          "oneOf": [
            {
              "type": "string"
            },
            {
              "type": "integer"
            }
          ]
        },
        "links": {
          "items": {
            "properties": {
              "href": {
                "example": "http://data.example.com/buildings/123",
                "type": "string"
              },
              "hreflang": {
                "example": "en",
                "type": "string"
              },
              "length": {
                "type": "integer"
              },
              "rel": {
                "example": "alternate",
                "type": "string"
              },
              "title": {
                "example": "Trierer Strasse 70, 53115 Bonn",
                "type": "string"
              },
              "type": {
                "example": "application/geo+json",
                "type": "string"
              }
            },
            "required": [
              "href",
              "rel"
            ],
            "type": "object"
          },
          "type": "array"
        },
        "properties": {
          "nullable": true,
          "type": "object"
        },
        "type": {
          "enum": [
            "Feature"
          ],
          "type": "string"
        }
      },
      "required": [
        "type",
        "geometry",
        "properties"
      ],
      "type": "object"
    }
  ],
  "definitions": {
    "PointOrPolygon": {
      "oneOf": [
        {
          "properties": {
            "coordinates": {
              "items": {
                "type": "number"
              },
              "minItems": 2,
              "type": "array"
            },
            "type": {
              "enum": [
                "Point"
              ],
              "type": "string"
            }
          },
          "required": [
            "type",
            "coordinates"
          ],
          "type": "object"
        },
        {
          "properties": {
            "coordinates": {
              "items": {
                "items": {
                  "items": {
                    "type": "number"
                  },
                  "minItems": 2,
                  "type": "array"
                },
                "minItems": 4,
                "type": "array"
              },
              "type": "array"
            },
            "type": {
              "enum": [
                "Polygon"
              ],
              "type": "string"
            }
          },
          "required": [
            "type",
            "coordinates"
          ],
          "type": "object"
        }
      ]
    }
  },
  "description": "WMO WIS 2.0 broker data notification schema",
  "properties": {
    "geometry": {
      "$ref": "#/definitions/PointOrPolygon",
      "examples": [
        {
          "coordinates": [
            6.146255135536194,
            46.223296618227444
          ],
          "type": "Point"
        },
        null
      ],
      "nullable": true
    },
    "id": {
      "description": "Unique identifier for the data notification.",
      "examples": [
        "31e9d66a-cd83-4174-9429-b932f1abe1be"
      ],
      "format": "uuid",
      "type": "string"
    },
    "properties": {
      "properties": {
        "content": {
          "description": "Used to embed small instances/products inline within the notification.",
          "properties": {
            "encoding": {
              "description": "Encoding of content. Note that if gzip compression is used the result is base64 encoded too.",
              "enum": [
                "utf-8",
                "base64",
                "gzip"
              ],
              "type": "string"
            },
            "value": {
              "description": "The inlined content of the file.",
              "examples": [
                "Hello World!"
              ],
              "type": "string"
            }
          },
          "required": [
            "encoding",
            "value"
          ],
          "type": "object"
        },
        "data_end_datetime": {
          "description": "TBD, Identifies the end date/time date of the data being published, in ISO8601/RFC3339 format.",
          "format": "date-time",
          "type": "string"
        },
        "data_start_datetime": {
          "description": "TBD, Identifies the start date/time date of the data being published, in ISO8601/RFC3339 format.",
          "format": "date-time",
          "type": "string"
        },
        "hierarchy": {
          "description": "WIS 2.0 data hierarchical category identifier.",
          "examples": [
            "EUE/eumetsat_darmstadt/observation/global/",
            "CAN/eccc-msc/data/core/weather/surface-based-obs/landFixed"
          ],
          "type": "string"
        },
        "instance_datetime": {
          "description": "TBD, Identifies the date/time that characterises the data instance being published, \ne.g. observation time, model run, etc. - typically rounded to a multiple of data production interval. ISO8601/RFC3339 format.",
          "examples": [
            "20220427T063000Z",
            "2022-04-27T06:30:00Z"
          ],
          "format": "date-time",
          "type": "string"
        },
        "instance_identifier": {
          "description": "Indentifier of the current instance (of the instance whose availability this notification anounces). \nCan be a file name or some other, preferably unique, identifier.",
          "examples": [
            "gfs.t00z.pgrb2.0p25.f003",
            "A_IEDX02EUMP270634_C_EDZW_20220427072332_84196486.bufr",
            "d64b8d25-4fd0-42b2-91b3-ba29f215fbfc"
          ],
          "title": "Identifier of the data instance",
          "type": "string"
        },
        "integrity": {
          "description": "Specifies a way to verify integrity and/or uniqueness of the data instance.",
          "properties": {
            "method": {
              "description": "A specific set of methods for calculating the checksum algorithms:\n* ``sha512``: the Secure Hash Algorithm 512 bits, value is base64 encoded.\n* ``arbitrary``: an arbitrary string is used to identify the value.\n* ``md5``: the Message Digest 5 hash (obsolete, perhaps will be rejected)\n",
              "enum": [
                "sha256",
                "sha512",
                "md5",
                "remove",
                "link",
                "cod",
                "arbitrary",
                "md5name",
                "random"
              ],
              "type": "string"
            },
            "value": {
              "description": "Base 64 encoded checksum or digital signature",
              "examples": [
                "N2Y4M2IxNjU3ZmYxZmM1M2I5MmRjMTgxNDhhMWQ2NWRmYzJkNGIxZmEzZDY3NzI4NGFkZGQyMDAxMjZkOTA2OSAqYWEuanNvbgo="
              ],
              "type": "string"
            }
          },
          "required": [
            "method",
            "value"
          ],
          "type": "object"
        },
        "publication_datetime": {
          "description": "Identifies the date/time of when the notification was posted/published, in ISO8601/RFC3339 format.\n\nThe publication date/time is critical for subscribers to prevent message loss by knowing\ntheir lag (how far behind the publisher they are).\n",
          "examples": [
            "20220427T072332.314854383Z",
            "2022-04-27T07:23:32.314854383Z"
          ],
          "format": "date-time",
          "type": "string"
        },
        "size": {
          "description": "Size of the data instance in bytes/octets, if known.",
          "examples": [
            12345
          ],
          "type": "integer"
        }
      },
      "required": [
        "publication_datetime",
        "integrity",
        "hierarchy"
      ],
      "type": "object"
    },
    "version": {
      "const": "4.0.0",
      "description": "Version of the data notification specification format.",
      "type": "string"
    }
  },
  "required": [
    "id",
    "type",
    "geometry",
    "properties",
    "links"
  ],
  "title": "WMO WIS 2.0 broker data notification schema",
  "type": "object"
}