--- /dev/null
+image: fedora:31
+
+stages:
+ - build
+
+before_script:
+ - dnf install -y gcc gettext glib2-devel gobject-introspection-devel gtk-doc meson ninja-build redhat-rpm-config
+
+build-json-glib:
+ stage: build
+ script:
+ - meson --prefix /usr -Dman=true _build .
+ - cd _build
+ - ninja
+ - meson test
+ except:
+ - tags
+ artifacts:
+ when: on_failure
+ name: "json-glib-${CI_COMMIT_REF_NAME}"
+ paths:
+ - "${CI_PROJECT_DIR}/_build/meson-logs"
+
+dist-json-glib:
+ stage: build
+ only:
+ - tags
+ script:
+ - meson --prefix /usr --buildtype release -Dman=true -Ddocs=true _build .
+ - cd _build
+ - ninja dist
+ - ninja json-glib-doc
+ - tar -c -f "json-glib-docs-${CI_COMMIT_TAG}.tar.xz" -C docs html
+ artifacts:
+ paths:
+ - "${CI_PROJECT_DIR}/_build/json-glib-docs-${CI_COMMIT_TAG}.tar.xz"
+ - "${CI_PROJECT_DIR}/_build/meson-dist/json-glib-*.tar.xz"
• #46 - Document nullability of `json_from_string()` [Emmanuele Bassi]
• #45 - Properly detect multiple top-level statements [Emmanuele Bassi]
• #41, #22 - Fix library versions on Darwin [Tom Schoonjans]
+• Fix build reproducibility [!33, Alexander Kanavin]
+• #26 - Fix parsing of UTF-16 surrogate pairs [James Westman]
+• #56 - Ignore UTF-8 BOM [Jan-Michael Brummer]
Overview of changes for 1.4
==============================
+++ /dev/null
-
-
-
-Internet Engineering Task Force K. Zyp, Ed.
-Internet-Draft SitePen (USA)
-Intended status: Informational March 23, 2010
-Expires: September 24, 2010
-
-
- A JSON Media Type for Describing the Structure and Meaning of JSON
- Documents
- draft-zyp-json-schema-02
-
-Abstract
-
- JSON (JavaScript Object Notation) Schema defines the media type
- application/schema+json, a JSON based format for defining the
- structure of JSON data. JSON Schema provides a contract for what
- JSON data is required for a given application and how to interact
- with it. JSON Schema is intended to define validation,
- documentation, hyperlink navigation, and interaction control of JSON
- data.
-
-Status of This Memo
-
- This Internet-Draft is submitted to IETF in full conformance with the
- provisions of BCP 78 and BCP 79.
-
- Internet-Drafts are working documents of the Internet Engineering
- Task Force (IETF), its areas, and its working groups. Note that
- other groups may also distribute working documents as Internet-
- Drafts.
-
- Internet-Drafts are draft documents valid for a maximum of six months
- and may be updated, replaced, or obsoleted by other documents at any
- time. It is inappropriate to use Internet-Drafts as reference
- material or to cite them other than as "work in progress."
-
- The list of current Internet-Drafts can be accessed at
- http://www.ietf.org/ietf/1id-abstracts.txt.
-
- The list of Internet-Draft Shadow Directories can be accessed at
- http://www.ietf.org/shadow.html.
-
- This Internet-Draft will expire on September 24, 2010.
-
-Copyright Notice
-
- Copyright (c) 2010 IETF Trust and the persons identified as the
- document authors. All rights reserved.
-
-
-
-
-Zyp Expires September 24, 2010 [Page 1]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
- This document is subject to BCP 78 and the IETF Trust's Legal
- Provisions Relating to IETF Documents
- (http://trustee.ietf.org/license-info) in effect on the date of
- publication of this document. Please review these documents
- carefully, as they describe your rights and restrictions with respect
- to this document. Code Components extracted from this document must
- include Simplified BSD License text as described in Section 4.e of
- the Trust Legal Provisions and are provided without warranty as
- described in the BSD License.
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 4
- 2. Conventions . . . . . . . . . . . . . . . . . . . . . . . . . 4
- 3. Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
- 3.1. Terminology . . . . . . . . . . . . . . . . . . . . . . . 5
- 3.2. Design Considerations . . . . . . . . . . . . . . . . . . 6
- 4. Schema/Instance Association . . . . . . . . . . . . . . . . . 6
- 4.1. Self-Descriptive Schema . . . . . . . . . . . . . . . . . 7
- 5. Core Schema Definition . . . . . . . . . . . . . . . . . . . . 7
- 5.1. type . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
- 5.2. properties . . . . . . . . . . . . . . . . . . . . . . . . 8
- 5.3. items . . . . . . . . . . . . . . . . . . . . . . . . . . 9
- 5.4. optional . . . . . . . . . . . . . . . . . . . . . . . . . 9
- 5.5. additionalProperties . . . . . . . . . . . . . . . . . . . 9
- 5.6. requires . . . . . . . . . . . . . . . . . . . . . . . . . 9
- 5.7. minimum . . . . . . . . . . . . . . . . . . . . . . . . . 10
- 5.8. maximum . . . . . . . . . . . . . . . . . . . . . . . . . 10
- 5.9. minimumCanEqual . . . . . . . . . . . . . . . . . . . . . 10
- 5.10. maximumCanEqual . . . . . . . . . . . . . . . . . . . . . 10
- 5.11. minItems . . . . . . . . . . . . . . . . . . . . . . . . . 10
- 5.12. maxItems . . . . . . . . . . . . . . . . . . . . . . . . . 10
- 5.13. uniqueItems . . . . . . . . . . . . . . . . . . . . . . . 10
- 5.14. pattern . . . . . . . . . . . . . . . . . . . . . . . . . 10
- 5.15. maxLength . . . . . . . . . . . . . . . . . . . . . . . . 11
- 5.16. minLength . . . . . . . . . . . . . . . . . . . . . . . . 11
- 5.17. enum . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
- 5.18. title . . . . . . . . . . . . . . . . . . . . . . . . . . 11
- 5.19. description . . . . . . . . . . . . . . . . . . . . . . . 11
- 5.20. format . . . . . . . . . . . . . . . . . . . . . . . . . . 11
- 5.21. contentEncoding . . . . . . . . . . . . . . . . . . . . . 12
- 5.22. default . . . . . . . . . . . . . . . . . . . . . . . . . 13
- 5.23. divisibleBy . . . . . . . . . . . . . . . . . . . . . . . 13
- 5.24. disallow . . . . . . . . . . . . . . . . . . . . . . . . . 13
- 5.25. extends . . . . . . . . . . . . . . . . . . . . . . . . . 13
- 6. Hyper Schema . . . . . . . . . . . . . . . . . . . . . . . . . 13
- 6.1. links . . . . . . . . . . . . . . . . . . . . . . . . . . 13
- 6.1.1. Link Description Object . . . . . . . . . . . . . . . 14
-
-
-
-Zyp Expires September 24, 2010 [Page 2]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
- 6.2. fragmentResolution . . . . . . . . . . . . . . . . . . . . 18
- 6.2.1. dot-delimited fragment resolution . . . . . . . . . . 18
- 6.2.2. slash-delimited fragment resolution . . . . . . . . . 19
- 6.3. root . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
- 6.4. readonly . . . . . . . . . . . . . . . . . . . . . . . . . 19
- 6.5. pathStart . . . . . . . . . . . . . . . . . . . . . . . . 20
- 6.6. mediaType . . . . . . . . . . . . . . . . . . . . . . . . 20
- 6.7. alternate . . . . . . . . . . . . . . . . . . . . . . . . 20
- 7. Security Considerations . . . . . . . . . . . . . . . . . . . 20
- 8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 21
- 8.1. Registry of Link Relations . . . . . . . . . . . . . . . . 21
- 9. References . . . . . . . . . . . . . . . . . . . . . . . . . . 22
- 9.1. Normative References . . . . . . . . . . . . . . . . . . . 22
- 9.2. Informative References . . . . . . . . . . . . . . . . . . 22
- Appendix A. Change Log . . . . . . . . . . . . . . . . . . . . . 23
- Appendix B. Open Issues . . . . . . . . . . . . . . . . . . . . . 24
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Zyp Expires September 24, 2010 [Page 3]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
-1. Introduction
-
- JSON (JavaScript Object Notation) Schema is a JSON media type for
- defining the structure of JSON data. JSON Schema provides a contract
- for what JSON data is required for a given application and how to
- interact with it. JSON Schema is intended to define validation,
- documentation, hyperlink navigation, and interaction control of JSON
- data.
-
-2. Conventions
-
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
- document are to be interpreted as described in RFC 2119.
-
-3. Overview
-
- JSON Schema defines the media type application/schema+json for
- describing the structure of other JSON documents. JSON Schema is
- JSON-based and includes facilities for describing the structure of
- JSON documents in terms of allowable values, descriptions, and
- interpreting relations with other resources.
-
- JSON Schema format is organized into several separate definitions.
- The first definition is the core schema specification. This
- definition is primary concerned with describing a JSON structure and
- specifying valid elements in the structure. The second definition is
- the Hyper Schema specification which is intended define elements in a
- structure that can be interpreted as hyperlinks. Hyper Schema builds
- on JSON Schema to describe the hyperlink structure of other JSON
- documents. This allows user agents to be able to successfully
- navigate JSON documents based on their schemas.
-
- Cumulatively JSON Schema acts as a meta-document that can be used to
- define the required type and constraints on property values, as well
- as define the meaning of the property values for the purpose of
- describing a resource and determining hyperlinks within the
- representation.
-
- An example JSON Schema that describes products might look like:
-
-
-
-
-
-
-
-
-
-
-
-Zyp Expires September 24, 2010 [Page 4]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
- {
- "name":"Product",
- "properties":{
- "id":{
- "type":"number",
- "description":"Product identifier"
- },
- "name":{
- "description":"Name of the product",
- "type":"string"
- },
- "price":{
- "type": "number",
- "minimum":0
- },
- "tags":{
- "optional":true,
- "type":"array",
- "items":{
- "type":"string"
- }
- }
- },
- "links":[
- {
- "rel":"full",
- "href":"{id}"
- },
- {
- "rel":"comments",
- "href":"comments/?id={id}"
- }
- ]
- }
-
- This schema defines the properties of the instance JSON documents and
- their required properties (id, name, and price) as well as an
- optional property (tags). This also defines the link relations of
- the instance JSON documents.
-
-3.1. Terminology
-
- For this specification, a schema will be used to denote a JSON Schema
- definition, and an instance refers to the JSON object or array that
- the schema will be describing and validating
-
-
-
-
-
-
-Zyp Expires September 24, 2010 [Page 5]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
-3.2. Design Considerations
-
- The JSON Schema media type does not attempt to dictate the structure
- of JSON representations that contain data, but rather provides a
- separate format for flexibly communicating how a JSON representation
- should be interpreted and validated, such that user agents can
- properly understand acceptable structures and extrapolate hyperlink
- information with the JSON document. It is acknowledged that JSON
- documents come in a variety of structures, and JSON is unique in that
- the structure of stored data structures often prescribes a non-
- ambiguous definite JSON representation. Attempting to force a
- specific structure is generally not viable, and therefore JSON Schema
- allows for great flexibility in the structure of JSON data that it
- describes.
-
- This specification is protocol agnostic. The underlying protocol
- (such as HTTP) should sufficiently define the semantics of the
- client-server interface, the retrieval of resource representations
- linked to by JSON representations, and modification of those
- resources. The goal of this format is to sufficiently describe JSON
- structures such that one can utilize existing information available
- in existing JSON representations from a large variety of services
- that leverage a representational state transfer architecture using
- existing protocols.
-
-4. Schema/Instance Association
-
- JSON Schema instances are correlated to their schema by the
- "describedby" relation, where the schema is defined to be the target
- of the relation. Instance representations may be of the application/
- json media type or any other subtype. Consequently, dictating how an
- instance representation should specify the relation to the schema is
- beyond the normative scope of this document (since this document
- specifically defines the JSON Schema media type, and no other), but
- it is recommended that instances specify their schema so that user
- agents can interpret the instance representation and messages may
- retain the self-descriptive characteristic, avoiding the need for
- out-of-band information about instance data. Two approaches are
- recommended for declaring the relation to the schema that describes
- the meaning of a JSON instance's (or collection of instances)
- structure. A MIME type parameter named "profile" or a Link header
- with a relation of "describedby" SHOULD be used:
-
-
- Content-Type: application/json;
- profile=http://json.com/my-hyper-schema
-
- or if the content is being transferred by a protocol (such as HTTP)
-
-
-
-Zyp Expires September 24, 2010 [Page 6]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
- that provides headers, a Link header can be used:
-
-
- Link: <http://json.com/my-hyper-schema>; rel="describedby"
-
- Instances MAY specify multiple schemas, to indicate all the schemas
- that are applicable to the data. The instance data may have multiple
- schemas that it is defined by (the instance data should be valid for
- those schemas). Or if the document is a collection of instances, the
- collection may contain instances from different schemas. When
- collections contain heterogeneous instances, the pathStart attribute
- MAY be specified in the schema to disambiguate which schema should be
- applied for each item in the collection.
-
-4.1. Self-Descriptive Schema
-
- JSON Schemas are themselves instances for the schema schemas. A
- self-describing JSON Schema for the core JSON Schema can be found at
- http://json-schema.org/schema and the hyper schema self-description
- can be found at: http://json-schema.org/hyper-schema. All schemas
- used within a protocol with media type definitions SHOULD include a
- MIME parameter that refers to the self-descriptive hyper schema or
- another schema that extends this hyper schema:
-
-
- Content-Type: application/json;
- profile=http://www.json-schema.org/hyper-schema
-
-5. Core Schema Definition
-
- A JSON Schema is a JSON Object that defines various attributes of the
- instance and defines it's usage and valid values. A JSON Schema is a
- JSON Object with schema attribute properties. The following is the
- grammar of a JSON Schema:
-
- And an example JSON Schema definition could look like:
-
-
- {"description":"A person",
- "type":"object",
-
- "properties":
- {"name": {"type":"string"},
- "age" : {"type":"integer",
- "maximum":125}}
- }
-
- A JSON Schema object may have any of the following properties, called
-
-
-
-Zyp Expires September 24, 2010 [Page 7]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
- schema attributes (all attributes are optional):
-
-5.1. type
-
- Union type definition - An array with two or more items which
- indicates a union of type definitions. Each item in the array may
- be a simple type definition or a schema. The instance value is
- valid if it is of the same type as one the type definitions in the
- array or if it is valid by one of the schemas in the array. For
- example to indicate that a string or number is a valid: {"type":
- ["string","number"]}
-
- Simple type definition - A string indicating a primitive or simple
- type. The following are acceptable strings:
-
- string - Value must be a string.
-
- number - Value must be a number, floating point numbers are
- allowed.
-
- integer - Value must be an integer, no floating point numbers
- are allowed. This is a subset of the number type.
-
- boolean - Value must be a boolean.
-
- object - Value must be an object.
-
- array - Value must be an array.
-
- null - Value must be null. Note this is mainly for purpose of
- being able use union types to define nullability.
-
- any - Value may be of any type including null. If the property
- is not defined or is not in this list, than any type of value
- is acceptable. Other type values may be used for custom
- purposes, but minimal validators of the specification
- implementation can allow any instance value on unknown type
- values.
-
-5.2. properties
-
- This should be an object type definition, which is an object with
- property definitions that correspond to instance object properties.
- When the instance value is an object, the property values of the
- instance object must conform to the property definitions in this
- object. In this object, each property definition's value should be a
- schema, and the property's name should be the name of the instance
- property that it defines.
-
-
-
-Zyp Expires September 24, 2010 [Page 8]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
-5.3. items
-
- This should be a schema or an array of schemas. When this is an
- object/schema and the instance value is an array, all the items in
- the array must conform to this schema. When this is an array of
- schemas and the instance value is an array, each position in the
- instance array must conform to the schema in the corresponding
- position for this array. This called tuple typing. When tuple
- typing is used, additional items are allowed, disallowed, or
- constrained by the additionalProperties attribute using the same
- rules as extra properties for objects. The default value is an empty
- schema which allows any value for items in the instance array.
-
-5.4. optional
-
- This indicates that the instance property in the instance object is
- optional. This is false by default.
-
-5.5. additionalProperties
-
- This provides a default property definition for all properties that
- are not explicitly defined in an object type definition. The value
- must be a schema. If false is provided, no additional properties are
- allowed, and the schema can not be extended. The default value is an
- empty schema which allows any value for additional properties.
-
-5.6. requires
-
- This indicates that if this property is present in the containing
- instance object, the property given by requires attribute must also
- be present in the containing instance object. The value of this
- property may be a string, indicating the require property name. Or
- the value may be a schema, in which case the containing instance must
- be valid by the schema if the property is present. For example if a
- object type definition is defined:
-
-
- {
- "state":
- {
- "optional":true
- },
- "town":
- {
- "requires":"state",
- "optional":true
- }
- }
-
-
-
-Zyp Expires September 24, 2010 [Page 9]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
- An instance must include a state property if a town property is
- included. If a town property is not included, the state property is
- optional.
-
-5.7. minimum
-
- This indicates the minimum value for the instance property when the
- type of the instance value is a number.
-
-5.8. maximum
-
- This indicates the minimum value for the instance property when the
- type of the instance value is a number.
-
-5.9. minimumCanEqual
-
- If the minimum is defined, this indicates whether or not the instance
- property value can equal the minimum.
-
-5.10. maximumCanEqual
-
- If the maximum is defined, this indicates whether or not the instance
- property value can equal the maximum.
-
-5.11. minItems
-
- This indicates the minimum number of values in an array when an array
- is the instance value.
-
-5.12. maxItems
-
- This indicates the maximum number of values in an array when an array
- is the instance value.
-
-5.13. uniqueItems
-
- This indicates that all the items in an array must be unique (no two
- identical values) within that array when an array is the instance
- value.
-
-5.14. pattern
-
- When the instance value is a string, this provides a regular
- expression that a instance string value should match in order to be
- valid. Regular expressions should follow the regular expression
- specification from ECMA 262/Perl 5
-
-
-
-
-
-Zyp Expires September 24, 2010 [Page 10]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
-5.15. maxLength
-
- When the instance value is a string, this indicates maximum length of
- the string.
-
-5.16. minLength
-
- When the instance value is a string, this indicates minimum length of
- the string.
-
-5.17. enum
-
- This provides an enumeration of possible values that are valid for
- the instance property. This should be an array, and each item in the
- array represents a possible value for the instance value. If "enum"
- is included, the instance value must be one of the values in enum
- array in order for the schema to be valid.
-
-5.18. title
-
- This provides a short description of the instance property. The
- value must be a string.
-
-5.19. description
-
- This provides a full description of the of purpose the instance
- property. The value must be a string.
-
-5.20. format
-
- This property indicates the type of data, content type, or
- microformat to be expected in the instance property values. A format
- attribute may be one of the values listed below, and if so, should
- adhere to the semantics describing for the format. A format should
- only be used give meaning to primitive types (string, integer,
- number, or boolean). Validators are not required to validate that
- the instance values conform to a format. The following formats are
- defined:
-
- Any valid MIME media type may be used as a format value, in which
- case the instance property value must be a string, representing
- the contents of the MIME file.
-
- date-time - This should be a date in ISO 8601 format of YYYY-MM-
- DDThh:mm:ssZ in UTC time. This is the recommended form of date/
- timestamp.
-
-
-
-
-
-Zyp Expires September 24, 2010 [Page 11]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
- date - This should be a date in the format of YYYY-MM-DD. It is
- recommended that you use the "date-time" format instead of "date"
- unless you need to transfer only the date part.
-
- time - This should be a time in the format of hh:mm:ss. It is
- recommended that you use the "date-time" format instead of "time"
- unless you need to transfer only the time part.
-
- utc-millisec - This should be the difference, measured in
- milliseconds, between the specified time and midnight, January 1,
- 1970 UTC. The value should be a number (integer or float).
-
- regex - A regular expression.
-
- color - This is a CSS color (like "#FF0000" or "red").
-
- style - This is a CSS style definition (like "color: red;
- background-color:#FFF").
-
- phone - This should be a phone number (format may follow E.123).
-
- uri - This value should be a URI..
-
- email - This should be an email address.
-
- ip-address - This should be an ip version 4 address.
-
- ipv6 - This should be an ip version 6 address.
-
- street-address - This should be a street address.
-
- locality - This should be a city or town.
-
- region - This should be a region (a state in the US, province in
- Canada, etc.)
-
- postal-code - This should be a postal code (AKA zip code).
-
- country - This should be the name of a country.
-
- Additional custom formats may be defined with a URL to a
- definition of the format.
-
-5.21. contentEncoding
-
- If the instance property value is a string, this indicates that the
- string should be interpreted as binary data and decoded using the
- encoding named by this schema property. RFC 2045, Sec 6.1 lists
-
-
-
-Zyp Expires September 24, 2010 [Page 12]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
- possible values.
-
-5.22. default
-
- This indicates the default for the instance property.
-
-5.23. divisibleBy
-
- This indicates that the instance property value must be divisible by
- the given schema value when the instance property value is a number.
-
-5.24. disallow
-
- This attribute may take the same values as the "type" attribute,
- however if the instance matches the type or if this value is an array
- and the instance matches any type or schema in the array, than this
- instance is not valid.
-
-5.25. extends
-
- The value of this property should be another schema which will
- provide a base schema which the current schema will inherit from.
- The inheritance rules are such that any instance that is valid
- according to the current schema must be valid according to the
- referenced schema. This may also be an array, in which case, the
- instance must be valid for all the schemas in the array.
-
-6. Hyper Schema
-
- This section defines hypermedia definitions of JSON schema. The
- following attributes are specified in addition to those attributes
- that already provided by JSON schema with the specific purpose of
- informing user agents of relations between resources based on JSON
- data. Just as with JSON schema attributes, all the attributes in
- hyper-schema are optional. Therefore an empty object is a valid
- (non-informative) schema, and essentially describes plain JSON (no
- constraints on the structures). Addition of attributes provides
- additive information for user agents.
-
-6.1. links
-
- The value of the links property should be an array, where each item
- in the array is a link description object which describes the link
- relations of the instances.
-
-
-
-
-
-
-
-Zyp Expires September 24, 2010 [Page 13]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
-6.1.1. Link Description Object
-
- A link description object is used to describe the link relations. In
- the context of a schema, it defines the link relations of the
- instances of the schema, and can be parameterized by the instance
- values. The link description format can be used on its own in
- regular (non-schema documents), and use of this format can be
- declared by referencing the normative link description schema as the
- the schema for the data structure that uses the links. The URI of
- the normative link description schema is:
- http://json-schema.org/links.
-
-6.1.1.1. href
-
- The value of the "href" link description property indicates the
- target URI of the related resource. The value of the instance
- property should be resolved as a URI-Reference per [RFC3986] and may
- be a relative URI. The base URI to be used for relative resolution
- should be the URI used to retrieve the instance object (not the
- schema) when used in the context of a schema. Also, the URI may be
- parametrized by the property values of the instance object.
-
- Instance property values should be substituted into the URIs where
- matching braces ('{', '}') are found surrounding zero or more
- characters, creating an expanded URI. Instance property value
- substitutions are resolved by using the text between the braces to
- denote the property name from the instance to get the value to
- substitute. For example, if an href value is defined:
-
-
- http://somesite.com/{id}
-
- Then it would be resolved by replace the value of the "id" property
- value from the instance object. If the value of the "id" property
- was "45", the expanded URI would be:
-
-
- http://somesite.com/45
-
- If matching braces are found with the string "-this" (no quotes)
- between the braces, than the actual instance value should be used to
- replace the braces, rather than a property value. This should only
- be used in situations where the instance is a scalar (string,
- boolean, or number), and not for objects or arrays.
-
-
-
-
-
-
-
-Zyp Expires September 24, 2010 [Page 14]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
-6.1.1.2. rel
-
- The value of the "rel" property indicates the name of the relation to
- the target resource. The relation to the target should be
- interpreted as specifically from the instance object that the schema
- (or sub-schema) applies to, not just the top level resource that
- contains the object within its hierarchy. If a resource JSON
- representation contains a sub object with a property interpreted as a
- link, that sub-object holds the relation with the target. A relation
- to target from the top level resource must be indicated with the
- schema describing the top level JSON representation.
-
- Relationship definitions SHOULD NOT be media type dependent, and
- users are encouraged to utilize existing accepted relation
- definitions, including those in existing relation registries (see
- &rfc4287). However, we define these relation here for clarity of
- normative interpretation within the context of JSON hyper schema
- defined relations:
-
- self - If the relation value is "self", when this property is
- encountered in the instance object, the object represents a
- resource and the instance object is treated as a full
- representation of the target resource identified by the specified
- URI.
-
- full - This indicates that the target of the link is the full
- representation for the instance object. The object that contains
- this link may not be the full representation.
-
- describedby - This indicates the target of the link is the schema
- for the instance object. This may be used to specifically denote
- the schemas of objects within a JSON object hierarchy,
- facilitating polymorphic type data structures.
-
- The following relations are applicable for schemas (the schema as
- the "from" resource in the relation).
-
- instances - This indicates the target resource that represents
- collection of instances of a schema.
-
- create - This indicates a target to use for creating new instances
- of a schema. This link definition SHOULD be a submission link
- with a non-safe method (like POST).
-
- For example, if a schema is defined:
-
-
-
-
-
-
-Zyp Expires September 24, 2010 [Page 15]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
- {
- "links": [
- {
- "rel": "self"
- "href": "{id}"
- },
- {
- "rel": "up"
- "href": "{upId}"
- },
- {
- "rel": "children"
- "href": "?upId={id}"
- }
- ]
- }
-
- And if a collection of instance resource's JSON representation was
- retrieved:
-
-
- GET /Resource/
-
- [
- {
- "id": "thing",
- "upId": "parent"
- },
- {
- "id": "thing2",
- "upId": "parent"
- }
- ]
-
- This would indicate that for the first item in the collection, it's
- own (self) URI would resolve to "/Resource/thing" and the first
- item's "up" relation should be resolved to the resource at
- "/Resource/parent". The "children" collection would be located at
- "/Resource/?upId=thing".
-
-6.1.1.2.1. targetSchema
-
- This property value can be a schema that defines the expected
- structure of the JSON representation of the target of the link.
-
-
-
-
-
-
-
-Zyp Expires September 24, 2010 [Page 16]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
-6.1.1.3. Submission Link Properties
-
- The following properties also apply to link definition objects, and
- provide functionality analogous to HTML forms, in providing a means
- for submitting extra (often user supplied) information to send to a
- server.
-
-6.1.1.3.1. method
-
- This indicates which method should be used to access the target
- resource. In an HTTP environment, this would be "GET" or "POST"
- (other HTTP methods such as "PUT" and "DELETE" have semantics that
- are clearly implied by accessed resources, and do not need to be
- defined here). This defaults to "GET".
-
-6.1.1.3.2. enctype
-
- If present, this property indicates a query media type format that
- the server supports for querying or posting to the collection of
- instances at the target resource. The query can be suffixed to the
- target URI to query the collection with property-based constraints on
- the resources that SHOULD be returned from the server or used to post
- data to the resource (depending on the method). For example, with
- the following schema:
-
-
- {
- "links":[
- {
- "enctype": "application/x-www-form-urlencoded",
- "method": "GET",
- "href": "/Product/",
- "properties":{
- "name":{"description":"name of the product"}
- }
- }
- ]
- }
-
- This indicates that the client can query the server for instances
- that have a specific name:
-
-
- /Product/?name=Slinky
-
- If no enctype or method is specified, only the single URI specified
- by the href property is defined. If the method is POST, application/
- json is the default media type.
-
-
-
-Zyp Expires September 24, 2010 [Page 17]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
-6.1.1.3.3. properties
-
- This is inherited from the base JSON schema definition, and can
- follow the same structure, but its meaning should be used to define
- the acceptable property names and values for the action (whether it
- be for the GET query or POST body). If properties are omitted, and
- this form is the child of a schema, the properties from the parent
- schema should be used as the basis for the form action.
-
-6.2. fragmentResolution
-
- This property indicates the fragment resolution protocol to use for
- resolving fragment identifiers in URIs within the instance
- representations. This applies to the instance object URIs and all
- children of the instance object's URIs. The default fragment
- resolution protocol is "slash-delimited", which is defined below.
- Other fragment resolution protocols may be used, but are not defined
- in this document.
-
- The fragment identifier is based on RFC 2396 Sec 5, and defines the
- mechanism for resolving references to entities within a document.
-
-6.2.1. dot-delimited fragment resolution
-
- With the dot-delimited fragment resolution protocol, the fragment
- identifier is interpreted as a series of property reference tokens
- that are delimited by the "." character (\x2E). Each property
- reference token is a series of any legal URI component characters
- except the "." character. Each property reference token should be
- interpreted, starting from the beginning of the fragment identifier,
- as a path reference in the target JSON structure. The final target
- value of the fragment can be determined by starting with the root of
- the JSON structure from the representation of the resource identified
- by the pre-fragment URI. If the target is a JSON object, than the
- new target is the value of the property with the name identified by
- the next property reference token in the fragment. If the target is
- a JSON array, than the target is determined by finding the item in
- array the array with the index defined by the next property reference
- token (which MUST be a number). The target is successively updated
- for each property reference token, until the entire fragment has been
- traversed.
-
- Property names SHOULD be URI-encoded. In particular, any "." in a
- property name MUST be encoded to avoid being interpreted as a
- property delimiter.
-
- For example, for the following JSON representation:
-
-
-
-
-Zyp Expires September 24, 2010 [Page 18]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
- {
- "foo":{
- "anArray":[
- {"prop":44}
- ],
- "another prop":{
- "baz":"A string"
- }
- }
- }
-
- The following fragment identifiers would be resolved:
-
-
- fragment identifier resolution
- ------------------- ----------
- # self, the root of the resource itself
- #foo the object referred to by the foo property
- #foo.another prop the object referred to by the "another prop"
- property of the object referred to by the
- "foo" property
- #foo.another prop.baz the string referred to by the value of "baz"
- property of the "another prop" property of
- the object referred to by the "foo" property
- #foo.anArray.0 the first object in the "anArray" array
-
-6.2.2. slash-delimited fragment resolution
-
- The slash-delimited fragment resolution protocol is exactly the same
- as dot-delimited fragment resolution protocol except that the "/"
- character (\x2F) is used as the delimiter between property names
- (instead of ".").
-
-6.3. root
-
- This attribute indicates that the value of the instance property
- value SHOULD be treated as the root or the body of the representation
- for the purposes of user agent interaction and fragment resolution
- (all other properties of the instance objects are can be regarded as
- meta-data descriptions for the data).
-
-6.4. readonly
-
- This indicates that the instance property should not be changed.
- Attempts by a user agent to modify the value of this property are
- expected to be rejected by a server.
-
-
-
-
-
-Zyp Expires September 24, 2010 [Page 19]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
-6.5. pathStart
-
- This property value is a URI-Reference that indicates the URI that
- all the URIs for the instances of the schema should start with. When
- multiple schemas have been referenced for an instance, the user agent
- can determine if this schema is applicable for a particular instance
- by determining if URI of the instance begins with the pathStart's
- referenced URI. pathStart MUST be resolved as per [RFC3986] section
- 5. If the URI of the instance does not start with URI indicated by
- pathStart, or if another schema specifies a starting URI that is
- longer and also matches the instance, this schema should not be
- applied to the instance. Any schema that does not have a pathStart
- attribute should be considered applicable to all the instances for
- which it is referenced.
-
-6.6. mediaType
-
- This indicates the media type of the instance representations that
- this schema is defining.
-
-6.7. alternate
-
- This is an array of JSON schema definitions that define any other
- schemas for alternate JSON-based representations of the instance
- resources.
-
-7. Security Considerations
-
- This specification is a sub-type of the JSON format, and consequently
- the security considerations are generally the same as RFC 4627.
- However, an additional issue is that when link relation of "self" is
- used to denote a full representation of an object, the user agent
- SHOULD NOT consider the representation to be the authoritative
- representation of the resource denoted by the target URI if the
- target URI is not equivalent to or a sub-path of the the URI used to
- request the resource representation which contains the target URI
- with the "self" link. For example, if a hyper schema was defined:
-
-
- {
- "links":[
- {
- "rel":"self",
- "href":"{id}"
- }
- ]
- }
-
-
-
-
-Zyp Expires September 24, 2010 [Page 20]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
- And a resource was requested from somesite.com:
-
-
- GET /foo/
-
- With a response of:
-
-
-Content-Type: application/json; profile=/schema-for-this-data
-[
- {"id":"bar", "name":"This representation can be safely treated \
- as authoritative "},
- {"id":"/baz", "name":"This representation should not be treated as \
- authoritative the user agent should make request the resource\
- from "/baz" to ensure it has the authoritative representation"},
- {"id":"http://othersite.com/something", "name":"This representation\
- should also not be treated as authoritative and the target\
- resource representation should be retrieved for the\
- authoritative representation"}
-]
-
-8. IANA Considerations
-
- The proposed MIME media type for JSON Schema is application/
- schema+json
-
- Type name: application
-
- Subtype name: schema+json
-
- Required parameters: profile
-
- The value of the profile parameter should be a URI (relative or
- absolute) that refers to the schema used to define the structure of
- this structure (the meta-schema). Normally the value would be
- http://json-schema.org/hyper-schema, but it is allowable to use other
- schemas that extend the hyper schema's meta- schema.
-
- Optional parameters: pretty
-
- The value of the pretty parameter may be true or false to indicate if
- additional whitespace has been included to make the JSON
- representation easier to read.
-
-8.1. Registry of Link Relations
-
- This registry is maintained by IANA per RFC 4287 and this
- specification adds three values: "full", "create", "instances". New
-
-
-
-Zyp Expires September 24, 2010 [Page 21]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
- assignments are subject to IESG Approval, as outlined in [RFC5226].
- Requests should be made by email to IANA, which will then forward the
- request to the IESG, requesting approval.
-
-9. References
-
-9.1. Normative References
-
- [RFC3986] Berners-Lee, T., Fielding, R., and
- L. Masinter, "Uniform Resource
- Identifier (URI): Generic Syntax",
- STD 66, RFC 3986, January 2005.
-
- [RFC2119] Bradner, S., "Key words for use in
- RFCs to Indicate Requirement
- Levels", BCP 14, RFC 2119,
- March 1997.
-
- [RFC4287] Nottingham, M., Ed. and R. Sayre,
- Ed., "The Atom Syndication
- Format", RFC 4287, December 2005.
-
- [RFC3339] Klyne, G., Ed. and C. Newman,
- "Date and Time on the Internet:
- Timestamps", RFC 3339, July 2002.
-
- [RFC2045] Freed, N. and N. Borenstein,
- "Multipurpose Internet Mail
- Extensions (MIME) Part One: Format
- of Internet Message Bodies",
- RFC 2045, November 1996.
-
-9.2. Informative References
-
- [RFC4627] Crockford, D., "The application/
- json Media Type for JavaScript
- Object Notation (JSON)", RFC 4627,
- July 2006.
-
- [RFC2616] Fielding, R., Gettys, J., Mogul,
- J., Frystyk, H., Masinter, L.,
- Leach, P., and T. Berners-Lee,
- "Hypertext Transfer Protocol --
- HTTP/1.1", RFC 2616, June 1999.
-
- [RFC5226] Narten, T. and H. Alvestrand,
- "Guidelines for Writing an IANA
- Considerations Section in RFCs",
-
-
-
-Zyp Expires September 24, 2010 [Page 22]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
- BCP 26, RFC 5226, May 2008.
-
- [I-D.hammer-discovery] Hammer-Lahav, E., "LRDD: Link-
- based Resource Descriptor
- Discovery",
- draft-hammer-discovery-04 (work in
- progress), March 2010.
-
- [I-D.gregorio-uritemplate] Gregorio, J., Fielding, R.,
- Hadley, M., and M. Nottingham,
- "URI Template",
- draft-gregorio-uritemplate-04
- (work in progress), March 2010.
-
- [I-D.nottingham-http-link-header] Nottingham, M., "Web Linking", dra
- ft-nottingham-http-link-header-08
- (work in progress), March 2010.
-
- [W3C.REC-html401-19991224] Hors, A., Jacobs, I., and D.
- Raggett, "HTML 4.01
- Specification", World Wide Web
- Consortium Recommendation REC-
- html401-19991224, December 1999, <
- http://www.w3.org/TR/1999/
- REC-html401-19991224>.
-
-Appendix A. Change Log
-
- -02
-
- o Replaced maxDecimal attribute with divisibleBy attribute
-
- o Added slash-delimited fragment resolution protocol and made it the
- default.
-
- o Added language about using links outside of schemas by referencing
- it's normative URI.
-
- o Added uniqueItems attribute
-
- o Added targetSchema attribute to link description object
-
- -01
-
- o Fixed category and updates from template
-
- -00
-
-
-
-
-Zyp Expires September 24, 2010 [Page 23]
-\f
-Internet-Draft JSON Schema Media Type March 2010
-
-
- o Initial draft
-
-Appendix B. Open Issues
-
- Should we give a preference to MIME headers over Link headers (or
- only use one)?
-
- Should we use "profile" as the media type parameter instead?
-
- Should "root" be a MIME parameter instead of a schema attribute?
-
- Should "format" be renamed to "mediaType" or "contentType" to reflect
- the usage MIME media types that are allowed.
-
- I still do not like how dates are handled.
-
- Should "slash-delimited" or "dot-delimited" be the default fragment
- resolution protocol?
-
-Author's Address
-
- Kris Zyp (editor)
- SitePen (USA)
- 530 Lytton Avenue
- Palo Alto, CA 94301
- USA
-
- Phone: +1 650 968 8787
- EMail: kris@sitepen.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Zyp Expires September 24, 2010 [Page 24]
-\f
-
+++ /dev/null
-
-
-
-
-
-
-Network Working Group D. Crockford
-Request for Comments: 4627 JSON.org
-Category: Informational July 2006
-
-
- The application/json Media Type for JavaScript Object Notation (JSON)
-
-Status of This Memo
-
- This memo provides information for the Internet community. It does
- not specify an Internet standard of any kind. Distribution of this
- memo is unlimited.
-
-Copyright Notice
-
- Copyright (C) The Internet Society (2006).
-
-Abstract
-
- JavaScript Object Notation (JSON) is a lightweight, text-based,
- language-independent data interchange format. It was derived from
- the ECMAScript Programming Language Standard. JSON defines a small
- set of formatting rules for the portable representation of structured
- data.
-
-1. Introduction
-
- JavaScript Object Notation (JSON) is a text format for the
- serialization of structured data. It is derived from the object
- literals of JavaScript, as defined in the ECMAScript Programming
- Language Standard, Third Edition [ECMA].
-
- JSON can represent four primitive types (strings, numbers, booleans,
- and null) and two structured types (objects and arrays).
-
- A string is a sequence of zero or more Unicode characters [UNICODE].
-
- An object is an unordered collection of zero or more name/value
- pairs, where a name is a string and a value is a string, number,
- boolean, null, object, or array.
-
- An array is an ordered sequence of zero or more values.
-
- The terms "object" and "array" come from the conventions of
- JavaScript.
-
- JSON's design goals were for it to be minimal, portable, textual, and
- a subset of JavaScript.
-
-
-
-Crockford Informational [Page 1]
-\f
-RFC 4627 JSON July 2006
-
-
-1.1. Conventions Used in This Document
-
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
- document are to be interpreted as described in [RFC2119].
-
- The grammatical rules in this document are to be interpreted as
- described in [RFC4234].
-
-2. JSON Grammar
-
- A JSON text is a sequence of tokens. The set of tokens includes six
- structural characters, strings, numbers, and three literal names.
-
- A JSON text is a serialized object or array.
-
- JSON-text = object / array
-
- These are the six structural characters:
-
- begin-array = ws %x5B ws ; [ left square bracket
-
- begin-object = ws %x7B ws ; { left curly bracket
-
- end-array = ws %x5D ws ; ] right square bracket
-
- end-object = ws %x7D ws ; } right curly bracket
-
- name-separator = ws %x3A ws ; : colon
-
- value-separator = ws %x2C ws ; , comma
-
- Insignificant whitespace is allowed before or after any of the six
- structural characters.
-
- ws = *(
- %x20 / ; Space
- %x09 / ; Horizontal tab
- %x0A / ; Line feed or New line
- %x0D ; Carriage return
- )
-
-2.1. Values
-
- A JSON value MUST be an object, array, number, or string, or one of
- the following three literal names:
-
- false null true
-
-
-
-Crockford Informational [Page 2]
-\f
-RFC 4627 JSON July 2006
-
-
- The literal names MUST be lowercase. No other literal names are
- allowed.
-
- value = false / null / true / object / array / number / string
-
- false = %x66.61.6c.73.65 ; false
-
- null = %x6e.75.6c.6c ; null
-
- true = %x74.72.75.65 ; true
-
-2.2. Objects
-
- An object structure is represented as a pair of curly brackets
- surrounding zero or more name/value pairs (or members). A name is a
- string. A single colon comes after each name, separating the name
- from the value. A single comma separates a value from a following
- name. The names within an object SHOULD be unique.
-
- object = begin-object [ member *( value-separator member ) ]
- end-object
-
- member = string name-separator value
-
-2.3. Arrays
-
- An array structure is represented as square brackets surrounding zero
- or more values (or elements). Elements are separated by commas.
-
- array = begin-array [ value *( value-separator value ) ] end-array
-
-2.4. Numbers
-
- The representation of numbers is similar to that used in most
- programming languages. A number contains an integer component that
- may be prefixed with an optional minus sign, which may be followed by
- a fraction part and/or an exponent part.
-
- Octal and hex forms are not allowed. Leading zeros are not allowed.
-
- A fraction part is a decimal point followed by one or more digits.
-
- An exponent part begins with the letter E in upper or lowercase,
- which may be followed by a plus or minus sign. The E and optional
- sign are followed by one or more digits.
-
- Numeric values that cannot be represented as sequences of digits
- (such as Infinity and NaN) are not permitted.
-
-
-
-Crockford Informational [Page 3]
-\f
-RFC 4627 JSON July 2006
-
-
- number = [ minus ] int [ frac ] [ exp ]
-
- decimal-point = %x2E ; .
-
- digit1-9 = %x31-39 ; 1-9
-
- e = %x65 / %x45 ; e E
-
- exp = e [ minus / plus ] 1*DIGIT
-
- frac = decimal-point 1*DIGIT
-
- int = zero / ( digit1-9 *DIGIT )
-
- minus = %x2D ; -
-
- plus = %x2B ; +
-
- zero = %x30 ; 0
-
-2.5. Strings
-
- The representation of strings is similar to conventions used in the C
- family of programming languages. A string begins and ends with
- quotation marks. All Unicode characters may be placed within the
- quotation marks except for the characters that must be escaped:
- quotation mark, reverse solidus, and the control characters (U+0000
- through U+001F).
-
- Any character may be escaped. If the character is in the Basic
- Multilingual Plane (U+0000 through U+FFFF), then it may be
- represented as a six-character sequence: a reverse solidus, followed
- by the lowercase letter u, followed by four hexadecimal digits that
- encode the character's code point. The hexadecimal letters A though
- F can be upper or lowercase. So, for example, a string containing
- only a single reverse solidus character may be represented as
- "\u005C".
-
- Alternatively, there are two-character sequence escape
- representations of some popular characters. So, for example, a
- string containing only a single reverse solidus character may be
- represented more compactly as "\\".
-
- To escape an extended character that is not in the Basic Multilingual
- Plane, the character is represented as a twelve-character sequence,
- encoding the UTF-16 surrogate pair. So, for example, a string
- containing only the G clef character (U+1D11E) may be represented as
- "\uD834\uDD1E".
-
-
-
-Crockford Informational [Page 4]
-\f
-RFC 4627 JSON July 2006
-
-
- string = quotation-mark *char quotation-mark
-
- char = unescaped /
- escape (
- %x22 / ; " quotation mark U+0022
- %x5C / ; \ reverse solidus U+005C
- %x2F / ; / solidus U+002F
- %x62 / ; b backspace U+0008
- %x66 / ; f form feed U+000C
- %x6E / ; n line feed U+000A
- %x72 / ; r carriage return U+000D
- %x74 / ; t tab U+0009
- %x75 4HEXDIG ) ; uXXXX U+XXXX
-
- escape = %x5C ; \
-
- quotation-mark = %x22 ; "
-
- unescaped = %x20-21 / %x23-5B / %x5D-10FFFF
-
-3. Encoding
-
- JSON text SHALL be encoded in Unicode. The default encoding is
- UTF-8.
-
- Since the first two characters of a JSON text will always be ASCII
- characters [RFC0020], it is possible to determine whether an octet
- stream is UTF-8, UTF-16 (BE or LE), or UTF-32 (BE or LE) by looking
- at the pattern of nulls in the first four octets.
-
- 00 00 00 xx UTF-32BE
- 00 xx 00 xx UTF-16BE
- xx 00 00 00 UTF-32LE
- xx 00 xx 00 UTF-16LE
- xx xx xx xx UTF-8
-
-4. Parsers
-
- A JSON parser transforms a JSON text into another representation. A
- JSON parser MUST accept all texts that conform to the JSON grammar.
- A JSON parser MAY accept non-JSON forms or extensions.
-
- An implementation may set limits on the size of texts that it
- accepts. An implementation may set limits on the maximum depth of
- nesting. An implementation may set limits on the range of numbers.
- An implementation may set limits on the length and character contents
- of strings.
-
-
-
-
-Crockford Informational [Page 5]
-\f
-RFC 4627 JSON July 2006
-
-
-5. Generators
-
- A JSON generator produces JSON text. The resulting text MUST
- strictly conform to the JSON grammar.
-
-6. IANA Considerations
-
- The MIME media type for JSON text is application/json.
-
- Type name: application
-
- Subtype name: json
-
- Required parameters: n/a
-
- Optional parameters: n/a
-
- Encoding considerations: 8bit if UTF-8; binary if UTF-16 or UTF-32
-
- JSON may be represented using UTF-8, UTF-16, or UTF-32. When JSON
- is written in UTF-8, JSON is 8bit compatible. When JSON is
- written in UTF-16 or UTF-32, the binary content-transfer-encoding
- must be used.
-
- Security considerations:
-
- Generally there are security issues with scripting languages. JSON
- is a subset of JavaScript, but it is a safe subset that excludes
- assignment and invocation.
-
- A JSON text can be safely passed into JavaScript's eval() function
- (which compiles and executes a string) if all the characters not
- enclosed in strings are in the set of characters that form JSON
- tokens. This can be quickly determined in JavaScript with two
- regular expressions and calls to the test and replace methods.
-
- var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
- text.replace(/"(\\.|[^"\\])*"/g, ''))) &&
- eval('(' + text + ')');
-
- Interoperability considerations: n/a
-
- Published specification: RFC 4627
-
-
-
-
-
-
-
-
-Crockford Informational [Page 6]
-\f
-RFC 4627 JSON July 2006
-
-
- Applications that use this media type:
-
- JSON has been used to exchange data between applications written
- in all of these programming languages: ActionScript, C, C#,
- ColdFusion, Common Lisp, E, Erlang, Java, JavaScript, Lua,
- Objective CAML, Perl, PHP, Python, Rebol, Ruby, and Scheme.
-
- Additional information:
-
- Magic number(s): n/a
- File extension(s): .json
- Macintosh file type code(s): TEXT
-
- Person & email address to contact for further information:
- Douglas Crockford
- douglas@crockford.com
-
- Intended usage: COMMON
-
- Restrictions on usage: none
-
- Author:
- Douglas Crockford
- douglas@crockford.com
-
- Change controller:
- Douglas Crockford
- douglas@crockford.com
-
-7. Security Considerations
-
- See Security Considerations in Section 6.
-
-8. Examples
-
- This is a JSON object:
-
- {
- "Image": {
- "Width": 800,
- "Height": 600,
- "Title": "View from 15th Floor",
- "Thumbnail": {
- "Url": "http://www.example.com/image/481989943",
- "Height": 125,
- "Width": "100"
- },
- "IDs": [116, 943, 234, 38793]
-
-
-
-Crockford Informational [Page 7]
-\f
-RFC 4627 JSON July 2006
-
-
- }
- }
-
- Its Image member is an object whose Thumbnail member is an object
- and whose IDs member is an array of numbers.
-
- This is a JSON array containing two objects:
-
- [
- {
- "precision": "zip",
- "Latitude": 37.7668,
- "Longitude": -122.3959,
- "Address": "",
- "City": "SAN FRANCISCO",
- "State": "CA",
- "Zip": "94107",
- "Country": "US"
- },
- {
- "precision": "zip",
- "Latitude": 37.371991,
- "Longitude": -122.026020,
- "Address": "",
- "City": "SUNNYVALE",
- "State": "CA",
- "Zip": "94085",
- "Country": "US"
- }
- ]
-
-9. References
-
-9.1. Normative References
-
- [ECMA] European Computer Manufacturers Association, "ECMAScript
- Language Specification 3rd Edition", December 1999,
- <http://www.ecma-international.org/publications/files/
- ecma-st/ECMA-262.pdf>.
-
- [RFC0020] Cerf, V., "ASCII format for network interchange", RFC 20,
- October 1969.
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119, March 1997.
-
- [RFC4234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
- Specifications: ABNF", RFC 4234, October 2005.
-
-
-
-Crockford Informational [Page 8]
-\f
-RFC 4627 JSON July 2006
-
-
- [UNICODE] The Unicode Consortium, "The Unicode Standard Version 4.0",
- 2003, <http://www.unicode.org/versions/Unicode4.1.0/>.
-
-Author's Address
-
- Douglas Crockford
- JSON.org
- EMail: douglas@crockford.com
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Crockford Informational [Page 9]
-\f
-RFC 4627 JSON July 2006
-
-
-Full Copyright Statement
-
- Copyright (C) The Internet Society (2006).
-
- This document is subject to the rights, licenses and restrictions
- contained in BCP 78, and except as set forth therein, the authors
- retain all their rights.
-
- This document and the information contained herein are provided on an
- "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
- OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
- ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
- INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
- INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
- WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
-
-Intellectual Property
-
- The IETF takes no position regarding the validity or scope of any
- Intellectual Property Rights or other rights that might be claimed to
- pertain to the implementation or use of the technology described in
- this document or the extent to which any license under such rights
- might or might not be available; nor does it represent that it has
- made any independent effort to identify any such rights. Information
- on the procedures with respect to rights in RFC documents can be
- found in BCP 78 and BCP 79.
-
- Copies of IPR disclosures made to the IETF Secretariat and any
- assurances of licenses to be made available, or the result of an
- attempt made to obtain a general license or permission for the use of
- such proprietary rights by implementers or users of this
- specification can be obtained from the IETF on-line IPR repository at
- http://www.ietf.org/ipr.
-
- The IETF invites any interested party to bring to its attention any
- copyrights, patents or patent applications, or other proprietary
- rights that may cover technology that may be required to implement
- this standard. Please address the information to the IETF at
- ietf-ipr@ietf.org.
-
-Acknowledgement
-
- Funding for the RFC Editor function is provided by the IETF
- Administrative Support Activity (IASA).
-
-
-
-
-
-
-
-Crockford Informational [Page 10]
-\f
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<Project xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
- xmlns:foaf="http://xmlns.com/foaf/0.1/"
- xmlns:gnome="http://api.gnome.org/doap-extensions#"
- xmlns="http://usefulinc.com/ns/doap#">
- <name>JSON-GLib</name>
- <shortname>json-glib</shortname>
- <shortdesc>GLib-based JSON manipulation library</shortdesc>
- <description>JSON-GLib implements a full JSON parser using GLib and GObject. Use JSON-GLib it is possible to parse and generate valid JSON data structures, using a DOM-like API. JSON-GLib also offers GObject integration, providing the ability to serialize and deserialize GObject instances to and from JSON data types.</description>
-
- <homepage rdf:resource="https://wiki.gnome.org/Projects/JsonGlib"/>
- <license rdf:resource="http://spdx.org/licenses/LGPL-2.1+"/>
- <download-page rdf:resource="http://download.gnome.org/sources/json-glib/"/>
- <bug-database rdf:resource="https://gitlab.gnome.org/GNOME/json-glib/issues/" />
- <repository>
- <GitRepository>
- <location rdf:resource="https://gitlab.gnome.org/GNOME/json-glib.git"/>
- <browse rdf:resource="https://gitlab.gnome.org/GNOME/json-glib/"/>
- </GitRepository>
- </repository>
-
- <category rdf:resource="http://api.gnome.org/doap-extensions#core"/>
-
- <programming-language>C</programming-language>
-
- <maintainer>
- <foaf:Person>
- <foaf:name>Emmanuele Bassi</foaf:name>
- <foaf:mbox rdf:resource="mailto:ebassi@gnome.org"/>
- <gnome:userid>ebassi</gnome:userid>
- </foaf:Person>
- </maintainer>
-
- <author>
- <foaf:Person>
- <foaf:name>Emmanuele Bassi</foaf:name>
- <foaf:mbox rdf:resource="mailto:ebassi@gnome.org"/>
- <gnome:userid>ebassi</gnome:userid>
- </foaf:Person>
- </author>
-
-</Project>
/*** BEGIN file-production ***/
-/* enumerations from "@filename@" */
-#include "@filename@"
+/* enumerations from "@basename@" */
+#include "@basename@"
/*** END file-production ***/
static gboolean
json_parser_load (JsonParser *parser,
- const gchar *data,
+ const gchar *input_data,
gsize length,
GError **error)
{
gboolean done;
gboolean retval = TRUE;
gint i;
+ gchar *data = input_data;
json_parser_clear (parser);
return FALSE;
}
+ if (length >= 3)
+ {
+ /* Check for UTF-8 signature and skip it if necessary */
+ if (((data[0] & 0xFF) == 0xEF) &&
+ ((data[1] & 0xFF) == 0xBB) &&
+ ((data[2] & 0xFF) == 0xBF))
+ {
+ JSON_NOTE (PARSER, "Skipping BOM");
+ data += 3;
+ length -= 3;
+ }
+ }
+
scanner = json_scanner_create (parser);
json_scanner_input_text (scanner, data, length);
#include <io.h> /* For _read() */
#endif
+enum {
+ JSON_ERR_MALFORMED_SURROGATE_PAIR = G_TOKEN_LAST + 1,
+};
+
struct _JsonScannerConfig
{
/* Character sets
case G_ERR_DIGIT_RADIX:
g_snprintf (token_string, token_string_len, "scanner: digit is beyond radix");
break;
-
+
+ case JSON_ERR_MALFORMED_SURROGATE_PAIR:
+ g_snprintf (token_string, token_string_len, "scanner: malformed surrogate pair");
+ break;
+
case G_ERR_UNKNOWN:
default:
g_snprintf (token_string, token_string_len, "scanner: unknown error");
gstring = g_string_new (NULL);
while ((ch = json_scanner_get_char (scanner, line_p, position_p)) != 0)
{
- if (ch == '"')
+ if (ch == '"' || token == G_TOKEN_ERROR)
{
in_string_dq = FALSE;
break;
units[0] = ucs;
units[1] = json_scanner_get_unichar (scanner, line_p, position_p);
- ucs = decode_utf16_surrogate_pair (units);
- g_assert (g_unichar_validate (ucs));
+ if (0xdc00 <= units[1] && units[1] <= 0xdfff &&
+ 0xd800 <= units[0] && units[0] <= 0xdbff)
+ {
+ ucs = decode_utf16_surrogate_pair (units);
+ g_assert (g_unichar_validate (ucs));
+ }
+ else
+ {
+ token = G_TOKEN_ERROR;
+ value.v_error = JSON_ERR_MALFORMED_SURROGATE_PAIR;
+ gstring = NULL;
+ break;
+ }
+
}
}
/* values */
{ "values-1", "[ -false ]", test_invalid_value },
+ { "values-2", "[\"\\uD800\\uD800\"]", test_invalid_value },
+ { "values-3", "[\"\\uDB00\\uD800\"]", test_invalid_value },
+ { "values-4", "[\"\\uDB00\"]", test_invalid_value },
/* assignment */
{ "assignment-1", "var foo", test_invalid_assignment },
test_data = [
'invalid.json',
+ 'skip-bom.json',
'stream-load.json',
]
g_object_unref (parser);
}
+/* test_reader_skip_bom: Ensure that a BOM Unicode character is skipped when parsing */
+static void
+test_reader_skip_bom (void)
+{
+ JsonParser *parser = json_parser_new ();
+ JsonReader *reader = json_reader_new (NULL);
+ GError *error = NULL;
+ char *path;
+
+ path = g_test_build_filename (G_TEST_DIST, "skip-bom.json", NULL);
+
+ json_parser_load_from_mapped_file (parser, path, &error);
+ g_assert_no_error (error);
+
+ json_reader_set_root (reader, json_parser_get_root (parser));
+
+ json_reader_read_member (reader, "appName");
+ g_assert_true (json_reader_is_value (reader));
+ g_assert_no_error (json_reader_get_error (reader));
+ g_assert_cmpstr (json_reader_get_string_value (reader), ==, "String starts with BOM");
+
+ g_free (path);
+ g_object_unref (reader);
+ g_object_unref (parser);
+}
+
int
main (int argc,
char *argv[])
g_test_add_func ("/reader/base-object", test_base_object);
g_test_add_func ("/reader/level", test_reader_level);
g_test_add_func ("/reader/null-value", test_reader_null_value);
+ g_test_add_func ("/reader/bom", test_reader_skip_bom);
return g_test_run ();
}
--- /dev/null
+{
+ "appName": "String starts with BOM"
+}
-project('json-glib', 'c', version: '1.6.0',
+project('json-glib', 'c', version: '1.6.2',
license: 'LGPLv2.1+',
default_options: [
'warning_level=1',
+++ /dev/null
-/Makefile.in.in
-/Makevars.template
-/POTFILES
-/Rules-quot
-/boldquot.sed
-/en@boldquot.header
-/en@quot.header
-/insert-header.sin
-/quot.sed
-/remove-potcdate.sed
-/remove-potcdate.sin
-/stamp-po
-*.gmo
-*.pot
--- /dev/null
+msgid ""
+msgstr ""
+"Project-Id-Version: 98e6872775a91bf27122ff608b6db605\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/json-glib/issues\n"
+"POT-Creation-Date: 2020-10-03 17:18+0000\n"
+"PO-Revision-Date: 2020-10-07 11:06\n"
+"Last-Translator: Zander Brown <zbrown@gnome.org>\n"
+"Language-Team: Belarusian\n"
+"Language: be_BY\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || n%10>=5 && n%10<=9 || n"
+"%100>=11 && n%100<=14 ? 2 : 3);\n"
+"X-Generator: Gtranslator 3.32.1\n"
+"X-Crowdin-Project: 98e6872775a91bf27122ff608b6db605\n"
+"X-Crowdin-Project-ID: 2\n"
+"X-Crowdin-Language: be\n"
+"X-Crowdin-File: /master/sources/json-glib-1.0/en_GB.po\n"
+"X-Crowdin-File-ID: 130\n"
+
+#: json-glib/json-glib-format.c:58
+msgid "Prettify output"
+msgstr "Выводзіць зручным для чытання"
+
+#: json-glib/json-glib-format.c:59
+msgid "Indentation spaces"
+msgstr "Водступы"
+
+#: json-glib/json-glib-format.c:59
+msgid "SPACES"
+msgstr "ПРАГАЛЫ"
+
+#: json-glib/json-glib-format.c:60
+msgid "Output file"
+msgstr "Выходны файл"
+
+#: json-glib/json-glib-format.c:60 json-glib/json-glib-validate.c:115
+msgid "FILE"
+msgstr "ФАЙЛ"
+
+#: json-glib/json-glib-format.c:61
+msgid "FILE…"
+msgstr "ФАЙЛ…"
+
+#. Translators: the first %s is the program name, the second one
+#. * is the URI of the file, the third is the error message.
+#.
+#: json-glib/json-glib-format.c:87 json-glib/json-glib-format.c:123
+#: json-glib/json-glib-validate.c:63
+#, c-format
+msgid "%s: %s: error opening file: %s\n"
+msgstr "%s: %s: не атрымалася адкрыць файл: %s\n"
+
+#. Translators: the first %s is the program name, the second one
+#. * is the URI of the file, the third is the error message.
+#.
+#: json-glib/json-glib-format.c:101 json-glib/json-glib-validate.c:75
+#, c-format
+msgid "%s: %s: error parsing file: %s\n"
+msgstr "%s: %s: не атрымалася разабраць файл: %s\n"
+
+#. Translators: the first %s is the program name, the
+#. * second one is the URI of the file.
+#.
+#: json-glib/json-glib-format.c:143
+#, c-format
+msgid "%s: %s: error writing to stdout"
+msgstr "%s: %s: не атрымалася запісаць у stdout"
+
+#. Translators: the first %s is the program name, the second one
+#. * is the URI of the file, the third is the error message.
+#.
+#: json-glib/json-glib-format.c:167 json-glib/json-glib-validate.c:87
+#, c-format
+msgid "%s: %s: error closing: %s\n"
+msgstr "%s: %s: не атрымалася закрыць: %s\n"
+
+#. Translators: this message will appear after the usage string
+#. and before the list of options.
+#: json-glib/json-glib-format.c:203
+msgid "Format JSON files."
+msgstr "Фармат файлаў JSON."
+
+#: json-glib/json-glib-format.c:204
+msgid "json-glib-format formats JSON resources."
+msgstr "json-glib-format фарматуе рэсурсы JSON."
+
+#. Translators: the %s is the program name. This error message
+#. * means the user is calling json-glib-validate without any
+#. * argument.
+#.
+#: json-glib/json-glib-format.c:219 json-glib/json-glib-validate.c:136
+#, c-format
+msgid "Error parsing commandline options: %s\n"
+msgstr "Не атрымалася разабраць параметры загаднага радка: %s\n"
+
+#: json-glib/json-glib-format.c:221 json-glib/json-glib-format.c:235
+#: json-glib/json-glib-validate.c:138 json-glib/json-glib-validate.c:152
+#, c-format
+msgid "Try “%s --help” for more information."
+msgstr "Выкарыстайце “%s --help”, каб атрымаць больш падрабязную інфармацыю."
+
+#. Translators: the %s is the program name. This error message
+#. * means the user is calling json-glib-validate without any
+#. * argument.
+#.
+#: json-glib/json-glib-format.c:233 json-glib/json-glib-validate.c:150
+#, c-format
+msgid "%s: missing files"
+msgstr "%s: адсутнічаюць файлы"
+
+#. Translators: this message will appear after the usage string
+#. and before the list of options.
+#: json-glib/json-glib-validate.c:118
+msgid "Validate JSON files."
+msgstr "Праверка файлаў JSON."
+
+#: json-glib/json-glib-validate.c:119
+msgid "json-glib-validate validates JSON data at the given URI."
+msgstr "json-glib-validate правярае даныя JSON па вызначанаму URI."
+
+#. translators: the %s is the name of the data structure
+#: json-glib/json-gobject.c:935
+#, c-format
+msgid "Expecting a JSON object, but the root node is of type “%s”"
+msgstr "Чакаўся аб’ект JSON object, але каранёвы вузел мае тып “%s”"
+
+#. translators: the '%s' is the type name
+#: json-glib/json-gvariant.c:524
+#, c-format
+msgid "Unexpected type “%s” in JSON node"
+msgstr "Нечаканы тып “%s” у вузле JSON"
+
+#: json-glib/json-gvariant.c:594
+msgid "Missing elements in JSON array to conform to a tuple"
+msgstr "У масіве JSON адсутнічаюць элементы для адпаведнасці картэжу"
+
+#: json-glib/json-gvariant.c:622
+msgid "Missing closing symbol “)” in the GVariant tuple type"
+msgstr "У тыпе картэжу GVariant адсутнічае закрыўная дужка \")\""
+
+#: json-glib/json-gvariant.c:630
+msgid "Unexpected extra elements in JSON array"
+msgstr "Нечаканыя дадатковыя элементы ў масіве JSON"
+
+#: json-glib/json-gvariant.c:931
+msgid "Invalid string value converting to GVariant"
+msgstr "Хібнае значэнне радка для пераўтварэння ў GVariant"
+
+#: json-glib/json-gvariant.c:986
+msgid ""
+"A GVariant dictionary entry expects a JSON object with exactly one member"
+msgstr "Запіс слоўніка GVariant мусіць быць аб’ектам JSON з адзіным складнікам"
+
+#: json-glib/json-gvariant.c:1264
+#, c-format
+msgid "GVariant class “%c” not supported"
+msgstr "Клас GVariant “%c” не падтрымліваецца"
+
+#: json-glib/json-gvariant.c:1312
+msgid "Invalid GVariant signature"
+msgstr "Хібны подпіс GVariant"
+
+#: json-glib/json-gvariant.c:1360
+msgid "JSON data is empty"
+msgstr "Даныя JSON адсутнічаюць"
+
+#. translators: %s: is the file name, the first %d is the line
+#. * number, the second %d is the position on the line, and %s is
+#. * the error message
+#.
+#: json-glib/json-parser.c:906
+#, c-format
+msgid "%s:%d:%d: Parse error: %s"
+msgstr "%s:%d:%d: не атрымалася разабраць: %s"
+
+#: json-glib/json-parser.c:989
+msgid "JSON data must be UTF-8 encoded"
+msgstr "Даныя JSON мусяць быць закадаваныя ў UTF-8"
+
+#: json-glib/json-path.c:389
+msgid "Only one root node is allowed in a JSONPath expression"
+msgstr "У выразе JSONPath мусіць быць толькі адзін каранёвы вузел"
+
+#. translators: the %c is the invalid character
+#: json-glib/json-path.c:398
+#, c-format
+msgid "Root node followed by invalid character “%c”"
+msgstr "За каранёвым вузлом ідзе хібны сімвал “%c”"
+
+#: json-glib/json-path.c:438
+msgid "Missing member name or wildcard after . character"
+msgstr "Пасля сімвала \".\" адсутнічае назва складніка альбо шаблон"
+
+#: json-glib/json-path.c:512
+#, c-format
+msgid "Malformed slice expression “%*s”"
+msgstr "Хібны выраз часткі “%*s”"
+
+#: json-glib/json-path.c:556
+#, c-format
+msgid "Invalid set definition “%*s”"
+msgstr "Хібнае вызначэнне набору “%*s”"
+
+#: json-glib/json-path.c:609
+#, c-format
+msgid "Invalid slice definition “%*s”"
+msgstr "Хібнае вызначэнне часткі “%*s”"
+
+#: json-glib/json-path.c:637
+#, c-format
+msgid "Invalid array index definition “%*s”"
+msgstr "Хібнае вызначэнне індэксу масіву “%*s”"
+
+#: json-glib/json-path.c:656
+#, c-format
+msgid "Invalid first character “%c”"
+msgstr "Хібны першы сімвал “%c”"
+
+#: json-glib/json-reader.c:474
+#, c-format
+msgid ""
+"The current node is of type “%s”, but an array or an object was expected."
+msgstr "У бягучага вузла тып “%s”, а чакаўся аб’ект альбо масіў."
+
+#: json-glib/json-reader.c:486
+#, c-format
+msgid ""
+"The index “%d” is greater than the size of the array at the current position."
+msgstr "Індэкс “%d” большы за памер масіву на бягучай пазіцыі."
+
+#: json-glib/json-reader.c:503
+#, c-format
+msgid ""
+"The index “%d” is greater than the size of the object at the current "
+"position."
+msgstr "Індэкс “%d” большы за памер аб’екта на бягучай пазіцыі."
+
+#: json-glib/json-reader.c:585 json-glib/json-reader.c:751
+#: json-glib/json-reader.c:799 json-glib/json-reader.c:837
+#: json-glib/json-reader.c:875 json-glib/json-reader.c:913
+#: json-glib/json-reader.c:951 json-glib/json-reader.c:996
+#: json-glib/json-reader.c:1032 json-glib/json-reader.c:1058
+msgid "No node available at the current position"
+msgstr "На бягучай пазіцыі няма даступных вузлоў"
+
+#: json-glib/json-reader.c:592
+#, c-format
+msgid "The current position holds a “%s” and not an array"
+msgstr "На бягучай пазіцыі знаходзіцца “%s”, а не масіў"
+
+#: json-glib/json-reader.c:668
+#, c-format
+msgid "The current node is of type “%s”, but an object was expected."
+msgstr "У бягучага вузла тып “%s”, а чакаўся аб’ект."
+
+#: json-glib/json-reader.c:675
+#, c-format
+msgid "The member “%s” is not defined in the object at the current position."
+msgstr "Складнік \"%s\" не вызначаны ў аб’екце на бягучай пазіцыі."
+
+#: json-glib/json-reader.c:758 json-glib/json-reader.c:806
+#, c-format
+msgid "The current position holds a “%s” and not an object"
+msgstr "На бягучай пазіцыі знаходзіцца “%s”, а не аб’ект"
+
+#: json-glib/json-reader.c:846 json-glib/json-reader.c:884
+#: json-glib/json-reader.c:922 json-glib/json-reader.c:960
+#: json-glib/json-reader.c:1005
+#, c-format
+msgid "The current position holds a “%s” and not a value"
+msgstr "На бягучай пазіцыі знаходзіцца “%s”, а не значэнне"
+
+#: json-glib/json-reader.c:968
+msgid "The current position does not hold a string type"
+msgstr "Бягучая пазіцыя не змяшчае тыпу радка"
# Duarte Loreto <happyguy_pt@hotmail.com>, 2012, 2013, 2014.\r
# \r
# Pedro Albuquerque <palbuquerque73@openmailbox.com>, 2015.
+# Juliano de Souza Camargo <julianosc@protonmail.com>, 2020.
#
msgid ""
msgstr ""
"Project-Id-Version: 3.12\n"
-"Report-Msgid-Bugs-To: http://bugzilla.gnome.org/enter_bug.cgi?product=json-"
-"glib&keywords=I18N+L10N&component=general\n"
-"POT-Creation-Date: 2015-06-07 22:10+0000\n"
-"PO-Revision-Date: 2015-06-25 09:43+0100\n"
-"Last-Translator: Pedro Albuquerque <palbuquerque73@openmailbox.com>\n"
-"Language-Team: Português <palbuquerque73@openmailbox.com>\n"
+"Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/json-glib/issues\n"
+"POT-Creation-Date: 2020-06-16 13:37+0000\n"
+"PO-Revision-Date: 2020-09-11 20:45-0300\n"
+"Last-Translator: Juliano de Souza Camargo <julianosc@protonmail.com>\n"
+"Language-Team: Portuguese <>\n"
"Language: pt\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Gtranslator 2.91.6\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+"X-Generator: Gtranslator 3.36.0\n"
-#: ../json-glib/json-glib-format.c:50
+#: json-glib/json-glib-format.c:58
msgid "Prettify output"
msgstr "Embelezar resultado"
-#: ../json-glib/json-glib-format.c:51
+#: json-glib/json-glib-format.c:59
msgid "Indentation spaces"
msgstr "Espaços da indentação"
+#: json-glib/json-glib-format.c:59
+msgid "SPACES"
+msgstr "ESPAÇOS"
+
+#: json-glib/json-glib-format.c:60
+msgid "Output file"
+msgstr "Ficheiro de saída"
+
+#: json-glib/json-glib-format.c:60 json-glib/json-glib-validate.c:115
+msgid "FILE"
+msgstr "FICHEIRO"
+
+#: json-glib/json-glib-format.c:61
+#| msgid "FILE"
+msgid "FILE…"
+msgstr "FICHEIRO..."
+
#. Translators: the first %s is the program name, the second one
#. * is the URI of the file, the third is the error message.
#.
-#: ../json-glib/json-glib-format.c:77 ../json-glib/json-glib-validate.c:63
+#: json-glib/json-glib-format.c:87 json-glib/json-glib-format.c:120
+#: json-glib/json-glib-validate.c:63
#, c-format
msgid "%s: %s: error opening file: %s\n"
msgstr "%s: %s: erro ao abrir ficheiro: %s\n"
#. Translators: the first %s is the program name, the second one
#. * is the URI of the file, the third is the error message.
#.
-#: ../json-glib/json-glib-format.c:89 ../json-glib/json-glib-validate.c:75
+#: json-glib/json-glib-format.c:99 json-glib/json-glib-validate.c:75
#, c-format
msgid "%s: %s: error parsing file: %s\n"
msgstr "%s: %s: erro ao processar ficheiro: %s\n"
#. Translators: the first %s is the program name, the
#. * second one is the URI of the file.
#.
-#: ../json-glib/json-glib-format.c:108
+#: json-glib/json-glib-format.c:138
#, c-format
msgid "%s: %s: error writing to stdout"
msgstr "%s: %s: erro ao escrever para stdout"
#. Translators: the first %s is the program name, the second one
#. * is the URI of the file, the third is the error message.
#.
-#: ../json-glib/json-glib-format.c:128 ../json-glib/json-glib-validate.c:87
+#: json-glib/json-glib-format.c:159 json-glib/json-glib-validate.c:87
#, c-format
msgid "%s: %s: error closing: %s\n"
msgstr "%s: %s: erro ao fechar: %s\n"
-#: ../json-glib/json-glib-format.c:157 ../json-glib/json-glib-validate.c:115
-msgid "FILE"
-msgstr "FICHEIRO"
-
#. Translators: this message will appear after the usage string
#. and before the list of options.
-#: ../json-glib/json-glib-format.c:160
+#: json-glib/json-glib-format.c:192
msgid "Format JSON files."
msgstr "Formatar ficheiros JSON."
-#: ../json-glib/json-glib-format.c:161
+#: json-glib/json-glib-format.c:193
msgid "json-glib-format formats JSON resources."
msgstr "json-glib-format formata recursos JSON."
#. * means the user is calling json-glib-validate without any
#. * argument.
#.
-#: ../json-glib/json-glib-format.c:178 ../json-glib/json-glib-validate.c:136
+#: json-glib/json-glib-format.c:208 json-glib/json-glib-validate.c:136
#, c-format
msgid "Error parsing commandline options: %s\n"
msgstr "Erro ao processar opções de linha de comandos: %s\n"
-#: ../json-glib/json-glib-format.c:180 ../json-glib/json-glib-format.c:194
-#: ../json-glib/json-glib-validate.c:138 ../json-glib/json-glib-validate.c:152
+#: json-glib/json-glib-format.c:210 json-glib/json-glib-format.c:224
+#: json-glib/json-glib-validate.c:138 json-glib/json-glib-validate.c:152
#, c-format
-msgid "Try \"%s --help\" for more information."
-msgstr "Tente \"%s --help\" para mais informações."
+#| msgid "Try \"%s --help\" for more information."
+msgid "Try “%s --help” for more information."
+msgstr "Tente “%s --help” para mais informações."
#. Translators: the %s is the program name. This error message
#. * means the user is calling json-glib-validate without any
#. * argument.
#.
-#: ../json-glib/json-glib-format.c:192 ../json-glib/json-glib-validate.c:150
+#: json-glib/json-glib-format.c:222 json-glib/json-glib-validate.c:150
#, c-format
msgid "%s: missing files"
msgstr "%s: faltam ficheiros"
#. Translators: this message will appear after the usage string
#. and before the list of options.
-#: ../json-glib/json-glib-validate.c:118
+#: json-glib/json-glib-validate.c:118
msgid "Validate JSON files."
msgstr "Validar ficheiros JSON."
-#: ../json-glib/json-glib-validate.c:119
+#: json-glib/json-glib-validate.c:119
msgid "json-glib-validate validates JSON data at the given URI."
msgstr "json-glib-validate valida dados JSON no URI indicado."
-#: ../json-glib/json-gobject.c:943
+#. translators: the %s is the name of the data structure
+#: json-glib/json-gobject.c:940
#, c-format
-msgid "Expecting a JSON object, but the root node is of type `%s'"
-msgstr "Esperado um objeto JSON, mas o nó raiz é do tipo \"%s\""
+#| msgid "Expecting a JSON object, but the root node is of type `%s'"
+msgid "Expecting a JSON object, but the root node is of type “%s”"
+msgstr "Esperado um objeto JSON, mas o nó raiz é do tipo “%s”"
-#: ../json-glib/json-gvariant.c:523
+#. translators: the '%s' is the type name
+#: json-glib/json-gvariant.c:524
#, c-format
-msgid "Unexpected type '%s' in JSON node"
-msgstr "Tipo \"%s\" inesperado no nó JSON"
+#| msgid "Unexpected type '%s' in JSON node"
+msgid "Unexpected type “%s” in JSON node"
+msgstr "Tipo “%s” inesperado no nó JSON"
-#: ../json-glib/json-gvariant.c:593
+#: json-glib/json-gvariant.c:594
msgid "Missing elements in JSON array to conform to a tuple"
msgstr "Elementos em falta na matriz JSON para respeitar um conjunto"
-#: ../json-glib/json-gvariant.c:621
-msgid "Missing closing symbol ')' in the GVariant tuple type"
-msgstr "Falta o símbolo de fecho \")\" no tipo de conjunto GVariant"
+#: json-glib/json-gvariant.c:622
+#| msgid "Missing closing symbol ')' in the GVariant tuple type"
+msgid "Missing closing symbol “)” in the GVariant tuple type"
+msgstr "Falta o símbolo de fecho “)” no tipo de conjunto GVariant"
-#: ../json-glib/json-gvariant.c:629
+#: json-glib/json-gvariant.c:630
msgid "Unexpected extra elements in JSON array"
msgstr "Elementos extra inesperados na matriz JSON"
-#: ../json-glib/json-gvariant.c:908
+#: json-glib/json-gvariant.c:931
msgid "Invalid string value converting to GVariant"
msgstr "Valor inválido de cadeia ao converter em GVariant"
-#: ../json-glib/json-gvariant.c:964
+#: json-glib/json-gvariant.c:986
msgid ""
"A GVariant dictionary entry expects a JSON object with exactly one member"
msgstr ""
"Uma entrada de dicionário GVariant espera um objeto JSON com exatamente um "
"membro"
-#: ../json-glib/json-gvariant.c:1248
+#: json-glib/json-gvariant.c:1264
#, c-format
-msgid "GVariant class '%c' not supported"
-msgstr "Classe GVariant \"%c\" não suportada"
+#| msgid "GVariant class '%c' not supported"
+msgid "GVariant class “%c” not supported"
+msgstr "Classe GVariant “%c” não suportada"
-#: ../json-glib/json-gvariant.c:1296
+#: json-glib/json-gvariant.c:1312
msgid "Invalid GVariant signature"
msgstr "Assinatura GVariant inválida"
-#: ../json-glib/json-gvariant.c:1344
+#: json-glib/json-gvariant.c:1360
msgid "JSON data is empty"
msgstr "Dados JSON estão vazios"
-#: ../json-glib/json-parser.c:815
+#. translators: %s: is the file name, the first %d is the line
+#. * number, the second %d is the position on the line, and %s is
+#. * the error message
+#.
+#: json-glib/json-parser.c:909
#, c-format
msgid "%s:%d:%d: Parse error: %s"
msgstr "%s:%d:%d: erro de processamento: %s"
-#: ../json-glib/json-parser.c:883
+#: json-glib/json-parser.c:992
msgid "JSON data must be UTF-8 encoded"
msgstr "Dados JSON têm de estar codificados em UTF-8"
-#: ../json-glib/json-path.c:388
+#: json-glib/json-path.c:389
msgid "Only one root node is allowed in a JSONPath expression"
msgstr "Só um nó raiz é permitido numa expressão JSONPath"
-#: ../json-glib/json-path.c:397
+#. translators: the %c is the invalid character
+#: json-glib/json-path.c:398
#, c-format
-msgid "Root node followed by invalid character '%c'"
-msgstr "Nó raiz seguido do carácter inválido \"%c\""
+#| msgid "Root node followed by invalid character '%c'"
+msgid "Root node followed by invalid character “%c”"
+msgstr "Nó raiz seguido do carácter inválido “%c”"
-#: ../json-glib/json-path.c:437
+#: json-glib/json-path.c:438
msgid "Missing member name or wildcard after . character"
msgstr "Falta nome de membro ou caráter global após caráter \".\""
-#: ../json-glib/json-path.c:511
+#: json-glib/json-path.c:512
#, c-format
-msgid "Malformed slice expression '%*s'"
-msgstr "Expressão \"%*s\" de fatia mal formada"
+#| msgid "Malformed slice expression '%*s'"
+msgid "Malformed slice expression “%*s”"
+msgstr "Expressão “%*s” de fatia mal formada"
-#: ../json-glib/json-path.c:555
+#: json-glib/json-path.c:556
#, c-format
-msgid "Invalid set definition '%*s'"
-msgstr "Definição inválida de conjunto \"%*s\""
+#| msgid "Invalid set definition '%*s'"
+msgid "Invalid set definition “%*s”"
+msgstr "Definição inválida de conjunto “%*s”"
-#: ../json-glib/json-path.c:608
+#: json-glib/json-path.c:609
#, c-format
-msgid "Invalid slice definition '%*s'"
-msgstr "Definição inválida de fatia \"%*s\""
+#| msgid "Invalid slice definition '%*s'"
+msgid "Invalid slice definition “%*s”"
+msgstr "Definição inválida de fatia “%*s”"
-#: ../json-glib/json-path.c:636
+#: json-glib/json-path.c:637
#, c-format
-msgid "Invalid array index definition '%*s'"
-msgstr "Definição inválida de índice de matriz \"%*s\""
+#| msgid "Invalid array index definition '%*s'"
+msgid "Invalid array index definition “%*s”"
+msgstr "Definição inválida de índice de matriz “%*s”"
-#: ../json-glib/json-path.c:655
+#: json-glib/json-path.c:656
#, c-format
-msgid "Invalid first character '%c'"
-msgstr "Primeiro carácter \"%c\" inválido"
+#| msgid "Invalid first character '%c'"
+msgid "Invalid first character “%c”"
+msgstr "Primeiro carácter “%c” inválido"
-#: ../json-glib/json-reader.c:459
+#: json-glib/json-reader.c:474
#, c-format
+#| msgid ""
+#| "The current node is of type '%s', but an array or an object was expected."
msgid ""
-"The current node is of type '%s', but an array or an object was expected."
-msgstr "O nó atual é do tipo \"%s\", mas era esperada uma matriz ou um objeto."
+"The current node is of type “%s”, but an array or an object was expected."
+msgstr "O nó atual é do tipo “%s”, mas era esperada uma matriz ou um objeto."
-#: ../json-glib/json-reader.c:471
+#: json-glib/json-reader.c:486
#, c-format
+#| msgid ""
+#| "The index '%d' is greater than the size of the array at the current "
+#| "position."
msgid ""
-"The index '%d' is greater than the size of the array at the current position."
-msgstr "O índice \"%d\" é maior do que o tamanho da matriz na posição atual."
+"The index “%d” is greater than the size of the array at the current position."
+msgstr "O índice “%d” é maior do que o tamanho da matriz na posição atual."
-#: ../json-glib/json-reader.c:488
+#: json-glib/json-reader.c:503
#, c-format
+#| msgid ""
+#| "The index '%d' is greater than the size of the object at the current "
+#| "position."
msgid ""
-"The index '%d' is greater than the size of the object at the current "
+"The index “%d” is greater than the size of the object at the current "
"position."
-msgstr "O índice \"%d\" é maior do que o tamanho do objeto na posição atual."
+msgstr "O índice “%d” é maior do que o tamanho do objeto na posição atual."
-#: ../json-glib/json-reader.c:572 ../json-glib/json-reader.c:723
-#: ../json-glib/json-reader.c:774 ../json-glib/json-reader.c:812
-#: ../json-glib/json-reader.c:850 ../json-glib/json-reader.c:888
-#: ../json-glib/json-reader.c:926 ../json-glib/json-reader.c:971
-#: ../json-glib/json-reader.c:1007 ../json-glib/json-reader.c:1033
+#: json-glib/json-reader.c:585 json-glib/json-reader.c:751
+#: json-glib/json-reader.c:799 json-glib/json-reader.c:837
+#: json-glib/json-reader.c:875 json-glib/json-reader.c:913
+#: json-glib/json-reader.c:951 json-glib/json-reader.c:996
+#: json-glib/json-reader.c:1032 json-glib/json-reader.c:1058
msgid "No node available at the current position"
msgstr "Nenhum nó disponível na posição atual"
-#: ../json-glib/json-reader.c:579
+#: json-glib/json-reader.c:592
#, c-format
-msgid "The current position holds a '%s' and not an array"
-msgstr "A posição atual contém um \"%s\" e não uma matriz"
+#| msgid "The current position holds a '%s' and not an array"
+msgid "The current position holds a “%s” and not an array"
+msgstr "A posição atual contém um “%s” e não uma matriz"
-#: ../json-glib/json-reader.c:642
+#: json-glib/json-reader.c:668
#, c-format
-msgid "The current node is of type '%s', but an object was expected."
-msgstr "O nó atual é do tipo \"%s\", mas era esperado um objeto."
+#| msgid "The current node is of type '%s', but an object was expected."
+msgid "The current node is of type “%s”, but an object was expected."
+msgstr "O nó atual é do tipo “%s”, mas era esperado um objeto."
-#: ../json-glib/json-reader.c:649
+#: json-glib/json-reader.c:675
#, c-format
-msgid "The member '%s' is not defined in the object at the current position."
-msgstr "O membro \"%s\" não está definido no objeto da posição atual."
+#| msgid ""
+#| "The member '%s' is not defined in the object at the current position."
+msgid "The member “%s” is not defined in the object at the current position."
+msgstr "O membro “%s” não está definido no objeto da posição atual."
-#: ../json-glib/json-reader.c:730 ../json-glib/json-reader.c:781
+#: json-glib/json-reader.c:758 json-glib/json-reader.c:806
#, c-format
-msgid "The current position holds a '%s' and not an object"
-msgstr "A posição atual contém um \"%s\" e não um objeto"
+#| msgid "The current position holds a '%s' and not an object"
+msgid "The current position holds a “%s” and not an object"
+msgstr "A posição atual contém um “%s” e não um objeto"
-#: ../json-glib/json-reader.c:821 ../json-glib/json-reader.c:859
-#: ../json-glib/json-reader.c:897 ../json-glib/json-reader.c:935
-#: ../json-glib/json-reader.c:980
+#: json-glib/json-reader.c:846 json-glib/json-reader.c:884
+#: json-glib/json-reader.c:922 json-glib/json-reader.c:960
+#: json-glib/json-reader.c:1005
#, c-format
-msgid "The current position holds a '%s' and not a value"
-msgstr "A posição atual contém um \"%s\" e não um valor"
+#| msgid "The current position holds a '%s' and not a value"
+msgid "The current position holds a “%s” and not a value"
+msgstr "A posição atual contém um “%s” e não um valor"
-#: ../json-glib/json-reader.c:943
+#: json-glib/json-reader.c:968
msgid "The current position does not hold a string type"
msgstr "A posição atual não contém um tipo cadeia"