{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "properties": {
    "schema": {
      "title": "Schema",
      "description": "The JSON Table Schema that describes of this resource.",
      "type": "object",
      "properties": {
        "fields": {
          "type": "array",
          "minItems": 0,
          "items": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string",
                "propertyOrder": 10
              },
              "title": {
                "type": "string",
                "propertyOrder": 20
              },
              "description": {
                "type": "string",
                "propertyOrder": 30
              },
              "type": {
                "type": "string",
                "enum": [
                  "string",
                  "number",
                  "integer",
                  "boolean",
                  "object",
                  "array",
                  "datetime",
                  "date",
                  "time",
                  "duration",
                  "geopoint",
                  "geojson",
                  "any"
                ],
                "propertyOrder": 40
              },
              "format": {
                "type": "string",
                "propertyOrder": 50
              }
            }
          }
        }
      }
    },
    "name": {
      "title": "Name",
      "description": "An identifier for this package. Lower case characters with '.', '_' and '-' are allowed.",
      "type": "string",
      "pattern": "^([a-z0-9._-])+$"
    },
    "title": {
      "title": "Title",
      "description": "A human-readable title.",
      "type": "string"
    },
    "description": {
      "title": "Description",
      "description": "A text description.",
      "type": "string"
    },
    "homepage": {
      "title": "Home Page",
      "description": "The URL for this data package's website.",
      "type": "string"
    },
    "version": {
      "title": "Version",
      "description": "A unique version number for this package.",
      "type": "string"
    },
    "url": {
      "title": "URL",
      "description": "The URL for this resource.",
      "type": "string"
    },
    "path": {
      "title": "Path",
      "description": "The relative path to this resource.",
      "type": "string"
    },
    "data": {
      "title": "Data",
      "description": "The inline data for this resource.",
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "array"
        },
        {
          "type": "object"
        }
      ]
    },
    "format": {
      "title": "Format",
      "description": "The file format of this resource.",
      "type": "string"
    },
    "mediatype": {
      "title": "Media Type",
      "description": "The media type of this resource.",
      "type": "string",
      "pattern": "^(.+)/(.+)$"
    },
    "encoding": {
      "title": "Encoding",
      "description": "The file encoding of this resource.",
      "type": "string"
    },
    "bytes": {
      "title": "Bytes",
      "description": "The size of this resource in bytes.",
      "type": "integer"
    },
    "hash": {
      "title": "Hash",
      "type": "string",
      "description": "The MD5 hash of this resource. Indicate other hashing algorithms with the {algorithm}:{hash} format.",
      "pattern": "^([^:]+:[a-fA-F0-9]+|[a-fA-F0-9]{32}|)$"
    },
    "dialect": {
      "title": "Dialect",
      "description": "The dialect of this resource file type.",
      "type": "object"
    },
    "author": {
      "title": "Author",
      "description": "A contributor to this package.",
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "object",
          "properties": {
            "name": {
              "type": "string"
            },
            "email": {
              "type": "string"
            },
            "web": {
              "type": "string"
            }
          },
          "required": [
            "name"
          ]
        }
      ]
    },
    "contributors": {
      "title": "Contributors",
      "description": "The contributors to this package.",
      "type": "array",
      "items": {
        "$ref": "#/properties/author"
      }
    },
    "license": {
      "title": "License",
      "description": "The license under which this package is published.",
      "oneOf": [
        {
          "type": "string"
        },
        {
          "type": "object",
          "properties": {
            "type": {
              "type": "string"
            },
            "url": {
              "type": "string"
            }
          },
          "anyOf": [
            {
              "title": "type required",
              "required": [
                "type"
              ]
            },
            {
              "title": "url required",
              "required": [
                "url"
              ]
            }
          ]
        }
      ]
    },
    "sources": {
      "title": "Sources",
      "description": "The raw sources for this resource.",
      "type": "array",
      "minItems": 0,
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "web": {
            "type": "string"
          },
          "email": {
            "type": "string"
          }
        },
        "anyOf": [
          {
            "title": "name required",
            "required": [
              "name"
            ]
          },
          {
            "title": "web required",
            "required": [
              "web"
            ]
          },
          {
            "title": "email required",
            "required": [
              "email"
            ]
          }
        ]
      }
    },
    "keywords": {
      "title": "Keywords",
      "description": "A list of keywords that describe this package.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "image": {
      "title": "Image",
      "description": "A image to represent this package.",
      "type": "string"
    },
    "dataDependencies": {
      "title": "Data Dependencies",
      "description": "Additional Data Packages required to install this package.",
      "type": "object"
    },
    "countryCode": {
      "title": "ISO 3166-1 Alpha-2 Country code",
      "description": "A valid 2-digit ISO country code (ISO 3166-1 alpha-2), or, an array of valid ISO codes.",
      "oneOf": [
        {
          "type": "string",
          "pattern": "^[A-Z]{2}$"
        },
        {
          "type": "array",
          "minItems": 1,
          "items": {
            "type": "string",
            "pattern": "^[A-Z]{2}$"
          }
        }
      ]
    }
  }
}