UNPKG

datapackage

Version:

Utilities to work with Data Packages as defined on specs.frictionlessdata.io

940 lines (939 loc) 226 kB
{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "Fiscal Data Package", "description": "Fiscal Data Package is a simple specification for data access and delivery of fiscal data.", "type": "object", "allOf": [ { "title": "Tabular Data Package", "description": "Tabular Data Package", "type": "object", "required": [ "resources", "profile" ], "properties": { "profile": { "enum": [ "tabular-data-package" ], "propertyOrder": 10, "title": "Profile", "description": "The profile of this descriptor.", "context": "Every Package and Resource descriptor has a profile. The default profile, if none is declared, is `data-package` for Package and `data-resource` for Resource.", "type": "string", "examples": [ "{\n \"profile\": \"tabular-data-package\"\n}\n", "{\n \"profile\": \"http://example.com/my-profiles-json-schema.json\"\n}\n" ] }, "name": { "propertyOrder": 20, "title": "Name", "description": "An identifier string. Lower case characters with `.`, `_`, `-` and `/` are allowed.", "type": "string", "pattern": "^([-a-z0-9._/])+$", "context": "This is ideally a url-usable and human-readable name. Name `SHOULD` be invariant, meaning it `SHOULD NOT` change when its parent descriptor is updated.", "examples": [ "{\n \"name\": \"my-nice-name\"\n}\n" ] }, "id": { "propertyOrder": 30, "title": "ID", "description": "A property reserved for globally unique identifiers. Examples of identifiers that are unique include UUIDs and DOIs.", "context": "A common usage pattern for Data Packages is as a packaging format within the bounds of a system or platform. In these cases, a unique identifier for a package is desired for common data handling workflows, such as updating an existing package. While at the level of the specification, global uniqueness cannot be validated, consumers using the `id` property `MUST` ensure identifiers are globally unique.", "type": "string", "examples": [ "{\n \"id\": \"b03ec84-77fd-4270-813b-0c698943f7ce\"\n}\n", "{\n \"id\": \"http://dx.doi.org/10.1594/PANGAEA.726855\"\n}\n" ] }, "title": { "propertyOrder": 40, "title": "Title", "description": "A human-readable title.", "type": "string", "examples": [ "{\n \"title\": \"My Package Title\"\n}\n" ] }, "description": { "propertyOrder": 50, "format": "textarea", "title": "Description", "description": "A text description. Markdown is encouraged.", "type": "string", "examples": [ "{\n \"description\": \"# My Package description\\nAll about my package.\"\n}\n" ] }, "homepage": { "propertyOrder": 60, "title": "Home Page", "description": "The home on the web that is related to this data package.", "type": "string", "format": "uri", "examples": [ "{\n \"homepage\": \"http://example.com/\"\n}\n" ] }, "created": { "propertyOrder": 70, "title": "Created", "description": "The datetime on which this descriptor was created.", "context": "The datetime must conform to the string formats for datetime as described in [RFC3339](https://tools.ietf.org/html/rfc3339#section-5.6)", "type": "string", "format": "date-time", "examples": [ "{\n \"created\": \"1985-04-12T23:20:50.52Z\"\n}\n" ] }, "contributors": { "propertyOrder": 80, "title": "Contributors", "description": "The contributors to this descriptor.", "type": "array", "minItems": 1, "items": { "title": "Contributor", "description": "A contributor to this descriptor.", "properties": { "title": { "title": "Title", "description": "A human-readable title.", "type": "string", "examples": [ "{\n \"title\": \"My Package Title\"\n}\n" ] }, "path": { "title": "Path", "description": "A fully qualified URL, or a POSIX file path..", "type": "string", "examples": [ "{\n \"path\": \"file.csv\"\n}\n", "{\n \"path\": \"http://example.com/file.csv\"\n}\n" ], "context": "Implementations need to negotiate the type of path provided, and dereference the data accordingly." }, "email": { "title": "Email", "description": "An email address.", "type": "string", "format": "email", "examples": [ "{\n \"email\": \"example@example.com\"\n}\n" ] }, "organisation": { "title": "Organization", "description": "An organizational affiliation for this contributor.", "type": "string" }, "role": { "type": "string", "enum": [ "publisher", "author", "maintainer", "wrangler", "contributor" ], "default": "contributor" } }, "required": [ "title" ], "context": "Use of this property does not imply that the person was the original creator of, or a contributor to, the data in the descriptor, but refers to the composition of the descriptor itself." }, "examples": [ "{\n \"contributors\": [\n {\n \"title\": \"Joe Bloggs\"\n }\n ]\n}\n", "{\n \"contributors\": [\n {\n \"title\": \"Joe Bloggs\",\n \"email\": \"joe@example.com\",\n \"role\": \"author\"\n }\n ]\n}\n" ] }, "keywords": { "propertyOrder": 90, "title": "Keywords", "description": "A list of keywords that describe this package.", "type": "array", "minItems": 1, "items": { "type": "string" }, "examples": [ "{\n \"keywords\": [\n \"data\",\n \"fiscal\",\n \"transparency\"\n ]\n}\n" ] }, "image": { "propertyOrder": 100, "title": "Image", "description": "A image to represent this package.", "type": "string", "examples": [ "{\n \"image\": \"http://example.com/image.jpg\"\n}\n", "{\n \"image\": \"relative/to/image.jpg\"\n}\n" ] }, "licenses": { "propertyOrder": 110, "title": "Licenses", "description": "The license(s) under which this package is published.", "type": "array", "minItems": 1, "items": { "title": "License", "description": "A license for this descriptor.", "type": "object", "properties": { "name": { "title": "Open Definition license identifier", "description": "MUST be an Open Definition license identifier, see http://licenses.opendefinition.org/", "type": "string", "pattern": "^([-a-zA-Z0-9._])+$" }, "path": { "title": "Path", "description": "A fully qualified URL, or a POSIX file path..", "type": "string", "examples": [ "{\n \"path\": \"file.csv\"\n}\n", "{\n \"path\": \"http://example.com/file.csv\"\n}\n" ], "context": "Implementations need to negotiate the type of path provided, and dereference the data accordingly." }, "title": { "title": "Title", "description": "A human-readable title.", "type": "string", "examples": [ "{\n \"title\": \"My Package Title\"\n}\n" ] } }, "context": "Use of this property does not imply that the person was the original creator of, or a contributor to, the data in the descriptor, but refers to the composition of the descriptor itself." }, "context": "This property is not legally binding and does not guarantee that the package is licensed under the terms defined herein.", "examples": [ "{\n \"licenses\": [\n {\n \"name\": \"odc-pddl-1.0\",\n \"uri\": \"http://opendatacommons.org/licenses/pddl/\"\n }\n ]\n}\n" ] }, "resources": { "propertyOrder": 120, "title": "Tabular Data Resources", "description": "An `array` of Tabular Data Resource objects, each compliant with the [Tabular Data Resource](/tabular-data-resource/) specification.", "type": "array", "minItems": 1, "items": { "title": "Tabular Data Resource", "description": "A Tabular Data Resource.", "type": "object", "oneOf": [ { "required": [ "name", "data", "schema", "profile" ] }, { "required": [ "name", "path", "schema", "profile" ] } ], "properties": { "profile": { "enum": [ "tabular-data-resource" ], "propertyOrder": 10, "title": "Profile", "description": "The profile of this descriptor.", "context": "Every Package and Resource descriptor has a profile. The default profile, if none is declared, is `data-package` for Package and `data-resource` for Resource.", "type": "string", "examples": [ "{\n \"profile\": \"tabular-data-package\"\n}\n", "{\n \"profile\": \"http://example.com/my-profiles-json-schema.json\"\n}\n" ] }, "name": { "propertyOrder": 20, "title": "Name", "description": "An identifier string. Lower case characters with `.`, `_`, `-` and `/` are allowed.", "type": "string", "pattern": "^([-a-z0-9._/])+$", "context": "This is ideally a url-usable and human-readable name. Name `SHOULD` be invariant, meaning it `SHOULD NOT` change when its parent descriptor is updated.", "examples": [ "{\n \"name\": \"my-nice-name\"\n}\n" ] }, "path": { "propertyOrder": 30, "title": "Path", "description": "A reference to the data for this resource, as either a path as a string, or an array of paths as strings. of valid URIs.", "oneOf": [ { "title": "Path", "description": "A fully qualified URL, or a POSIX file path..", "type": "string", "examples": [ "{\n \"path\": \"file.csv\"\n}\n", "{\n \"path\": \"http://example.com/file.csv\"\n}\n" ], "context": "Implementations need to negotiate the type of path provided, and dereference the data accordingly." }, { "type": "array", "minItems": 1, "items": { "title": "Path", "description": "A fully qualified URL, or a POSIX file path..", "type": "string", "examples": [ "{\n \"path\": \"file.csv\"\n}\n", "{\n \"path\": \"http://example.com/file.csv\"\n}\n" ], "context": "Implementations need to negotiate the type of path provided, and dereference the data accordingly." }, "examples": [ "[ \"file.csv\" ]\n", "[ \"http://example.com/file.csv\" ]\n" ] } ], "context": "The dereferenced value of each referenced data source in `path` `MUST` be commensurate with a native, dereferenced representation of the data the resource describes. For example, in a *Tabular* Data Resource, this means that the dereferenced value of `path` `MUST` be an array.", "examples": [ "{\n \"path\": [\n \"file.csv\",\n \"file2.csv\"\n ]\n}\n", "{\n \"path\": [\n \"http://example.com/file.csv\",\n \"http://example.com/file2.csv\"\n ]\n}\n", "{\n \"path\": \"http://example.com/file.csv\"\n}\n" ] }, "data": { "propertyOrder": 230, "title": "Data", "description": "Inline data for this resource." }, "schema": { "propertyOrder": 40, "title": "Table Schema", "description": "A Table Schema for this resource, compliant with the [Table Schema](/tableschema/) specification.", "type": "object", "required": [ "fields" ], "properties": { "fields": { "type": "array", "minItems": 1, "items": { "title": "Table Schema Field", "type": "object", "anyOf": [ { "type": "object", "title": "String Field", "description": "The field contains strings, that is, sequences of characters.", "required": [ "name" ], "properties": { "name": { "title": "Name", "description": "A name for this field.", "type": "string" }, "title": { "title": "Title", "description": "A human-readable title.", "type": "string", "examples": [ "{\n \"title\": \"My Package Title\"\n}\n" ] }, "description": { "title": "Description", "description": "A text description. Markdown is encouraged.", "type": "string", "examples": [ "{\n \"description\": \"# My Package description\\nAll about my package.\"\n}\n" ] }, "type": { "description": "The type keyword, which `MUST` be a value of `string`.", "enum": [ "string" ] }, "format": { "description": "The format keyword options for `string` are `default`, `email`, `uri`, `binary`, and `uuid`.", "context": "The following `format` options are supported:\n * **default**: any valid string.\n * **email**: A valid email address.\n * **uri**: A valid URI.\n * **binary**: A base64 encoded string representing binary data.\n * **uuid**: A string that is a uuid.", "enum": [ "default", "email", "uri", "binary", "uuid" ], "default": "default" }, "constraints": { "title": "Constraints", "description": "The following constraints are supported for `string` fields.", "type": "object", "properties": { "required": { "type": "boolean", "description": "Indicates whether a property must have a value for each instance.", "context": "An empty string is considered to be a missing value." }, "unique": { "type": "boolean", "description": "When `true`, each value for the property `MUST` be unique." }, "pattern": { "type": "string", "description": "A regular expression pattern to test each value of the property against, where a truthy response indicates validity.", "context": "Regular expressions `SHOULD` conform to the [XML Schema regular expression syntax](http://www.w3.org/TR/xmlschema-2/#regexs)." }, "enum": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string" } }, "minLength": { "type": "integer", "description": "An integer that specifies the minimum length of a value." }, "maxLength": { "type": "integer", "description": "An integer that specifies the maximum length of a value." } } }, "rdfType": { "type": "string", "description": "The RDF type for this field." } }, "examples": [ "{\n \"name\": \"name\",\n \"type\": \"string\"\n}\n", "{\n \"name\": \"name\",\n \"type\": \"string\",\n \"format\": \"email\"\n}\n", "{\n \"name\": \"name\",\n \"type\": \"string\",\n \"constraints\": {\n \"minLength\": 3,\n \"maxLength\": 35\n }\n}\n" ] }, { "type": "object", "title": "Number Field", "description": "The field contains numbers of any kind including decimals.", "context": "The lexical formatting follows that of decimal in [XMLSchema](https://www.w3.org/TR/xmlschema-2/#decimal): a non-empty finite-length sequence of decimal digits separated by a period as a decimal indicator. An optional leading sign is allowed. If the sign is omitted, '+' is assumed. Leading and trailing zeroes are optional. If the fractional part is zero, the period and following zero(es) can be omitted. For example: '-1.23', '12678967.543233', '+100000.00', '210'.\n\nThe following special string values are permitted (case does not need to be respected):\n - NaN: not a number\n - INF: positive infinity\n - -INF: negative infinity\n\nA number `MAY` also have a trailing:\n - exponent: this `MUST` consist of an E followed by an optional + or - sign followed by one or more decimal digits (0-9)\n - percentage: the percentage sign: `%`. In conversion percentages should be divided by 100.\n\nIf both exponent and percentages are present the percentage `MUST` follow the exponent e.g. '53E10%' (equals 5.3).", "required": [ "name" ], "properties": { "name": { "title": "Name", "description": "A name for this field.", "type": "string" }, "title": { "title": "Title", "description": "A human-readable title.", "type": "string", "examples": [ "{\n \"title\": \"My Package Title\"\n}\n" ] }, "description": { "title": "Description", "description": "A text description. Markdown is encouraged.", "type": "string", "examples": [ "{\n \"description\": \"# My Package description\\nAll about my package.\"\n}\n" ] }, "type": { "description": "The type keyword, which `MUST` be a value of `number`.", "enum": [ "number" ] }, "format": { "description": "There are no format keyword options for `number`: only `default` is allowed.", "enum": [ "default" ], "default": "default" }, "bareNumber": { "type": "boolean", "title": "bareNumber", "description": "a boolean field with a default of `true`. If `true` the physical contents of this field must follow the formatting constraints already set out. If `false` the contents of this field may contain leading and/or trailing non-numeric characters (which implementors MUST therefore strip). The purpose of `bareNumber` is to allow publishers to publish numeric data that contains trailing characters such as percentages e.g. `95%` or leading characters such as currencies e.g. `€95` or `EUR 95`. Note that it is entirely up to implementors what, if anything, they do with stripped text.", "default": true }, "decimalChar": { "type": "string", "description": "A string whose value is used to represent a decimal point within the number. The default value is `.`." }, "groupChar": { "type": "string", "description": "A string whose value is used to group digits within the number. The default value is `null`. A common value is `,` e.g. '100,000'." }, "constraints": { "title": "Constraints", "description": "The following constraints are supported for `number` fields.", "type": "object", "properties": { "required": { "type": "boolean", "description": "Indicates whether a property must have a value for each instance.", "context": "An empty string is considered to be a missing value." }, "unique": { "type": "boolean", "description": "When `true`, each value for the property `MUST` be unique." }, "pattern": { "type": "string", "description": "A regular expression pattern to test each value of the property against, where a truthy response indicates validity.", "context": "Regular expressions `SHOULD` conform to the [XML Schema regular expression syntax](http://www.w3.org/TR/xmlschema-2/#regexs)." }, "enum": { "oneOf": [ { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string" } }, { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "number" } } ] }, "minimum": { "oneOf": [ { "type": "string" }, { "type": "number" } ] }, "maximum": { "oneOf": [ { "type": "string" }, { "type": "number" } ] } } }, "rdfType": { "type": "string", "description": "The RDF type for this field." } }, "examples": [ "{\n \"name\": \"field-name\",\n \"type\": \"number\"\n}\n", "{\n \"name\": \"field-name\",\n \"type\": \"number\",\n \"constraints\": {\n \"enum\": [ \"1.00\", \"1.50\", \"2.00\" ]\n }\n}\n" ] }, { "type": "object", "title": "Integer Field", "description": "The field contains integers - that is whole numbers.", "context": "Integer values are indicated in the standard way for any valid integer.", "required": [ "name", "type" ], "properties": { "name": { "title": "Name", "description": "A name for this field.", "type": "string" }, "title": { "title": "Title", "description": "A human-readable title.", "type": "string", "examples": [ "{\n \"title\": \"My Package Title\"\n}\n" ] }, "description": { "title": "Description", "description": "A text description. Markdown is encouraged.", "type": "string", "examples": [ "{\n \"description\": \"# My Package description\\nAll about my package.\"\n}\n" ] }, "type": { "description": "The type keyword, which `MUST` be a value of `integer`.", "enum": [ "integer" ] }, "format": { "description": "There are no format keyword options for `integer`: only `default` is allowed.", "enum": [ "default" ], "default": "default" }, "bareNumber": { "type": "boolean", "title": "bareNumber", "description": "a boolean field with a default of `true`. If `true` the physical contents of this field must follow the formatting constraints already set out. If `false` the contents of this field may contain leading and/or trailing non-numeric characters (which implementors MUST therefore strip). The purpose of `bareNumber` is to allow publishers to publish numeric data that contains trailing characters such as percentages e.g. `95%` or leading characters such as currencies e.g. `€95` or `EUR 95`. Note that it is entirely up to implementors what, if anything, they do with stripped text.", "default": true }, "constraints": { "title": "Constraints", "description": "The following constraints are supported for `integer` fields.", "type": "object", "properties": { "required": { "type": "boolean", "description": "Indicates whether a property must have a value for each instance.", "context": "An empty string is considered to be a missing value." }, "unique": { "type": "boolean", "description": "When `true`, each value for the property `MUST` be unique." }, "pattern": { "type": "string", "description": "A regular expression pattern to test each value of the property against, where a truthy response indicates validity.", "context": "Regular expressions `SHOULD` conform to the [XML Schema regular expression syntax](http://www.w3.org/TR/xmlschema-2/#regexs)." }, "enum": { "oneOf": [ { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string" } }, { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "integer" } } ] }, "minimum": { "oneOf": [ { "type": "string" }, { "type": "integer" } ] }, "maximum": { "oneOf": [ { "type": "string" }, { "type": "integer" } ] } } }, "rdfType": { "type": "string", "description": "The RDF type for this field." } }, "examples": [ "{\n \"name\": \"age\",\n \"type\": \"integer\",\n \"constraints\": {\n \"unique\": true,\n \"minimum\": 100,\n \"maximum\": 9999\n }\n}\n" ] }, { "type": "object", "title": "Date Field", "description": "The field contains temporal date values.", "required": [ "name", "type" ], "properties": { "name": { "title": "Name", "description": "A name for this field.", "type": "string" }, "title": { "title": "Title", "description": "A human-readable title.", "type": "string", "examples": [ "{\n \"title\": \"My Package Title\"\n}\n" ] }, "description": { "title": "Description", "description": "A text description. Markdown is encouraged.", "type": "string", "examples": [ "{\n \"description\": \"# My Package description\\nAll about my package.\"\n}\n" ] }, "type": { "description": "The type keyword, which `MUST` be a value of `date`.", "enum": [ "date" ] }, "format": { "description": "The format keyword options for `date` are `default`, `any`, and `{PATTERN}`.", "context": "The following `format` options are supported:\n * **default**: An ISO8601 format string of YYYY-MM-DD.\n * **any**: Any parsable representation of a date. The implementing library can attempt to parse the datetime via a range of strategies.\n * **{PATTERN}**: The value can be parsed according to `{PATTERN}`, which `MUST` follow the date formatting syntax of C / Python [strftime](http://strftime.org/).", "default": "default" }, "constraints": { "title": "Constraints", "description": "The following constraints are supported for `date` fields.", "type": "object", "properties": { "required": { "type": "boolean", "description": "Indicates whether a property must have a value for each instance.", "context": "An empty string is considered to be a missing value." }, "unique": { "type": "boolean", "description": "When `true`, each value for the property `MUST` be unique." }, "enum": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string" } }, "minimum": { "type": "string" }, "maximum": { "type": "string" } } }, "rdfType": { "type": "string", "description": "The RDF type for this field." } }, "examples": [ "{\n \"name\": \"date_of_birth\",\n \"type\": \"date\"\n}\n", "{\n \"name\": \"date_of_birth\",\n \"type\": \"date\",\n \"constraints\": {\n \"minimum\": \"01-01-1900\"\n }\n}\n", "{\n \"name\": \"date_of_birth\",\n \"type\": \"date\",\n \"format\": \"MM-DD-YYYY\"\n}\n" ] }, { "type": "object", "title": "Time Field", "description": "The field contains temporal time values.", "required": [ "name", "type" ], "properties": { "name": { "title": "Name", "description": "A name for this field.", "type": "string" }, "title": { "title": "Title", "description": "A human-readable title.", "type": "string", "examples": [ "{\n \"title\": \"My Package Title\"\n}\n" ] }, "description": { "title": "Description", "description": "A text description. Markdown is encouraged.", "type": "string", "examples": [ "{\n \"description\": \"# My Package description\\nAll about my package.\"\n}\n" ] }, "type": { "description": "The type keyword, which `MUST` be a value of `time`.", "enum": [ "time" ] }, "format": { "description": "The format keyword options for `time` are `default`, `any`, and `{PATTERN}`.", "context": "The following `format` options are supported:\n * **default**: An ISO8601 format string for time.\n * **any**: Any parsable representation of a date. The implementing library can attempt to parse the datetime via a range of strategies.\n * **{PATTERN}**: The value can be parsed according to `{PATTERN}`, which `MUST` follow the date formatting syntax of C / Python [strftime](http://strftime.org/).", "default": "default" }, "constraints": { "title": "Constraints", "description": "The following constraints are supported for `time` fields.", "type": "object", "properties": { "required": { "type": "boolean", "description": "Indicates whether a property must have a value for each instance.", "context": "An empty string is considered to be a missing value." }, "unique": { "type": "boolean", "description": "When `true`, each value for the property `MUST` be unique." }, "enum": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string" } }, "minimum": { "type": "string" }, "maximum": { "type": "string" } } }, "rdfType": { "type": "string", "description": "The RDF type for this field." } }, "examples": [ "{\n \"name\": \"appointment_start\",\n \"type\": \"time\"\n}\n", "{\n \"name\": \"appointment_start\",\n \"type\": \"time\",\n \"format\": \"any\"\n}\n" ] }, { "type": "object", "title": "Date Time Field", "description": "The field contains temporal datetime values.", "required": [ "name", "type" ], "properties": { "name": { "title": "Name", "description": "A name for this field.", "type": "string" }, "title": { "title": "Title", "description": "A human-readable title.", "type": "string", "examples": [ "{\n \"title\": \"My Package Title\"\n}\n" ] }, "description": { "title": "Description", "description": "A text description. Markdown is encouraged.", "type": "string", "examples": [ "{\n \"description\": \"# My Package description\\nAll about my package.\"\n}\n" ] }, "type": { "description": "The type keyword, which `MUST` be a value of `datetime`.", "enum": [ "datetime" ] }, "format": { "description": "The format keyword options for `datetime` are `default`, `any`, and `{PATTERN}`.", "context": "The following `format` options are supported:\n * **default**: An ISO8601 format string for datetime.\n * **any**: Any parsable representation of a date. The implementing library can attempt to parse the datetime via a range of strategies.\n * **{PATTERN}**: The value can be parsed according to `{PATTERN}`, which `MUST` follow the date formatting syntax of C / Python [strftime](http://strftime.org/).", "default": "default" }, "constraints": { "title": "Constraints", "description": "The following constraints are supported for `datetime` fields.", "type": "object", "properties": { "required": { "type": "boolean", "description": "Indicates whether a property must have a value for each instance.", "context": "An empty string is considered to be a missing value." }, "unique": { "type": "boolean", "description": "When `true`, each value for the property `MUST` be unique." }, "enum": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "type": "string" } }, "minimum": { "type": "string" }, "maximum": { "type": "string" } } }, "rdfType": { "type": "string", "description": "The RDF type for this field." } }, "examples": [ "{\n \"name\": \"timestamp\",\n \"type\": \"datetime\"\n}\n", "{\n \"name\": \"timestamp\",\n \"type\": \"datetime\",\n \"format\": \"default\"\n}\n" ] }, { "type": "object", "title": "Year Field", "description": "A calendar year, being an integer with 4 digits. Equivalent to [gYear in XML Schema](https://www.w3.org/TR/xmlschema-2/#gYear)", "required": [ "name", "type" ], "properties": { "name": { "title": "Name", "description": "A name for this field.", "type": "string" }, "title": {