{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://schema.govfresh.com/v1/catalog/manifest.schema.json",
  "title": "PublisherManifest",
  "description": "The document that makes a government's schemaGov data findable at all. Served at /.well-known/schemaGov.json (RFC 8615), it declares who is publishing, which jurisdiction they cover, which profiles they publish, and where each one lives. Without it a consumer has no entry point: seven profiles of well-modelled data are useless if nobody can discover the URLs. This is the only document in schemaGov with a fixed, conventional location.",
  "type": "object",
  "properties": {
    "@context": {},
    "@id": {
      "type": "string",
      "format": "iri",
      "description": "This manifest's own dereferenceable identifier."
    },
    "@type": {
      "const": "PublisherManifest",
      "description": "Always `PublisherManifest`."
    },
    "name": {
      "type": "string",
      "description": "The publisher's name, for display."
    },
    "description": {
      "type": "string",
      "description": "A plain-language description of what this publisher makes available."
    },
    "publisher": {
      "$ref": "../_core/reference.schema.json",
      "description": "The GovernmentOrganization responsible. Required: unattributed data cannot be trusted or corrected."
    },
    "about": {
      "$ref": "../_core/reference.schema.json",
      "description": "The Jurisdiction covered."
    },
    "specVersion": {
      "type": "string",
      "description": "The schemaGov version this publisher targets, e.g. '1.0.0'. Lets a consumer detect a publisher pinned to an older profile."
    },
    "conformanceLevel": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "core",
          "standard",
          "extended"
        ]
      },
      "description": "schemaGov conformance level claimed, per SPEC section 4. Distinct from conformsTo, which names an external standard the data follows."
    },
    "profileEndpoint": {
      "type": "array",
      "minItems": 1,
      "description": "One entry per published profile. This is the routing table.",
      "items": {
        "type": "object",
        "properties": {
          "@type": {
            "const": "ProfileEndpoint"
          },
          "profile": {
            "type": "string",
            "description": "Which schemaGov profile this endpoint serves.",
            "enum": [
              "core",
              "org",
              "code",
              "meetings",
              "requests",
              "budget",
              "procurement",
              "catalog",
              "alerts"
            ]
          },
          "url": {
            "type": "string",
            "format": "iri",
            "description": "Where the data is."
          },
          "encodingFormat": {
            "type": "string",
            "description": "Usually application/ld+json."
          },
          "dateModified": {
            "type": "string",
            "description": "Lets a consumer poll cheaply instead of refetching.",
            "anyOf": [
              {
                "format": "date"
              },
              {
                "format": "date-time"
              }
            ]
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "@type",
          "profile",
          "url"
        ],
        "additionalProperties": false
      }
    },
    "catalog": {
      "$ref": "../_core/reference.schema.json",
      "description": "The publisher's DataCatalog, where one exists."
    },
    "contactPoint": {
      "type": "object",
      "description": "How to reach the publisher with questions about this data."
    },
    "inLanguage": {
      "type": "array",
      "description": "The language(s) this publisher's schemaGov data is published in.",
      "items": {
        "type": "string"
      }
    },
    "license": {
      "type": "string",
      "format": "iri",
      "description": "The default licence for the data this manifest points to, where one applies across all of it."
    },
    "dateModified": {
      "type": "string",
      "anyOf": [
        {
          "format": "date"
        },
        {
          "format": "date-time"
        }
      ],
      "description": "When this manifest last changed."
    }
  },
  "required": [
    "@id",
    "@type",
    "publisher",
    "about",
    "profileEndpoint"
  ],
  "additionalProperties": true
}
