{"id":19196309,"url":"https://github.com/jsonx-org/schema","last_synced_at":"2025-05-09T00:36:11.491Z","repository":{"id":143662889,"uuid":"196051915","full_name":"jsonx-org/schema","owner":"jsonx-org","description":"\"JSON Schema Definition\" (JSD) language that offers a vocabulary to describe the structure and constraining the contents of JSON documents.","archived":false,"fork":false,"pushed_at":"2024-05-13T17:14:57.000Z","size":360,"stargazers_count":4,"open_issues_count":4,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-05-13T18:38:13.657Z","etag":null,"topics":["consumer-driven-contracts","enterprise","jsd","jsdx","json","json-schema","jsonx","jsonx-schema","schema","validation","xml","xsd"],"latest_commit_sha":null,"homepage":"https://jsonx.org/schema/","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jsonx-org.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-09T17:14:17.000Z","updated_at":"2024-05-13T17:15:01.000Z","dependencies_parsed_at":"2024-05-13T18:37:54.343Z","dependency_job_id":"8ba2a50d-d7e9-46a1-9c69-b775040ac72f","html_url":"https://github.com/jsonx-org/schema","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonx-org%2Fschema","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonx-org%2Fschema/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonx-org%2Fschema/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsonx-org%2Fschema/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jsonx-org","download_url":"https://codeload.github.com/jsonx-org/schema/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223823237,"owners_count":17208947,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["consumer-driven-contracts","enterprise","jsd","jsdx","json","json-schema","jsonx","jsonx-schema","schema","validation","xml","xsd"],"created_at":"2024-11-09T12:13:21.669Z","updated_at":"2024-11-09T12:13:22.337Z","avatar_url":"https://github.com/jsonx-org.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# JSON Schema Definition Language\n\n\u003e **JSON Schema for the enterprise**\n\n[![Build Status](https://github.com/jsonx-org/schema/actions/workflows/test.yml/badge.svg)](https://github.com/jsonx-org/schema/actions/workflows/test.yml)\n[![XSD](https://img.shields.io/badge/schema.xsd-v0.5-blue.svg)](http://jsonx.org/schema-0.5.xsd)\n[![JSDx](https://img.shields.io/badge/schema.jsdx-v0.5-blue.svg)](http://jsonx.org/schema-0.5.jsdx)\n[![JSD](https://img.shields.io/badge/schema.jsd-v0.5-blue.svg)](http://jsonx.org/schema-0.5.jsd)\u003cbr\u003e\n[![Build Status](https://github.com/jsonx-org/schema/actions/workflows/test.yml/badge.svg)](https://github.com/jsonx-org/schema/actions/workflows/test.yml)\n[![XSD](https://img.shields.io/badge/binding.xsd-v0.5-blue.svg)](http://jsonx.org/binding-0.5.xsd)\n[![JSDx](https://img.shields.io/badge/binding.jsdx-v0.5-blue.svg)](http://jsonx.org/binding-0.5.jsdx)\n[![JSD](https://img.shields.io/badge/binding.jsd-v0.5-blue.svg)](http://jsonx.org/binding-0.5.jsd)\u003cbr\u003e\n[![Build Status](https://github.com/jsonx-org/schema/actions/workflows/test.yml/badge.svg)](https://github.com/jsonx-org/schema/actions/workflows/test.yml)\n[![XSD](https://img.shields.io/badge/include.xsd-v0.5-blue.svg)](http://jsonx.org/include-0.5.xsd)\n[![JSDx](https://img.shields.io/badge/include.jsdx-v0.5-blue.svg)](http://jsonx.org/include-0.5.jsdx)\n[![JSD](https://img.shields.io/badge/include.jsd-v0.5-blue.svg)](http://jsonx.org/include-0.5.jsd)\u003cbr\u003e\n[![Build Status](https://img.shields.io/badge/test-passing-orange.svg)](https://github.com/jsonx-org/schema/actions/workflows/test.yml)\n[![XSD](https://img.shields.io/badge/schema.xsd-v0.4-orange.svg)](http://jsonx.org/schema-0.4.xsd)\n[![JSDx](https://img.shields.io/badge/schema.jsdx-v0.4-orange.svg)](http://jsonx.org/schema-0.4.jsdx)\n[![JSD](https://img.shields.io/badge/schema.jsd-v0.4-orange.svg)](http://jsonx.org/schema-0.4.jsd)\u003cbr\u003e\n[![Build Status](https://img.shields.io/badge/test-passing-orange.svg)](https://github.com/jsonx-org/schema/actions/workflows/test.yml)\n[![XSD](https://img.shields.io/badge/schema.xsd-v0.3-orange.svg)](http://jsonx.org/schema-0.3.xsd)\n[![JSDx](https://img.shields.io/badge/schema.jsdx-v0.3-orange.svg)](http://jsonx.org/schema-0.3.jsdx)\n[![JSD](https://img.shields.io/badge/schema.jsd-v0.3-orange.svg)](http://jsonx.org/schema-0.3.jsd)\u003cbr\u003e\n[![Build Status](https://img.shields.io/badge/test-passing-yellow.svg)](https://github.com/jsonx-org/schema/actions/workflows/test.yml)\n[![XSD](https://img.shields.io/badge/schema.xsd-v0.2-yellow.svg)](http://jsonx.org/schema-0.2.xsd)\n[![JSDx](https://img.shields.io/badge/schema.jsdx-v0.2-yellow.svg)](http://jsonx.org/schema-0.2.jsdx)\n[![JSD](https://img.shields.io/badge/schema.jsd-v0.2-yellow.svg)](http://jsonx.org/schema-0.2.jsd)\u003cbr\u003e\n[![Build Status](https://img.shields.io/badge/test-passing-yellow.svg)](https://github.com/jsonx-org/schema/actions/workflows/test.yml)\n[![XSD](https://img.shields.io/badge/schema.xsd-v0.1-yellow.svg)](http://jsonx.org/schema-0.1.xsd)\n[![JSDx](https://img.shields.io/badge/schema.jsdx-v0.1-inactive.svg)]()\n[![JSD](https://img.shields.io/badge/schema.jsd-v0.1-inactive.svg)]()\n\n## Abstract\n\nThis document specifies the \u003cins\u003eJSON Schema Definition Language\u003c/ins\u003e, which allows for the description of the structure and to constrain the contents of JSON documents. The \u003cins\u003eschema language\u003c/ins\u003e is represented in two different but equally translatable vocabularies: a JSON vocabulary, and an XML vocabulary. The \u003cins\u003eschema language\u003c/ins\u003e extends the capabilities found in JSON documents.\n\n## Table of Contents\n\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u003c/samp\u003e1 [\u003cins\u003eIntroduction\u003c/ins\u003e](#1-introduction)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e1.1 [Dependencies on Other Specifications](#11-dependencies-on-other-specifications)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e1.2 [Conventions Used in This Document](#12-conventions-used-in-this-document)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u003c/samp\u003e2 [\u003cins\u003ePurpose\u003c/ins\u003e](#2-purpose)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u003c/samp\u003e3 [\u003cins\u003eRequirements\u003c/ins\u003e](#3-requirements)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4 [\u003cins\u003eSpecification\u003c/ins\u003e](#4-specification)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.1 [Schema Document][#schema]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2 [Constraint Types][#constraint-types]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.1 [\u003ccode\u003eboolean\u003c/code\u003e][#boolean]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.2 [\u003ccode\u003enumber\u003c/code\u003e][#number]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.2.1 [\u003ccode\u003enumber.scale\u003c/code\u003e][#number-scale]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.2.2 [\u003ccode\u003enumber.range\u003c/code\u003e][#number-range]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.3 [\u003ccode\u003estring\u003c/code\u003e][#string]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.3.1 [\u003ccode\u003estring.pattern\u003c/code\u003e][#string-pattern]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.4 [\u003ccode\u003eobject\u003c/code\u003e][#object]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.4.1 [\u003ccode\u003eobject.properties\u003c/code\u003e][#object-properties]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.4.2 [Property Names][#property-names]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.4.3 [\u003ccode\u003eobject.abstract\u003c/code\u003e][#object-abstract]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.4.4 [\u003ccode\u003eobject.extends\u003c/code\u003e][#object-extends]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.4.4.1 [Type Declarations][#object-type-declarations]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.4.4.2 [Object Properties][#object-object-properties]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.5 [\u003ccode\u003earray\u003c/code\u003e][#array]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.5.1 [\u003ccode\u003earray.elements\u003c/code\u003e][#array-array-elements]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.5.2 [\u003ccode\u003earray.minIterate\u003c/code\u003e and \u003ccode\u003earray.maxIterate\u003c/code\u003e][#array-iterate]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.6 [\u003ccode\u003ereference\u003c/code\u003e][#reference]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.6.1 [\u003ccode\u003ereference.type\u003c/code\u003e][#reference-type]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.6.1.1 [Object Properties][#reference-object-properties]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.6.1.2 [Array Elements][#reference-array-elements]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.7 [\u003ccode\u003eany\u003c/code\u003e][#any]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.7.1 [\u003ccode\u003eany.types\u003c/code\u003e][#any-types]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.7.1.1 [Object Properties][#any-object-properties]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.7.1.2 [Array Elements][#any-array-elements]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.3 [Type Declarations][#type-declarations]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.4 [Object Properties][#object-properties]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.5 [Array Elements][#array-elements]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.6 [Language specific bindings][#bindings]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.6.1 [Type Bindings][#type-bindings]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.6.2 [Field Bindings][#field-bindings]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.6.3 [Type/Field Bindings][#typefield-bindings]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.6.4 [Examples](#464-examples)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u003c/samp\u003e5 [\u003cins\u003eRelated Resources for JSON Schema\u003c/ins\u003e](#5-related-resources-for-json-schema)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e5.1 [Schemas for JSON Schema](#51-schemas-for-json-schema)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e5.1.1 [Development](#511-development)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e5.1.2 [Current](#512-current)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e5.1.3 [Obsolete](#513-obsolete)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u003c/samp\u003e6 [\u003cins\u003eSample Schemas\u003c/ins\u003e](#6-sample-schemas)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e6.1 [`structure.jsdx`](#61-structurejsdx)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e6.2 [`structure.jsd`](#62-structurejsd)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e6.3 [`datatype.jsdx`](#63-datatypejsdx)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e6.4 [`datatype.jsd`](#64-datatypejsd)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e6.5 [`binding.jsdx`](#65-bindingjsdx)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e6.6 [`binding.jsd`](#65-bindingjsd)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u003c/samp\u003e7 [\u003cins\u003eContributing\u003c/ins\u003e](#7-contributing)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u003c/samp\u003e8 [\u003cins\u003eSpecial Thanks\u003c/ins\u003e](#8-special-thanks)\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u003c/samp\u003e9 [\u003cins\u003eLicense\u003c/ins\u003e](#9-license)\n\n## \u003cb\u003e1\u003c/b\u003e \u003cins\u003eIntroduction\u003c/ins\u003e\n\nThis document sets out the structural part of the \u003cins\u003eJSON Schema Definition Language\u003c/ins\u003e. It also contains a directory of links to these related resources.\n\nThe \u003cins\u003eJSON Schema Definition Language\u003c/ins\u003e is designed to describe JSON documents by using schema components to constrain and document the meaning, usage and relationships of their constituent parts: value types and their content. Schemas may also provide for the specification of additional document information, such as normalization and defaulting of values. Schemas have facilities for self-documentation. Thus, the \u003cins\u003eJSON Schema Definition Language\u003c/ins\u003e can be used to define, describe and catalogue JSON vocabularies for JSON documents.\n\nAny application that consumes well-formed JSON can use the \u003cins\u003eJSON Schema Definition Language\u003c/ins\u003e formalism to express syntactic, structural and value constraints applicable to its document instances. The \u003cins\u003eJSON Schema Definition Language\u003c/ins\u003e formalism allows a useful level of constraint checking to be described and implemented for a wide spectrum of JSON applications. However, the language defined by this specification does not attempt to provide _all_ the facilities that might be needed by any application. Some applications may require constraint capabilities not expressible in this language, and so may need to perform their own additional validations.\n\n### \u003cb\u003e1.1\u003c/b\u003e Dependencies on Other Specifications\n\nThe definition of the \u003cins\u003eJSON Schema Definition Language\u003c/ins\u003e depends on the following specifications: [RFC4627\u003csup\u003e❐\u003c/sup\u003e][rfc4627], [RFC7159\u003csup\u003e❐\u003c/sup\u003e][rfc7159], and [XMLSchema\u003csup\u003e❐\u003c/sup\u003e][xmlschema].\n\n### \u003cb\u003e1.2\u003c/b\u003e Conventions Used in This Document\n\nThe 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][rfc2119].\n\n## \u003cb\u003e2\u003c/b\u003e \u003cins\u003ePurpose\u003c/ins\u003e\n\nProvide a \u003cins\u003eschema language\u003c/ins\u003e to describe normative contracts between producer and consumer ends of a protocol exchanging JSON documents.\n\n## \u003cb\u003e3\u003c/b\u003e \u003cins\u003eRequirements\u003c/ins\u003e\n\n1. The \u003cins\u003eschema language\u003c/ins\u003e MUST constrain and document the meaning, usage, constraints and relationships of the constituent parts of a JSON document.\n\n1. The \u003cins\u003eschema language\u003c/ins\u003e MUST provide meaningful and useful constraint rules for the 5 JSON value types: `boolean`, `number`, `string`, `object`, and `array`.\n\n1. The \u003cins\u003eschema language\u003c/ins\u003e MUST support schema descriptions for any and all legal JSON documents, as specified by [RFC2119][rfc2119].\n\n1. The \u003cins\u003eschema language\u003c/ins\u003e MUST be free-of and agnostic-to patterns specific to any particular programming language.\n\n1. The \u003cins\u003eschema language\u003c/ins\u003e MUST be able to describe itself.\n\n## \u003cb\u003e4\u003c/b\u003e \u003cins\u003eSpecification\u003c/ins\u003e\n\nThe \u003cins\u003eJSON Schema Definition Language\u003c/ins\u003e (JSD) is normatively defined in an \u003cins\u003eXML Schema Document\u003c/ins\u003e, with translations expressed in the \u003cins\u003eJSON/XML Schema Definition Language\u003c/ins\u003e (JSDx), as well as the \u003cins\u003eJSON Schema Definition Language\u003c/ins\u003e (JSD) itself.\n\nThe \u003cins\u003eJSDx\u003c/ins\u003e format offers XML validation, and using an XML IDE like [oXygen XML Editor\u003csup\u003e❐\u003c/sup\u003e][oxygenxml] offers edit-time XML validation, such as:\n\n\u003cimg src=\"https://user-images.githubusercontent.com/1258414/61751752-aae93800-ada9-11e9-88b1-65de08f125b5.png\" width=\"75%\"\u003e\n\nWhen using the \u003cins\u003eJSDx\u003c/ins\u003e format with the [oXygen XML Editor\u003csup\u003e❐\u003c/sup\u003e][oxygenxml], the auto-completion features of the editor will guide you in writing the schema. With the \u003cins\u003eJSDx\u003c/ins\u003e format, the XML editor will also validate keys and keyrefs to ensure that declared types are referenced correctly.\n\nThe JSD is comprised of 5 structural abstractions:\n\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.1 [Schema Document][#schema]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2 [Constraint Types][#constraint-types]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.1 [\u003ccode\u003eboolean\u003c/code\u003e][#boolean]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.2 [\u003ccode\u003enumber\u003c/code\u003e][#number]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.2.1 [\u003ccode\u003enumber.scale\u003c/code\u003e][#number-scale]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.2.2 [\u003ccode\u003enumber.range\u003c/code\u003e][#number-range]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.3 [\u003ccode\u003estring\u003c/code\u003e][#string]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.3.1 [\u003ccode\u003estring.pattern\u003c/code\u003e][#string-pattern]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.4 [\u003ccode\u003eobject\u003c/code\u003e][#object]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.4.1 [\u003ccode\u003eobject.properties\u003c/code\u003e][#object-properties]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.4.2 [Property Names][#property-names]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.4.3 [\u003ccode\u003eobject.abstract\u003c/code\u003e][#object-abstract]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.4.4 [\u003ccode\u003eobject.extends\u003c/code\u003e][#object-extends]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.4.4.1 [Type Declarations][#object-type-declarations]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.4.4.2 [Object Properties][#object-object-properties]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.5 [\u003ccode\u003earray\u003c/code\u003e][#array]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.5.1 [\u003ccode\u003earray.elements\u003c/code\u003e][#array-array-elements]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.5.2 [\u003ccode\u003earray.minIterate\u003c/code\u003e and \u003ccode\u003earray.maxIterate\u003c/code\u003e][#array-iterate]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.6 [\u003ccode\u003ereference\u003c/code\u003e][#reference]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.6.1 [\u003ccode\u003ereference.type\u003c/code\u003e][#reference-type]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.6.1.1 [Object Properties][#reference-object-properties]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.6.1.2 [Array Elements][#reference-array-elements]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.7 [\u003ccode\u003eany\u003c/code\u003e][#any]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.7.1 [\u003ccode\u003eany.types\u003c/code\u003e][#any-types]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.7.1.1 [Object Properties][#any-object-properties]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.2.7.1.2 [Array Elements][#any-array-elements]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.3 [Type Declarations][#type-declarations]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.4 [Object Properties][#object-properties]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.5 [Array Elements][#array-elements]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.6 [Language specific bindings][#bindings]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.6.1 [Type Bindings][#type-bindings]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.6.2 [Field Bindings][#field-bindings]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.6.3 [Type/Field Bindings][#typefield-bindings]\u003cbr\u003e\n\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e4.6.4 [Examples](#464-examples)\n\n### \u003cb\u003e4.1\u003c/b\u003e Schema Document\n\nThe \u003csamp\u003e**schema**\u003c/samp\u003e is the root object of the JSD, and contains [type][#type-declarations] definitions.\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Name**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Value**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|:-|:-|:-|\n| \u003csamp\u003e( **schema** )\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; | \u003csamp\u003ejx:ns\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003ejx:schemaLocation\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003ejx:targetNamespace\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003edoc\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e[a-zA-Z_$][-a-zA-Z\\\\d_$]*\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; | _Namespace of the JSON Schema._ Required.\u003cbr\u003e\u0026nbsp;\u0026nbsp;Used by schema processors to determine to which\u003cbr\u003e\u0026nbsp;\u0026nbsp;version of the JSON Schema the JSD is written.\u003cbr\u003e_Location URL of namespace._ Optional.\u003cbr\u003e\u0026nbsp;\u0026nbsp;Specified as: `\"%NAMESPACE_URI% %LOCATION_URL%\"`\u003cbr\u003e\u0026nbsp;\u0026nbsp;Used by schema processors to determine location of\u003cbr\u003e\u0026nbsp;\u0026nbsp;schema definition for a namespace.\u003cbr\u003e_Target namespace of schema document._ Optional.\u003cbr\u003e\u0026nbsp;\u0026nbsp;Specified as: `\"%NAMESPACE_URI%\"`\u003cbr\u003e\u0026nbsp;\u0026nbsp;Represents the namespace of elements declared\u003cbr\u003e\u0026nbsp;\u0026nbsp;within the schema document.\u003cbr\u003eText comments. Optional.\u003cbr\u003e_[Type Declaration][#type-declarations]_. Optional.\u003cbr\u003e\u0026nbsp;\u0026nbsp;Root object definitions that are referenceable\u003cbr\u003e\u0026nbsp;\u0026nbsp;throughout the schema. |\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\n```json\n{\n  \"jx:ns\": \"http://www.jsonx.org/schema-0.4.jsd\",\n  \"jx:schemaLocation\": \"http://www.jsonx.org/schema-0.4.jsd http://www.jsonx.org/schema.jsd\",\n  \"jx:targetNamespace\": \"https://www.jsonx.org/example.jsd\"\n  ...\n}\n```\n\n###### **JSDx**\n\n```xml\n\u003cschema\n  xmlns=\"http://www.jsonx.org/schema-0.4.xsd\"\n  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n  xsi:schemaLocation=\"http://www.jsonx.org/schema-0.4.xsd http://www.jsonx.org/schema.xsd\"\u003e\n  targetNamespace=\"https://www.jsonx.org/example.jsdx\"\u003e\n  ...\n\u003c/schema\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n### \u003cb\u003e4.2\u003c/b\u003e Constraint Types\n\nThe \u003cins\u003eConstraint Types\u003c/ins\u003e define the constraint properties for the five JSON value types: \u003csamp\u003e**boolean**\u003c/samp\u003e, \u003csamp\u003e**number**\u003c/samp\u003e, \u003csamp\u003e**string**\u003c/samp\u003e, \u003csamp\u003e**object**\u003c/samp\u003e, and \u003csamp\u003e**array**\u003c/samp\u003e. Aditionally, the \u003cins\u003eJSON Schema Definition Language\u003c/ins\u003e defines two meta \u003cins\u003eConstraint Types\u003c/ins\u003e named \u003csamp\u003e**any**\u003c/samp\u003e and \u003csamp\u003e**reference**\u003c/samp\u003e.\n\nThe JSD has 3 different scopes where \u003cins\u003eConstraint Types\u003c/ins\u003e can be defined, which provide different sets of their own constraint properties that apply to all \u003cins\u003eConstraint Types\u003c/ins\u003e:\n\n1. [Type Declarations][#type-declarations].\n1. [Object Properties][#object-properties].\n1. [Array Elements][#array-elements].\n\nEach \u003cins\u003eConstraint Type\u003c/ins\u003e supports the `doc` attribute.\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Name**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Value**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|:-|:-|:-|\n| \u003csamp\u003e( [**boolean**][#boolean] \\|\u0026nbsp;\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[**number**][#number] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[**string**][#string] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[**object**][#object] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[**array**][#array] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[any][#any] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[reference][#reference] )\u003c/samp\u003e | \u003csamp\u003edoc\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; | Text comments. Optional.\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; |\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\n```json\n{ \"doc\": \"Comment for this element\",\n  ...\n}\n```\n\n###### **JSDx**\n\n```xml\n\u003cany doc=\"Comment for this element\"\u003e\n  ...\n\u003c/any\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n#### \u003cb\u003e4.2.1\u003c/b\u003e `boolean`\n\nThe \u003csamp\u003e**boolean**\u003c/samp\u003e type is used for the boolean values: `true` and `false`.\n\nThe \u003csamp\u003e**boolean**\u003c/samp\u003e type does not have validation constraints.\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Name**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Value**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|:-|:-|:-|\n| \u003csamp\u003e( **boolean** )\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; | \u003csamp\u003ejx:type\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003ebindings\u003c/samp\u003e\u003cbr\u003e\u0026nbsp; | \u003csamp\u003eboolean\u003c/samp\u003e\u003cbr\u003e[Bindings declaration][#bindings]\u003cbr\u003e\u0026nbsp;\u0026nbsp;Specifies the language specific bindings. |\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations], [object properties][#object-properties], and [array elements][#array-elements]:\n\n```json\n{ \"jx:type\": \"boolean\" }\n```\n\n###### **JSDx**\n\nUsage for [type declarations][#type-declarations] and [array elements][#array-elements]:\n\n```xml\n\u003cboolean/\u003e\n```\n\nUsage for [object properties][#object-properties]:\n\n```xml\n\u003cproperty xsi:type=\"boolean\"/\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `true` | :white_check_mark: | The value `true`. |\n| `false` | :white_check_mark: | The value `false`. |\n| `TRUE` | :x: | `TRUE` is not a valid **boolean** type. |\n| `FALSE` | :x: | `FALSE` is not a valid **boolean** type. |\n| `0` | :x: | `0` is not a valid **boolean** type. |\n| `1` | :x: | `1` is not a valid **boolean** type. |\n| `\"true\"` | :x: | Boolean as string. |\n\n#### \u003cb\u003e4.2.2\u003c/b\u003e `number`\n\nUsed for any numeric type, either integers or floating point numbers.\n\nThe \u003csamp\u003e**number**\u003c/samp\u003e type defines two constraint properties for \u003csamp\u003e**number**\u003c/samp\u003e JSON value type: \u003csamp\u003escale\u003c/samp\u003e, and \u003csamp\u003erange\u003c/samp\u003e.\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Name**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Value**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|:-|:-|:-|\n| \u003csamp\u003e( **number** )\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; | \u003csamp\u003ejx:type\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003escale\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003erange\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003ebindings\u003c/samp\u003e\u003cbr\u003e\u0026nbsp; | \u003csamp\u003enumber\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e(0\\|1\\|2\\|...)\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u0026nbsp;The number of digits to the right of the decimal point.\u003cbr\u003e\u0026nbsp;\u0026nbsp;**If a value is not specified, the scale is unbounded.**\u003cbr\u003e_Numerical range_\u003cbr\u003e\u0026nbsp;\u0026nbsp;Specifies the minimum and maximum limits in [interval\u003cbr\u003enotation\u003csup\u003e❐\u003c/sup\u003e][interval-notation].\u003cbr\u003e[Bindings declaration][#bindings]\u003cbr\u003e\u0026nbsp;\u0026nbsp;Specifies the language specific bindings. |\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations], [object properties][#object-properties], and [array elements][#array-elements]:\n\n```json\n{ \"jx:type\": \"number\" }\n```\n\n###### **JSDx**\n\nUsage for [type declarations][#type-declarations] and [array elements][#array-elements]:\n\n```xml\n\u003cnumber/\u003e\n```\n\nUsage for [object properties][#object-properties]:\n\n```xml\n\u003cproperty xsi:type=\"number\"/\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `5` | :white_check_mark: | Integer. |\n| `-7.12` | :white_check_mark: | Floating point number. |\n| `12.332794E-5` | :white_check_mark: | Exponential notation. |\n| `\"7\"` | :x: | Number as string. |\n\n##### \u003cb\u003e4.2.2.1\u003c/b\u003e `number.scale`\n\nThe `scale` property specifies the maximum number of accepted digits after the decimal point.\n\nA `scale` of `3` represents a number with a maximum of 3 digits after the decimal.\u003cbr\u003eA `scale` of `0` represents an integer.\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations], [object properties][#object-properties], and [array elements][#array-elements]:\n\n```json\n{ \"jx:type\": \"number\", \"scale\": 2 }\n```\n\n###### **JSDx**\n\nUsage for [type declarations][#type-declarations] and [array elements][#array-elements]:\n\n```xml\n\u003cnumber scale=\"2\"/\u003e\n```\n\nUsage for [object properties][#object-properties]:\n\n```xml\n\u003cproperty xsi:type=\"number\" scale=\"2\"/\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `5.12` | :white_check_mark: | Floating point number with 2 digits after the decimal point. |\n| `9.2E-1` | :white_check_mark: | Exponential notation representing a number with 2 digits after the decimal point. |\n| `-0.1` | :white_check_mark: | Floating point number with 1 digit after the decimal point. |\n| `8.123` | :x: | Floating point number with 3 digits after the decimal point. |\n| `8.3E-2` | :x: | Exponential notation representing a number with 3 digits after the decimal point. |\n| `\"7.65\"` | :x: | Number as string. |\n\n##### \u003cb\u003e4.2.2.2\u003c/b\u003e `number.range`\n\nThe `range` property specifies the numerical range (min and max) of accepted values in [interval notation\u003csup\u003e❐\u003c/sup\u003e][interval-notation].\n\nA `range` of `[0,10]` represents a number between `0` (inclusive) and `10` (inclusive).\u003cbr\u003eA `range` of `(0,10)` represents a number between `0` (exclusive) and `10` (exclusive).\u003cbr\u003eA `range` of `(1.2E1,)` represents a number greater than `1.2E1` (exclusive).\u003cbr\u003eA `range` of `(,-9.8]` represents a number less than `9.8` (inclusive).\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations], [object properties][#object-properties], and [array elements][#array-elements]:\n\n```json\n{ \"jx:type\": \"number\", \"range\": \"[-2,7.5)\" }\n```\n\n###### **JSDx**\n\nUsage for [type declarations][#type-declarations] and [array elements][#array-elements]:\n\n```xml\n\u003cnumber range=\"[-2,7.5)\"/\u003e\n```\n\nUsage for [object properties][#object-properties]:\n\n```xml\n\u003cproperty xsi:type=\"number\" range=\"[-2,7.5)\"/\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `5.12` | :white_check_mark: | Floating point number between `-2` (inclusive) and `7.5` (exclusive). |\n| `0.3E1` | :white_check_mark: | Exponential notation representing a number between `-2` (inclusive) and `7.5` (exclusive). |\n| `-2` | :white_check_mark: | Integer between `-2` (inclusive) and `7.5` (exclusive). |\n| `7.49999999999` | :white_check_mark: | Floating point number between `-2` (inclusive) and `7.5` (exclusive). |\n| `-2.0000000001` | :x: | Floating point number less than `-2` (inclusive). |\n| `7.5` | :x: | Floating point number greater than `7.5` (exclusive). |\n| `\"6.65\"` | :x: | Number as string. |\n\n#### \u003cb\u003e4.2.3\u003c/b\u003e `string`\n\nThe \u003csamp\u003e**string**\u003c/samp\u003e type is used for strings of text. It may contain Unicode characters.\n\nThe \u003csamp\u003e**string**\u003c/samp\u003e type defines one constraint property for \u003csamp\u003e**string**\u003c/samp\u003e JSON value type: \u003csamp\u003epattern\u003c/samp\u003e.\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Name**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Value**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|:-|:-|:-|\n| \u003csamp\u003e( **string** )\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; | \u003csamp\u003ejx:type\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003epattern\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003ebindings\u003c/samp\u003e\u003cbr\u003e\u0026nbsp; | \u003csamp\u003estring\u003c/samp\u003e\u003cbr\u003e_Regular expression_\u003cbr\u003e\u0026nbsp;\u0026nbsp;Specifies the regular expression.\u003cbr\u003e[Bindings declaration][#bindings]\u003cbr\u003e\u0026nbsp;\u0026nbsp;Specifies the language specific bindings. |\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations], [object properties][#object-properties], and [array elements][#array-elements]:\n\n```json\n{ \"jx:type\": \"string\" }\n```\n\n###### **JSDx**\n\nUsage for [type declarations][#type-declarations] and [array elements][#array-elements]:\n\n```xml\n\u003cstring/\u003e\n```\n\nUsage for [object properties][#object-properties]:\n\n```xml\n\u003cproperty xsi:type=\"string\"/\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `\"Déjà vu\"` | :white_check_mark: | String with unicode. |\n| `\"D\\u00e9j\\u00e0 vu\"` | :white_check_mark: | String with escaped unicode. |\n| `\"\"` | :white_check_mark: | Empty string. |\n| `\"42\"` | :white_check_mark: | String representing a number. |\n| `42` | :x: | A number. |\n\n##### \u003cb\u003e4.2.3.1\u003c/b\u003e `string.pattern`\n\nThe `pattern` property is used to restrict a string to a particular regular expression, as defined in JavaScript ([ECMA 262\u003csup\u003e❐\u003c/sup\u003e][ecma262]).\n\nA `pattern` of `^[a-z]+$` represents a string of one or more lowercase latin characters.\u003cbr\u003eA `pattern` of `^.{12}$` represents a string of any 12 characters.\u003cbr\u003eA `pattern` of `^(\\(\\d{3}\\) )?\\d{3}-\\d{4}$` represents a string matching a US phone number.\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations], [object properties][#object-properties], and [array elements][#array-elements]:\n\n```json\n{ \"jx:type\": \"string\", \"pattern\": \"^(\\\\(\\\\d{3}\\\\) )?\\\\d{3}-\\\\d{4}$\" }\n```\n\n###### **JSDx**\n\nUsage for [type declarations][#type-declarations] and [array elements][#array-elements]:\n\n```xml\n\u003cstring pattern=\"^(\\\\(\\\\d{3}\\\\) )?\\\\d{3}-\\\\d{4}$\"/\u003e\n```\n\nUsage for [object properties][#object-properties]:\n\n```xml\n\u003cproperty xsi:type=\"string\" pattern=\"^(\\\\(\\\\d{3}\\\\) )?\\\\d{3}-\\\\d{4}$\"/\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `\"(800) 356-9377\"` | :white_check_mark: | String with a 10 digit phone number. |\n| `\"356-9377\"` | :white_check_mark: | String with a 7 digit phone number. |\n| `\"(888) 356-9377 ext. 111\"` | :x: | Unmatched \"ext. 111\". |\n| `\"(800) FLO-WERS\"` | :x: | Phone number with letters. |\n| `\"\"` | :x: | Empty string. |\n\n#### \u003cb\u003e4.2.4\u003c/b\u003e `object`\n\nThe \u003csamp\u003e**object**\u003c/samp\u003e type is used for mapping \"keys\" to \"values\".\n\nThe \u003csamp\u003e**object**\u003c/samp\u003e type defines three constraint properties for \u003csamp\u003e**object**\u003c/samp\u003e JSON value type: \u003csamp\u003eabstract\u003c/samp\u003e, \u003csamp\u003eextends\u003c/samp\u003e, and named \u003csamp\u003eproperties\u003c/samp\u003e.\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Name**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Value**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|:-|:-|:-|\n| \u003csamp\u003e( **object** )\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; | \u003csamp\u003ejx:type\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003eproperties\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003eabstract\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003eextends\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; | \u003csamp\u003eobject\u003c/samp\u003e\u003cbr\u003e_[Property declarations][#object-properties]_\u003cbr\u003e\u0026nbsp;\u0026nbsp;Map of object properties.\u003cbr\u003e\u003csamp\u003e(true\\|**false**)\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u0026nbsp;Whether the object is not allowed to be instantiated.\u003cbr\u003e_Name [\u003csamp\u003e( [**object**][#object] )\u003c/samp\u003e type][#object]_\u003cbr\u003e\u0026nbsp;\u0026nbsp;Name of root-level object type declaration specifying\u003cbr\u003e\u0026nbsp;\u0026nbsp;object inheritence. |\n\n_The default **object** is not very useful, because it has no property mappings._\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations], [object properties][#object-properties], and [array elements][#array-elements]:\n\n```json\n{ \"jx:type\": \"object\" }\n```\n\n###### **JSDx**\n\nUsage for [type declarations][#type-declarations] and [array elements][#array-elements]:\n\n```xml\n\u003cobject/\u003e\n```\n\nUsage for [object properties][#object-properties]:\n\n```xml\n\u003cproperty xsi:type=\"object\"/\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `{}` | :white_check_mark: | An object without properties. |\n| `{\"foo\":\"bar\"}` | :x: | An object with property \"foo\" mapping to value \"bar\". |\n\n##### \u003cb\u003e4.2.4.1\u003c/b\u003e `object.properties`\n\nThe `properties` property specifies a map of accepted properties for the object.\n\nKeys in the `properties` map are considered as regular expressions (for more info, see [Property Names][#property-names]).\u003cbr\u003eValues in the `properties` map are objects specifying accepted [constraint types][#object-properties].\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations], [object properties][#object-properties], and [array elements][#array-elements]:\n\n```json\n{ \"jx:type\": \"object\", \"properties\": {\n  \"foo\": { \"jx:type\": \"string\", \"pattern\": \"^[a-z]{,3}$\", \"nullable\": true, \"use\": \"optional\" } }\n}\n```\n\n###### **JSDx**\n\nUsage for [type declarations][#type-declarations] and [array elements][#array-elements]:\n\n```xml\n\u003cobject\u003e\n  \u003cproperty name=\"foo\" xsi:type=\"string\" pattern=\"^[a-z]{,3}$\" nullable=\"true\" use=\"optional\"/\u003e\n\u003c/object\u003e\n```\n\nUsage for [object properties][#object-properties]:\n\n```xml\n\u003cproperty xsi:type=\"object\"\u003e\n  \u003cproperty name=\"foo\" xsi:type=\"string\" pattern=\"^[a-z]{,3}$\" nullable=\"true\" use=\"optional\"/\u003e\n\u003c/property\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `{\"foo\":\"bar\"}` | :white_check_mark: | An object with property \"foo\" mapping to value \"bar\". |\n| `{\"foo\":\"\"}` | :white_check_mark: | An object with property \"foo\" mapping to empty string. |\n| `{}` | :white_check_mark: | An object without properties is ok, because \"foo\" is optional. |\n| `{\"foo\":null}` | :white_check_mark: | An object with property \"foo\" mapping to `null` is ok, because \"foo\" is nullable. |\n| `{\"foo\":false}` | :x: | An object with property \"foo\" mapping to `false`. |\n| `{\"other\":\"\"}` | :x: | An object with property \"other\" mapping to empty string. |\n\n##### \u003cb\u003e4.2.4.2\u003c/b\u003e Property Names\n\nNames of object properties are considered as regular expressions. If an object declaration defines a property with the name \u003csamp\u003e\"[a-z]+\"\u003c/samp\u003e, it means that this name matches any property whose name is one or more alpha characters. This also means that the name \u003csamp\u003e\"foo\"\u003c/samp\u003e will only match \"foo\". If an object defines a property with a regular expression name that matches more than 1 string, the object will accept all the matching names (i.e. an object with multiple properties that match a single property definition with a regular expression name will be valid). If, however, there are multiple defined properties with regular expression name patterns that capture the same name, an associated value will be validated against the first matching property definition. The example below shows an \u003csamp\u003e**any**\u003c/samp\u003e property that matches all names. Such a definition of an **object** type will match any object, except for `{}` (because at least one \u003csamp\u003e**any**\u003c/samp\u003e property is required).\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations], [object properties][#object-properties], and [array elements][#array-elements]:\n\n```json\n{ \"jx:type\": \"object\", \"properties\": {\n  \".*\": { \"jx:type\": \"any\" } }\n}\n```\n\n###### **JSDx**\n\nUsage for [type declarations][#type-declarations] and [array elements][#array-elements]:\n\n```xml\n\u003cobject\u003e\n  \u003cproperty name=\".*\" xsi:type=\"any\"/\u003e\n\u003c/object\u003e\n```\n\nUsage for [object properties][#object-properties]:\n\n```xml\n\u003cproperty xsi:type=\"object\"\u003e\n  \u003cproperty name=\".*\" xsi:type=\"any\"/\u003e\n\u003c/property\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `{\"foo\":\"bar\"}` | :white_check_mark: | Any property is valid. |\n| `{\"foo\":\"bar\",\"wow\":true}` | :white_check_mark: | Any property is valid. |\n| `{\"foo\":\"bar\",\"wow\":true,\"cool\":42}` | :white_check_mark: | Any property is valid. |\n| `{}` | :x: | At least one \u003csamp\u003e**any**\u003c/samp\u003e property is required. |\n\n##### \u003cb\u003e4.2.4.3\u003c/b\u003e `object.abstract`\n\nThe `abstract` property specifies whether the declared object is allowed to represent a value instance.\n\nIf `abstract` is true, a value of the declared type is allowed to exits.\u003cbr\u003eIf `abstract` is false, the declared type can only be used as a super-type of another object type declaration specifying the `extends` property that links to the name of the abstract type.\u003cbr\u003e_**The `abstract` property is only allowed to appear on [type declarations][#type-declarations].**_\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations]:\n\n```json\n{ \"myAbstractObject\":\n    { \"jx:type\": \"object\", \"abstract\": true, \"properties\": {\n      \"foo\": { \"jx:type\": \"string\", \"pattern\": \"^[a-z]{,3}$\", \"nullable\": true, \"use\": \"optional\" } } }\n}\n```\n\n###### **JSDx**\n\nUsage for [type declarations][#type-declarations]:\n\n```xml\n\u003cobject name=\"myAbstractObject\" abstract=\"true\"\u003e\n  \u003cproperty name=\"foo\" xsi:type=\"string\" pattern=\"^[a-z]{,3}$\" nullable=\"true\" use=\"optional\"/\u003e\n\u003c/object\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `{\"foo\":\"bar\"}` | :x: | Instances of `myAbstractObject` are not allowed.\u003cbr\u003eRefer to `extends` property below. |\n\n##### \u003cb\u003e4.2.4.4\u003c/b\u003e `object.extends`\n\nThe `extends` property accepts a name of an **object** type declaration, which specifies object inheritence.\n\nThe `extends` property can only specify names of **object** [type declarations][#type-declarations].\u003cbr\u003eThe `extends` property can specify names of **object** [type declarations][#type-declarations] that are `abstract`, or not.\n\n###### \u003cb\u003e4.2.4.4.1\u003c/b\u003e Type declarations\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations]:\n\n```json\n{ \"myAbstractObject\":\n    { \"jx:type\": \"object\", \"abstract\": true, \"properties\": {\n      \"foo\": { \"jx:type\": \"string\", \"pattern\": \"^[a-z]{,3}$\", \"nullable\": true, \"use\": \"optional\" } } },\n  \"myRealObject\":\n    { \"jx:type\": \"object\", \"extends\": \"myAbstractObject\", \"properties\": {\n      \"thisIsCool\": { \"jx:type\": \"boolean\", \"nullable\": false } } }\n}\n```\n\n###### **JSDx**\n\nUsage for [type declarations][#type-declarations]:\n\n```xml\n\u003cobject name=\"myAbstractObject\" abstract=\"true\"\u003e\n  \u003cproperty name=\"foo\" xsi:type=\"string\" pattern=\"^[a-z]{,3}$\" nullable=\"true\" use=\"optional\"/\u003e\n\u003c/object\u003e\n\u003cobject name=\"myRealObject\" extends=\"myAbstractObject\"\u003e\n  \u003cproperty name=\"thisIsCool\" xsi:type=\"boolean\" nullable=\"false\"/\u003e\n\u003c/object\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `{\"foo\":\"bar\"}` | :white_check_mark: | An instance of `myRealObject` object with property \"foo\" mapping to value \"bar\". |\n| `{\"foo\":\"bar\",\"thisIsCool\":true}` | :white_check_mark: | An instance of `myRealObject` object with property \"foo\" mapping to value \"bar\", and \"thisIsCool\" to true. |\n| `{\"foo\":\"\"}` | :white_check_mark: | An instance of `myRealObject` object with property \"foo\" mapping to empty string. |\n| `{\"thisIsCool\":true}` | :white_check_mark: | An instance of `myRealObject` object with property \"thisIsCool\" mapping to true. |\n| `{\"thisIsCool\":null}` | :x: | The property \"thisIsCool\" is not nullable. |\n\n###### \u003cb\u003e4.2.4.4.2\u003c/b\u003e Object Properties\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [object properties][#object-properties]:\n\n```json\n{ \"myAbstractObject\":\n    { \"jx:type\": \"object\", \"abstract\": true, \"properties\": {\n      \"foo\": { \"jx:type\": \"string\", \"pattern\": \"^[a-z]{,3}$\", \"nullable\": true, \"use\": \"optional\" } } },\n  \"rootObject\":\n    { \"jx:type\": \"object\", \"abstract\": true, \"properties\": {\n      \"myRealObject\":\n        { \"jx:type\": \"object\", \"extends\": \"myAbstractObject\", \"properties\": {\n          \"thisIsCool\": { \"jx:type\": \"boolean\", \"nullable\": false } } }\n}\n```\n\n###### **JSDx**\n\nUsage for [object properties][#object-properties]:\n\n```xml\n\u003cobject name=\"myAbstractObject\" abstract=\"true\"\u003e\n  \u003cproperty name=\"foo\" xsi:type=\"string\" pattern=\"^[a-z]{,3}$\" nullable=\"true\" use=\"optional\"/\u003e\n\u003c/object\u003e\n\u003cobject name=\"rootObject\"\u003e\n  \u003cproperty xsi:type=\"object\" extends=\"myAbstractObject\"\u003e\n    \u003cproperty name=\"thisIsCool\" xsi:type=\"boolean\" nullable=\"false\"/\u003e\n  \u003c/property\u003e\n\u003c/object\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `{\"myRealObject\": {\"foo\":\"bar\"}}` | :white_check_mark: | A `rootObject` object with an instance of `myRealObject` object with property \"foo\" mapping to value \"bar\". |\n| `{\"myRealObject\": {\"foo\":\"bar\",\"thisIsCool\":true}}` | :white_check_mark: | A `rootObject` object with an instance of `myRealObject` object with property \"foo\" mapping to value \"bar\", and \"thisIsCool\" to true. |\n| `{\"myRealObject\": {\"foo\":\"\"}}` | :white_check_mark: | A `rootObject` object with an instance of `myRealObject` object with property \"foo\" mapping to empty string. |\n| `{\"myRealObject\": {\"thisIsCool\":true}}` | :white_check_mark: | A `rootObject` object with an instance of `myRealObject` object with property \"thisIsCool\" mapping to true. |\n| `{\"myRealObject\": {\"thisIsCool\":null}}` | :x: | The property \"thisIsCool\" is not nullable. |\n| `{\"thisIsCool\":null}` | :x: | The `rootObject` does not declare the \"thisIsCool\" property. |\n\n#### \u003cb\u003e4.2.5\u003c/b\u003e `array`\n\nThe \u003csamp\u003e**array**\u003c/samp\u003e type is used for ordered member elements.\n\nThe \u003csamp\u003e**array**\u003c/samp\u003e type defines three constraint properties for \u003csamp\u003e**array**\u003c/samp\u003e JSON value type: \u003csamp\u003eminIterate\u003c/samp\u003e, \u003csamp\u003emaxIterate\u003c/samp\u003e, and member \u003csamp\u003eelements\u003c/samp\u003e.\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Name**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Value**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|:-|:-|:-|\n| \u003csamp\u003e( **array** )\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;  | \u003csamp\u003ejx:type\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003eelements\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003eminIterate\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003emaxIterate\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; | \u003csamp\u003earray\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\\[\u003c/samp\u003e [Element declaration][#array-elements]\u003csamp\u003e , ...\\]\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u0026nbsp;Array of member element declarations.\u003cbr\u003e\u003csamp\u003e(**1**\\|2\\|...)\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u0026nbsp;Specifies the minimum inclusive number of iterations of\u003cbr\u003e\u0026nbsp;\u0026nbsp;child member elements.\u003cbr\u003e\u003csamp\u003e(**1**\\|2\\|...\\|unbounded)\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u0026nbsp;Specifies the maximum inclusive number of iterations of\u003cbr\u003e\u0026nbsp;\u0026nbsp;child member elements. |\n\n_The default **array** is not very useful, because it has no member elements._\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations], [object properties][#object-properties], and [array elements][#array-elements]:\n\n```json\n{ \"jx:type\": \"array\" }\n```\n\n###### **JSDx**\n\nUsage for [type declarations][#type-declarations] and [array elements][#array-elements]:\n\n```xml\n\u003carray/\u003e\n```\n\nUsage for [object properties][#object-properties]:\n\n```xml\n\u003cproperty xsi:type=\"array\"/\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `[]` | :white_check_mark: | An array without member elements. |\n| `[null]` | :x: | An array with one `null` element. |\n\n##### \u003cb\u003e4.2.5.1\u003c/b\u003e `array.elements`\n\nThe `elements` property specifies a list of accepted member elements.\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations], [object properties][#object-properties], and [array elements][#array-elements]:\n\n```json\n{ \"jx:type\": \"array\", \"elements\": [\n    { \"jx:type\": \"boolean\", \"minOccurs\": \"0\", \"maxOccurs\": \"1\" },\n    { \"jx:type\": \"string\", \"minOccurs\": \"1\", \"maxOccurs\": \"2\" } ]\n}\n```\n\n###### **JSDx**\n\nUsage for [type declarations][#type-declarations] and [array elements][#array-elements]:\n\n```xml\n\u003carray\u003e\n  \u003cboolean minOccurs=\"0\" maxOccurs=\"1\"/\u003e\n  \u003cstring minOccurs=\"1\" maxOccurs=\"2\"/\u003e\n\u003c/array\u003e\n```\n\nUsage for [object properties][#object-properties]:\n\n```xml\n\u003cproperty xsi:type=\"array\"\u003e\n  \u003cboolean minOccurs=\"0\" maxOccurs=\"1\"/\u003e\n  \u003cstring minOccurs=\"1\" maxOccurs=\"2\"/\u003e\n\u003c/property\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `[true, \"hello\"]` | :white_check_mark: | An array with one boolean element, and one string element. |\n| `[\"hello\"]` | :white_check_mark: | An array with only one string element, since zero boolean elements is allowed. |\n| `[\"hello\", \"world\"]` | :white_check_mark: | An array with only two string elements, since zero boolean elements is allowed. |\n| `[\"hello\", \"world\", \"again\"]` | :x: | A maximum of 2 string elements is allowed. |\n| `[true, \"hello\", \"world\"]` | :white_check_mark: | An array with one boolean element and two string elements. |\n| `[true, false, \"hello\"]` | :x: | A maximum of 1 boolean elements is allowed. |\n| `[true]` | :x: | A minimum of 1 string elements are required. |\n| `[\"hello\", true]` | :x: | The boolean element must precede the string element. |\n| `[]` | :x: | At least one string element is required. |\n\n##### \u003cb\u003e4.2.5.2\u003c/b\u003e `array.minIterate` and `array.maxIterate`\n\nThe `minIterate` and `maxIterate` properties specify the cardinality of allowed iterations (repetitions) of the member elements.\n\nBy default, both `minIterate` and `maxIterate` are `1`, which allows a single iteration of the specified member elements.\u003cbr\u003eIf `minIterate` is `0`, an empty array is valid regardless of the member elements specified.\u003cbr\u003eIf `maxIterate` is `n`, the sequence of member elements can repeat `n` times.\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations], [object properties][#object-properties], and [array elements][#array-elements]:\n\n```json\n{ \"jx:type\": \"array\", \"minIterate\": \"0\", \"maxIterate\": \"2\", \"elements\": [\n    { \"jx:type\": \"boolean\", \"minOccurs\": \"0\", \"maxOccurs\": \"1\" },\n    { \"jx:type\": \"string\", \"minOccurs\": \"1\", \"maxOccurs\": \"2\" } ]\n}\n```\n\n###### **JSDx**\n\nUsage for [type declarations][#type-declarations] and [array elements][#array-elements]:\n\n```xml\n\u003carray minIterate=\"0\" maxIterate=\"2\"\u003e\n  \u003cboolean minOccurs=\"0\" maxOccurs=\"1\"/\u003e\n  \u003cstring minOccurs=\"1\" maxOccurs=\"2\"/\u003e\n\u003c/array\u003e\n```\n\nUsage for [object properties][#object-properties]:\n\n```xml\n\u003cproperty xsi:type=\"array\" minIterate=\"0\" maxIterate=\"2\"\u003e\n  \u003cboolean minOccurs=\"0\" maxOccurs=\"1\"/\u003e\n  \u003cstring minOccurs=\"1\" maxOccurs=\"2\"/\u003e\n\u003c/property\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `[true, \"hello\"]` | :white_check_mark: | An array with one boolean element, and one string element. |\n| `[\"hello\"]` | :white_check_mark: | An array with only one string element, since zero boolean elements is allowed. |\n| `[\"hello\", \"world\"]` | :white_check_mark: | An array with only two string elements, since zero boolean elements is allowed. |\n| `[\"hello\", \"world\", \"again\"]` | :white_check_mark: | The 3rd string element satisfies the 2nd iteration. |\n| `[\"hello\", \"world\", \"again\", \"and\", \"again\"]` | :x: | The 5th string element would require 3 iterations, but `maxIterate` is `2`. |\n| `[true, \"hello\", \"world\", true, \"and\", \"again\"]` | :white_check_mark: | An array with two full iterations. |\n| `[true, false, \"hello\"]` | :x: | A maximum of 1 boolean elements is allowed to appear before a required string element. |\n| `[true]` | :x: | A minimum of 1 string elements are required. |\n| `[\"hello\", true, \"world\"]` | :white_check_mark: | The boolean element and \"world\" satisfy the 2nd iteration. |\n| `[]` | :white_check_mark: | An empty array is allowed due to `minIterate` set to `0`. |\n\n#### \u003cb\u003e4.2.6\u003c/b\u003e `reference`\n\nThe \u003csamp\u003e**reference**\u003c/samp\u003e type defines one validation constraint: \u003csamp\u003etype\u003c/samp\u003e.\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Name**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Value**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|:-|:-|:-|\n| \u003csamp\u003e( **reference** )\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; | \u003csamp\u003ejx:type\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003etype\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003ebindings\u003c/samp\u003e\u003cbr\u003e\u0026nbsp; | \u003csamp\u003ereference\u003c/samp\u003e\u003cbr\u003e_Name of [type declaration][#type-declarations]_\u003cbr\u003e\u0026nbsp;\u0026nbsp;Name of root-level type declaration to reference.\u003cbr\u003e[Bindings declaration][#bindings]\u003cbr\u003e\u0026nbsp;\u0026nbsp;Specifies the language specific bindings. |\n\n##### \u003cb\u003e4.2.6.1\u003c/b\u003e `reference.type`\n\nThe **reference** type is used to restrict content by specifying a single type declaration reference.\u003cbr\u003e\n_The **reference** type is only allowed to appear as an object property or an array member._\n\nThe `type` property specifies the accepted type declaration.\n\n###### \u003cb\u003e4.2.6.1.1\u003c/b\u003e Object Properties\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations], [object properties][#object-properties], and [array elements][#array-elements]:\n\n```json\n{ \"jx:ns\": \"http://www.jsonx.org/schema-0.4.jsd\",\n  \"myNumber\": { \"jx:type\": \"number\" },\n  \"myObject\": { \"jx:type\": \"object\", \"properties\": {\n    \"numOrStr\": { \"jx:type\": \"reference\", \"type\": \"myNumber\" } } }\n}\n```\n\n###### **JSDx**\n\nUsage for [object properties][#object-properties]:\n\n```xml\n\u003cschema xmlns=\"http://www.jsonx.org/schema-0.4.xsd\"\u003e\n  \u003cnumber name=\"myNumber\"/\u003e\n  \u003cobject name=\"myArray\"\u003e\n    \u003cproperty name=\"numOrStr\" xsi:type=\"reference\" type=\"myNumber\"/\u003e\n  \u003c/object\u003e\n\u003c/schema\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `{\"numOrStr\":5.2}` | :white_check_mark: | A number is allowed. |\n| `{\"numOrStr\":\"hello\"}` | :x: | A string is not allowed. |\n| `{\"numOrStr\":false}` | :x: | A boolean is not allowed. |\n| `{}` | :x: | The `numOrStr` property is required (by default, all properties specify `use=required`). |\n\n###### \u003cb\u003e4.2.6.1.2\u003c/b\u003e Array Elements\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations], [object properties][#object-properties], and [array elements][#array-elements]:\n\n```json\n{ \"jx:ns\": \"http://www.jsonx.org/schema-0.4.jsd\",\n  \"myNumber\": { \"jx:type\": \"number\" },\n  \"myArray\": { \"jx:type\": \"array\", \"elements\": [\n    { \"jx:type\": \"reference\", \"type\": \"myNumber\" } ] }\n}\n```\n\n###### **JSDx**\n\nUsage for [array elements][#array-elements]:\n\n```xml\n\u003cschema xmlns=\"http://www.jsonx.org/schema-0.4.xsd\"\u003e\n  \u003cnumber name=\"myNumber\"/\u003e\n  \u003carray name=\"myArray\"\u003e\n    \u003creference type=\"myNumber\"/\u003e\n  \u003c/string\u003e\n\u003c/schema\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `[5.2]` | :white_check_mark: | A number is allowed. |\n| `[\"hello\"]` | :x: | A string is not allowed. |\n| `[false]` | :x: | A boolean is not allowed. |\n| `[]` | :x: | The `any` element is required (by default, all [array elements][#array-elements] specify `minOccurs=1`). |\n| `[5.2,6,4,2]` | :white_check_mark: | Repeating occurrences of **myNumber** are allowed (by default, all [array elements][#array-elements] specify `maxOccurs=unbounded)`. |\n\n#### \u003cb\u003e4.2.7\u003c/b\u003e `any`\n\nThe \u003csamp\u003e**any**\u003c/samp\u003e type is used to restrict content by specifying a list of accepted [type declarations][#type-declarations], or an empty list for wildcard.\u003cbr\u003e_The **any** type is only allowed to appear as an object property or an array member._\n\nThe \u003csamp\u003e**any**\u003c/samp\u003e type defines one validation constraint: \u003csamp\u003etypes\u003c/samp\u003e.\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Name**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Value**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|:-|:-|:-|\n| \u003csamp\u003e( **any** )\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; | \u003csamp\u003ejx:type\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003etypes\u003c/samp\u003e\u003cbr\u003e\u0026nbsp; | \u003csamp\u003eany\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\\[\u003c/samp\u003e Name of [type declaration][#array-elements]\u003csamp\u003e , ...\\]\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u0026nbsp;Array of [type declarations][#type-declarations]. |\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations], [object properties][#object-properties], and [array elements][#array-elements]:\n\n```json\n{ \"jx:type\": \"any\" }\n```\n\n###### **JSDx**\n\nUsage for [array elements][#array-elements]:\n\n```xml\n\u003cany/\u003e\n```\n\nUsage for [object properties][#object-properties]:\n\n```xml\n\u003cproperty xsi:type=\"any\"/\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `true` | :white_check_mark: | Any constraint type is allowed. |\n| `\"hello\"` | :white_check_mark: | Any constraint type is allowed. |\n| `4.53` | :white_check_mark: | Any constraint type is allowed. |\n| `{\"foo\":\"bar\"}` | :white_check_mark: | Any constraint type is allowed. |\n| `[true,\"world\"]` | :white_check_mark: | Any constraint type is allowed. |\n| `[]` | :white_check_mark: | Any constraint type is allowed. |\n\n##### \u003cb\u003e4.2.7.1\u003c/b\u003e `any.types`\n\nThe `types` property specifies accepted [type declarations][#type-declarations].\n\n###### \u003cb\u003e4.2.7.1.1\u003c/b\u003e Object Properties\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations], [object properties][#object-properties], and [array elements][#array-elements]:\n\n```json\n{ \"jx:ns\": \"http://www.jsonx.org/schema-0.4.jsd\",\n  \"myNumber\": { \"jx:type\": \"number\" },\n  \"myString\": { \"jx:type\": \"string\" },\n  \"myObject\": { \"jx:type\": \"object\", \"properties\": {\n    \"numOrStr\": { \"jx:type\": \"any\", \"types\": \"myNumber myString\" } } }\n}\n```\n\n###### **JSDx**\n\nUsage for [object properties][#object-properties]:\n\n```xml\n\u003cschema xmlns=\"http://www.jsonx.org/schema-0.4.xsd\"\u003e\n  \u003cnumber name=\"myNumber\"/\u003e\n  \u003cstring name=\"myString\"/\u003e\n  \u003cobject name=\"myArray\"\u003e\n    \u003cproperty name=\"numOrStr\" xsi:type=\"any\" types=\"myNumber myArray\"/\u003e\n  \u003c/object\u003e\n\u003c/schema\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `{\"numOrStr\":5.2}` | :white_check_mark: | A number is allowed. |\n| `{\"numOrStr\":\"hello\"}` | :white_check_mark: | A string is allowed. |\n| `{\"numOrStr\":false}` | :x: | A boolean is not allowed. |\n| `{}` | :x: | The `numOrStr` property is required (by default, all properties specify `use=required`). |\n\n###### \u003cb\u003e4.2.7.1.2\u003c/b\u003e Array Elements\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\nUsage for [type declarations][#type-declarations], [object properties][#object-properties], and [array elements][#array-elements]:\n\n```json\n{ \"jx:ns\": \"http://www.jsonx.org/schema-0.4.jsd\",\n  \"myNumber\": { \"jx:type\": \"number\" },\n  \"myString\": { \"jx:type\": \"string\" },\n  \"myArray\": { \"jx:type\": \"array\", \"elements\": [\n    { \"jx:type\": \"any\", \"types\": \"myNumber myString\" } ] }\n}\n```\n\n###### **JSDx**\n\nUsage for [array elements][#array-elements]:\n\n```xml\n\u003cschema xmlns=\"http://www.jsonx.org/schema-0.4.xsd\"\u003e\n  \u003cnumber name=\"myNumber\"/\u003e\n  \u003cstring name=\"myString\"/\u003e\n  \u003carray name=\"myArray\"\u003e\n    \u003cany types=\"myNumber myArray\"/\u003e\n  \u003c/string\u003e\n\u003c/schema\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n**Examples**\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003eValue | Pass | Description\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|-:|-|-|\n| `[5.2]` | :white_check_mark: | A number is allowed. |\n| `[\"hello\"]` | :white_check_mark: | A string is allowed. |\n| `[false]` | :x: | A boolean is not allowed. |\n| `[]` | :x: | The `any` element is required (by default, all [array elements][#array-elements] specify `minOccurs=1`). |\n| `[\"hello\",5.2,\"world\",\"foo\",\"bar\",6,4,2]` | :white_check_mark: | Repeating occurrences of **myNumber** or **myString** are allowed (by default, all [array elements][#array-elements] specify `maxOccurs=unbounded)`. |\n\n### \u003cb\u003e4.3\u003c/b\u003e Type Declarations\n\nThe declarative \u003csamp\u003e**type**\u003c/samp\u003e objects are immediate children of the \u003csamp\u003e[**schema**][#schema]\u003c/samp\u003e object, and represent type definitions that are referenceable throughout the schema, via [`any.types`](#4271-anytypes), [`object.extends`](#4244-objectextends), [`array.elements.reference`](#42612-array-elements), and [`object.properties.reference`](#42611-object-properties). The \u003csamp\u003e**type**\u003c/samp\u003e objects inherit constraint properties from \u003csamp\u003e[**model**][#constraint-types]\u003c/samp\u003e definitions with the following extensions: (Note that the \u003csamp\u003e**any**\u003c/samp\u003e and \u003csamp\u003e**reference**\u003c/samp\u003e \u003cins\u003eConstraint Types\u003c/ins\u003e are not available as a declarative \u003csamp\u003e**type**s\u003c/samp\u003e).\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Name**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Value**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|:-|:-|:-|\n| \u003csamp\u003e( [**boolean**][#boolean] \\|\u0026nbsp;\u0026nbsp;\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[**number**][#number] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[**string**][#string] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[**object**][#object] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[**array**][#array] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[~~any~~][#any] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[~~reference~~][#reference] )\u003c/samp\u003e | \u003csamp\u003ename\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; | _Name of declared type_\u003cbr\u003e\u0026nbsp;\u0026nbsp;Name of type declaration to be used as reference\u003cbr\u003e\u0026nbsp;\u0026nbsp;throuthout the JSD.\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; |\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\n```json\n{ \"jx:ns\": \"http://www.jsonx.org/schema-0.4.jsd\",\n  ...\n  \"rootArray\": { \"jx:type\": \"array\",\n    \"elements\": [...] },\n  \"rootBoolean\": { \"jx:type\": \"boolean\" },\n  \"rootNumber\": { \"jx:type\": \"number\" },\n  \"rootString\": { \"jx:type\": \"string\" },\n  \"rootObject\": { \"jx:type\": \"object\",\n    \"properties\": {...} }\n ...\n}\n```\n\n###### **JSDx**\n\n```xml\n\u003cschema xmlns=\"http://www.jsonx.org/schema-0.4.xsd\"\u003e\n  ...\n  \u003carray name=\"rootArray\"\u003e\n    ...\n  \u003c/array\u003e\n  \u003cboolean name=\"rootBoolean\"/\u003e\n  \u003cnumber name=\"rootNumber\"/\u003e\n  \u003cstring name=\"rootString\"/\u003e\n  \u003cobject name=\"rootObject\"\u003e\n    ...\n  \u003c/object\u003e\n  ...\n\u003c/schema\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n### \u003cb\u003e4.4\u003c/b\u003e Object Properties\n\nThe \u003csamp\u003e**property**\u003c/samp\u003e objects define properties for the declarative objects that belong to an \u003csamp\u003e**[object][#object]**\u003c/samp\u003e. The \u003csamp\u003e**property**\u003c/samp\u003e objects inherit constraint properties from \u003csamp\u003e[**model**][#constraint-types]\u003c/samp\u003e definitions with the following extensions:\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Name**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Value**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|:-|:-|:-|\n| \u003csamp\u003e( [**boolean**][#boolean] \\|\u0026nbsp;\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[**number**][#number] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[**string**][#string] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[**object**][#object] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[**array**][#array] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[any][#any] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[reference][#reference] )\u003c/samp\u003e | \u003csamp\u003euse\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003enullable\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; | \u003csamp\u003e(**required**\\|optional)\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u0026nbsp;Specifies whether the property use is required or optional.\u003cbr\u003e\u003csamp\u003e(**true**\\|false)\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u0026nbsp;Specifies whether the property is nullable.\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; |\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\n```json\n{ \"jx:ns\": \"http://www.jsonx.org/schema-0.4.jsd\",\n  ...\n  \"rootObject\": { \"jx:type\": \"object\",\n    \"properties\": {\n      \"propArray\": { \"jx:type\": \"array\", \"nullable\": true, \"use\": \"required\",\n        \"elements\": [...] },\n      \"propBoolean\": { \"jx:type\": \"boolean\", \"nullable\": true, \"use\": \"required\" },\n      \"propNumber\": { \"jx:type\": \"number\", \"nullable\": true, \"use\": \"required\" },\n      \"propString\": { \"jx:type\": \"string\", \"nullable\": true, \"use\": \"required\" },\n      \"propObject\": { \"jx:type\": \"object\", \"nullable\": true, \"use\": \"optional\",\n        \"properties\": {...} },\n      \"propReference\": { \"jx:type\": \"reference\", \"nullable\": true, \"use\": \"required\", \"type\": \"...\" },\n      \".*\": { \"jx:type\": \"any\", \"nullable\": true, \"use\": \"optional\", \"types\": \"...\" }\n    }\n  }\n ...\n}\n```\n\n###### **JSDx**\n\n```xml\n\u003cschema xmlns=\"http://www.jsonx.org/schema-0.4.xsd\"\u003e\n  ...\n  \u003cobject name=\"rootObject\"\u003e\n    \u003cproperty name=\"propArray\" xsi:type=\"array\" nullable=\"true\" use=\"required\"\u003e\n      ...\n    \u003c/property\u003e\n    \u003cproperty name=\"propBoolean\" xsi:type=\"boolean\" nullable=\"true\" use=\"required\"/\u003e\n    \u003cproperty name=\"propNumber\" xsi:type=\"number\" nullable=\"true\" use=\"required\"/\u003e\n    \u003cproperty name=\"propString\" xsi:type=\"string\" nullable=\"true\" use=\"required\"/\u003e\n    \u003cproperty name=\"propObject\" xsi:type=\"object\" nullable=\"true\" use=\"optional\"\u003e\n      ...\n    \u003c/property\u003e\n    \u003cproperty name=\"propReference\" xsi:type=\"reference\" nullable=\"true\" use=\"required\" type=\"...\"/\u003e\n    \u003cproperty names=\".*\" xsi:type=\"any\" nullable=\"true\" use=\"optional\" types=\"...\"/\u003e\n  \u003c/object\u003e\n  ...\n\u003c/schema\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n### \u003cb\u003e4.5\u003c/b\u003e Array Elements\n\nThe \u003csamp\u003e**element**\u003c/samp\u003e objects define properties for the declarative objects that belong to an \u003csamp\u003e**[array][#array]**\u003c/samp\u003e. The \u003csamp\u003e**element**\u003c/samp\u003e objects inherit constraint properties from [constraint type][#constraint-types] definitions with the following extensions:\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Name**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Value**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|:-|:-|:-|\n| \u003csamp\u003e( [**boolean**][#boolean] \\|\u0026nbsp;\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[**number**][#number] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[**string**][#string] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[**object**][#object] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[**array**][#array] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[any][#any] \\|\u003c/samp\u003e\u003cbr\u003e\u003csamp\u003e\u0026nbsp;\u0026nbsp;[reference][#reference] )\u003c/samp\u003e\u003cbr\u003e\u0026nbsp; | \u003csamp\u003enullable\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003eminOccurs\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003emaxOccurs\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; | \u003csamp\u003e(**true**\\|false)\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u0026nbsp;Specifies whether the property is nullable.\u003cbr\u003e\u003csamp\u003e(0\\|**1**\\|2\\|...)\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u0026nbsp;Specifies the minimum inclusive number of occurrence of\u003cbr\u003e\u0026nbsp;\u0026nbsp;the member element.\u003cbr\u003e\u003csamp\u003e(0\\|1\\|2\\|...\\|**unbounded**)\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u0026nbsp;Specifies the maximum inclusive number of occurrence of\u003cbr\u003e\u0026nbsp;\u0026nbsp;the member element. |\n\n\u003c!-- tabs:start --\u003e\n\n###### **JSD**\n\n```json\n{ \"jx:ns\": \"http://www.jsonx.org/schema-0.4.jsd\",\n  ...\n  \"rootArray\": {\n    \"jx:type\": \"array\",\n    \"elements\": [\n      { \"jx:type\": \"boolean\", \"minOccurs\": \"1\", \"maxOccurs\": \"unbounded\", \"nullable\": true},\n      { \"jx:type\": \"number\", \"minOccurs\": \"1\", \"maxOccurs\": \"unbounded\", \"nullable\": true },\n      { \"jx:type\": \"string\", \"minOccurs\": \"1\", \"maxOccurs\": \"unbounded\", \"nullable\": true },\n      { \"jx:type\": \"array\", \"minOccurs\": \"1\", \"maxOccurs\": \"unbounded\", \"nullable\": true,\n        \"elements\": [...] },\n      { \"jx:type\": \"reference\", \"minOccurs\": \"1\", \"maxOccurs\": \"unbounded\", \"nullable\": true, \"type\": \"...\" },\n      { \"jx:type\": \"any\", \"minOccurs\": \"1\", \"maxOccurs\": \"unbounded\", \"nullable\": true, \"types\": \"...\" }\n    ]\n  }\n  ...\n}\n```\n\n###### **JSDx**\n\n```xml\n\u003cschema xmlns=\"http://www.jsonx.org/schema-0.4.xsd\"\u003e\n  ...\n  \u003carray name=\"rootArray\"\u003e\n    \u003cboolean minOccurs=\"1\" maxOccurs=\"unbounded\" nullable=\"true\"/\u003e\n    \u003cnumber minOccurs=\"1\" maxOccurs=\"unbounded\" nullable=\"true\"/\u003e\n    \u003cstring minOccurs=\"1\" maxOccurs=\"unbounded\" nullable=\"true\"/\u003e\n    \u003carray minOccurs=\"1\" maxOccurs=\"unbounded\" nullable=\"true\"\u003e\n      ...\n    \u003c/array\u003e\n    \u003creference minOccurs=\"1\" maxOccurs=\"unbounded\" nullable=\"true\" type=\"...\"\u003e\n    \u003cany minOccurs=\"1\" maxOccurs=\"unbounded\" nullable=\"true\" types=\"...\"/\u003e\n  \u003c/array\u003e\n  ...\n\u003c/schema\u003e\n```\n\n\u003c!-- tabs:end --\u003e\n\n### \u003cb\u003e4.6\u003c/b\u003e Language specific bindings\n\nAs of \u003cins\u003eJSON Schema 0.4\u003c/ins\u003e, language specific bindings allow schema document declarations to bind information pertainig to zero or many target languages.\n\nBindings enable a schema to provide schema processors with information to bridge between JSON and the application layer in a custom way.\n\nThe binding information is comprised of five identifiers that belong to a single `binding` element:\n\n| \u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Name**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e | **Property\u0026nbsp;Value**\u003csamp\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u003c/samp\u003e |\n|:-|:-|:-|\n| \u003csamp\u003e( **binding** )\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp; | \u003csamp\u003e**lang**\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003etype\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003edecode\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003eencode\u003c/samp\u003e\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u0026nbsp;\u003cbr\u003e\u003csamp\u003efield\u003c/samp\u003e\u003cbr\u003e\u0026nbsp; | The language for which the binding is directed.\u003cbr\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;(i.e. \"java\", \"python\", \"ruby\", \"custom\").\u003cbr\u003eThe language specific \"type\" to which the declaration\u003cbr\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;is to be bound.\u003cbr\u003eThe method, constructor, or executable that consumes JSON\u003cbr\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;and produces an instance of **type** (if **type** is specified),\u003cbr\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;or of the default native type if **type** is not specified).\u003cbr\u003eThe method, constructor, or executable that consumes an\u003cbr\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;instance of **type** (if **type** is specified), or of the default\u003cbr\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;native type (if **type** is not specified), and produces JSON.\u003cbr\u003eThe language specific \"field\" to which the particular\u003cbr\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;declaration is to be bound. |\n\n\u003csup\u003e_Note: **lang** has been marked in bold to indicate that it is required property._\u003c/sup\u003e\n\nThere are three types of `binding` objects:\n\n#### \u003cb\u003e4.6.1\u003c/b\u003e \u003cins\u003eType Bindings\u003c/ins\u003e\n\n\u003cins\u003eType Bindings\u003c/ins\u003e only allow for the specification of **type**, **decode**, and **encode** properties.\n\nThese bindings are allowed on [Type Declarations](#43-type-declarations) and [Array Elements](#45-array-elements)\n\n#### \u003cb\u003e4.6.2\u003c/b\u003e \u003cins\u003eField Bindings\u003c/ins\u003e\n\n\u003cins\u003eField Bindings\u003c/ins\u003e only allow for the specification of a **field** property.\n\nThese bindings are allowed on [`reference` Types](#426-reference), and [Object Properties of type `object`, `array`, or `any`](#4241-objectproperties).\n\n#### \u003cb\u003e4.6.3\u003c/b\u003e \u003cins\u003eType/Field Bindings\u003c/ins\u003e\n\n\u003cins\u003eType/Field Bindings\u003c/ins\u003e only allow for the specification of all properties: **type**, **decode**, **encode**, and **field**.\n\nThese bindings are allowed on [Object Properties of type `boolean`, `number`, or `string`](#4241-objectproperties).\n\n#### \u003cb\u003e4.6.4\u003c/b\u003e Examples\n\n1. [`datatype.jsdx`](#63-datatypejsdx)\n1. [`datatype.jsd`](#64-datatypejsd)\n1. [`binding.jsdx`](#65-bindingjsdx)\n1. [`binding.jsd`](#66-bindingjsd)\n\n## \u003cb\u003e5\u003c/b\u003e \u003cins\u003eRelated Resources for JSON Schema\u003c/ins\u003e\n\n### \u003cb\u003e5.1\u003c/b\u003e Schemas for JSON Schema\n\n#### \u003cb\u003e5.1.1\u003c/b\u003e Development\n\n* \u003cins\u003eJSON Schema 0.5\u003c/ins\u003e **[Development]**\n\n  * A JSON Schema schema document XSD [schema-0.5.xsd](http://www.jsonx.org/schema-0.5.xsd) for JSON Schema documents. It incorporates an auxiliary XSD, [datatypes-0.9.xsd](http://www.openjax.org/xml/datatypes-0.9.xsd).\n\n  * A JSON Schema schema document JSDx [schema-0.5.jsdx](http://www.jsonx.org/schema-0.5.jsdx) for JSON Schema documents.\n\n  * A JSON Schema schema document JSD [schema-0.5.jsd](http://www.jsonx.org/schema-0.5.jsd) for JSON Schema documents.\n\n* \u003cins\u003eJSON Binding 0.5\u003c/ins\u003e **[Development]**\n\n  * A JSON Binding schema document XSD [binding-0.5.xsd](http://www.jsonx.org/binding-0.5.xsd) for JSON Binding documents.\n\n  * A JSON Binding schema document JSDx [binding-0.5.jsdx](http://www.jsonx.org/binding-0.5.jsdx) for JSON Binding documents.\n\n  * A JSON Binding schema document JSD [binding-0.5.jsd](http://www.jsonx.org/binding-0.5.jsd) for JSON Binding documents.\n\n* \u003cins\u003eJSON Include 0.5\u003c/ins\u003e **[Development]**\n\n  * A JSON Include schema document XSD [include-0.5.xsd](http://www.jsonx.org/include-0.5.xsd) for JSON Include declarations.\n\n  * A JSON Include schema document JSDx [include-0.5.jsdx](http://www.jsonx.org/include-0.5.jsdx) for JSON Include declarations.\n\n  * A JSON Include schema document JSD [include-0.5.jsd](http://www.jsonx.org/include-0.5.jsd) for JSON Include declarations.\n\n#### \u003cb\u003e5.1.2\u003c/b\u003e Current\n\n* \u003cins\u003eJSON Schema 0.4\u003c/ins\u003e **[Current]**\n\n  * A JSON Schema schema document XSD [schema-0.4.xsd](http://www.jsonx.org/schema-0.4.xsd) for JSON Schema documents. It incorporates an auxiliary XSD, [datatypes-0.9.xsd](http://www.openjax.org/xml/datatypes-0.9.xsd).\n\n  * A JSON Schema schema document JSDx [schema-0.4.jsdx](http://www.jsonx.org/schema-0.4.jsdx) for JSON Schema documents.\n\n  * A JSON Schema schema document JSD [schema-0.4.jsd](http://www.jsonx.org/schema-0.4.jsd) for JSON Schema documents.\n\n#### \u003cb\u003e5.1.3\u003c/b\u003e Obsolete\n\n* \u003cins\u003eJSON Schema 0.3\u003c/ins\u003e **[Deprecated]**\n\n  * A JSON Schema schema document XSD [schema-0.3.xsd](http://www.jsonx.org/schema-0.3.xsd) for JSON Schema documents. It incorporates an auxiliary XSD, [datatypes-0.9.xsd](http://www.openjax.org/xml/datatypes-0.9.xsd).\n\n  * A JSON Schema schema document JSDx [schema-0.3.jsdx](http://www.jsonx.org/schema-0.3.jsdx) for JSON Schema documents.\n\n  * A JSON Schema schema document JSD [schema-0.3.jsd](http://www.jsonx.org/schema-0.3.jsd) for JSON Schema documents.\n\n* \u003cins\u003eJSON Schema 0.2\u003c/ins\u003e **[Deprecated]**\n\n  * A JSON Schema schema document XSD [schema-0.2.xsd](http://www.jsonx.org/schema-0.2.xsd) for JSON Schema documents. It incorporates an auxiliary XSD, [datatypes-0.8.xsd]( http://www.openjax.org/xml/datatypes-0.8.xsd).\n\n  * A JSON Schema schema document JSDx [schema-0.2.jsdx](http://www.jsonx.org/schema-0.2.jsdx) for JSON Schema documents.\n\n  * A JSON Schema schema document JSD [schema-0.2.jsd](http://www.jsonx.org/schema-0.2.jsd) for JSON Schema documents.\n\n* \u003cins\u003eJSON Schema 0.1\u003c/ins\u003e **[Deprecated]**\n\n  * A JSON Schema schema document XSD [schema-0.1.xsd](http://www.jsonx.org/schema-0.1.xsd) for JSON Schema documents. It incorporates an auxiliary XSD, [datatypes-0.8.xsd](http://www.openjax.org/xml/datatypes-0.8.xsd).\n\n  * A JSON Schema schema document JSDx ~~schema-0.1.jsdx~~ for JSON Schema documents.\n\n  * A JSON Schema schema document JSD ~~schema-0.1.jsd~~ for JSON Schema documents.\n\n### \u003cb\u003e6\u003c/b\u003e \u003cins\u003eSample Schemas\u003c/ins\u003e\n\nThis section provides sample schemas in both `jsdx` and `jsd` representations.\n\n#### \u003cb\u003e6.1\u003c/b\u003e `structure.jsdx`\n\n```xml\n\u003cschema\n  xmlns=\"http://www.jsonx.org/schema-0.4.xsd\"\n  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n  xsi:schemaLocation=\"http://www.jsonx.org/schema-0.4.xsd http://www.jsonx.org/schema.xsd\"\n  doc=\"Schema expressing complex nested structures\"\u003e\n  \u003carray name=\"array\"\u003e\n    \u003cboolean nullable=\"true\"/\u003e\n    \u003cnumber range=\"[-1,1)\" nullable=\"true\"/\u003e\n    \u003cstring pattern=\"pattern\" nullable=\"true\"/\u003e\n    \u003carray nullable=\"true\"\u003e\n      \u003cboolean nullable=\"true\"/\u003e\n      \u003cnumber range=\"[-1,1)\" nullable=\"true\"/\u003e\n      \u003cstring pattern=\"pattern\" nullable=\"true\"/\u003e\n      \u003cany types=\"boolean number string array object\"/\u003e\n    \u003c/array\u003e\n    \u003creference type=\"object\"/\u003e\n    \u003cany types=\"boolean number string array object\" nullable=\"true\"/\u003e\n  \u003c/array\u003e\n  \u003cboolean name=\"boolean\"/\u003e\n  \u003cnumber name=\"number\" range=\"[-1,1)\"/\u003e\n  \u003cstring name=\"string\" pattern=\"pattern\"/\u003e\n  \u003cobject name=\"object\"\u003e\n    \u003cproperty name=\"array\" xsi:type=\"array\" nullable=\"true\" use=\"required\"\u003e\n      \u003cboolean nullable=\"true\"/\u003e\n      \u003cnumber range=\"[-1,1)\" nullable=\"true\"/\u003e\n      \u003cstring pattern=\"pattern\" nullable=\"true\"/\u003e\n      \u003carray nullable=\"true\"\u003e\n        \u003cboolean nullable=\"true\"/\u003e\n        \u003cnumber range=\"[-1,1)\" nullable=\"true\"/\u003e\n        \u003cstring pattern=\"pattern\" nullable=\"true\"/\u003e\n        \u003cany types=\"boolean number string array object\"/\u003e\n      \u003c/array\u003e\n      \u003creference type=\"object\"/\u003e\n      \u003cany types=\"boolean number string array object\" nullable=\"true\"/\u003e\n    \u003c/property\u003e\n    \u003cproperty name=\"boolean\" xsi:type=\"boolean\" nullable=\"true\" use=\"required\"/\u003e\n    \u003cproperty name=\"number\" xsi:type=\"number\" range=\"[-1,1)\" nullable=\"true\" use=\"required\"/\u003e\n    \u003cproperty name=\"string\" xsi:type=\"string\" pattern=\"pattern\" nullable=\"true\" use=\"required\"/\u003e\n    \u003cproperty name=\"booleanRef\" xsi:type=\"reference\" type=\"boolean\" nullable=\"true\" use=\"required\"/\u003e\n    \u003cproperty name=\"subObject\" xsi:type=\"object\" extends=\"object\" nullable=\"true\" use=\"optional\"\u003e\n      \u003cproperty name=\"subBoolean\" xsi:type=\"boolean\" nullable=\"true\" use=\"required\"/\u003e\n      \u003cproperty name=\"subNumber\" xsi:type=\"number\" range=\"[-1,1)\" nullable=\"true\" use=\"required\"/\u003e\n      \u003cproperty name=\"subString\" xsi:type=\"string\" pattern=\"pattern\" nullable=\"true\" use=\"required\"/\u003e\n      \u003cproperty name=\"subBooleanRef\" xsi:type=\"reference\" type=\"boolean\" nullable=\"true\" use=\"required\"/\u003e\n      \u003cproperty name=\"subArray\" xsi:type=\"array\" nullable=\"true\" use=\"required\"\u003e\n        \u003cboolean nullable=\"true\"/\u003e\n        \u003cnumber range=\"[-1,1)\" nullable=\"true\"/\u003e\n        \u003cstring pattern=\"pattern\" nullable=\"true\"/\u003e\n        \u003carray nullable=\"true\"\u003e\n          \u003cboolean nullable=\"true\"/\u003e\n          \u003cnumber range=\"[-1,1)\" nullable=\"true\"/\u003e\n          \u003cstring pattern=\"pattern\" nullable=\"true\"/\u003e\n          \u003cany types=\"boolean number string array object\"/\u003e\n        \u003c/array\u003e\n        \u003creference type=\"object\"/\u003e\n        \u003cany types=\"boolean number string array object\" nullable=\"true\"/\u003e\n      \u003c/property\u003e\n    \u003c/property\u003e\n    \u003cproperty names=\".*\" xsi:type=\"any\" types=\"boolean number string array object\" nullable=\"true\" use=\"optional\"/\u003e\n  \u003c/object\u003e\n\u003c/schema\u003e\n```\n\n#### \u003cb\u003e6.2\u003c/b\u003e `structure.jsd`\n\n```json\n{\n  \"jx:ns\": \"http://www.jsonx.org/schema-0.4.jsd\",\n  \"jx:schemaLocation\": \"http://www.jsonx.org/schema-0.4.jsd http://www.jsonx.org/schema.jsd\",\n  \"doc\": \"Schema expressing complex nested structures\",\n  \"array\": {\n    \"jx:type\": \"array\",\n    \"elements\": [{\n      \"jx:type\": \"boolean\"\n    }, {\n      \"jx:type\": \"number\",\n      \"range\": \"[-1,1)\"\n    }, {\n      \"jx:type\": \"string\",\n      \"pattern\": \"pattern\"\n    }, {\n      \"jx:type\": \"array\",\n      \"elements\": [{\n        \"jx:type\": \"boolean\"\n      }, {\n        \"jx:type\": \"number\",\n        \"range\": \"[-1,1)\"\n      }, {\n        \"jx:type\": \"string\",\n        \"pattern\": \"pattern\"\n      }, {\n        \"jx:type\": \"any\",\n        \"types\": \"boolean number string array object\"\n      }]\n    }, {\n      \"jx:type\": \"reference\",\n      \"type\": \"object\"\n    }, {\n      \"jx:type\": \"any\",\n      \"types\": \"boolean number string array object\"\n    }]\n  },\n  \"boolean\": {\n    \"jx:type\": \"boolean\"\n  },\n  \"number\": {\n    \"jx:type\": \"number\",\n    \"range\": \"[-1,1)\"\n  },\n  \"string\": {\n    \"jx:type\": \"string\",\n    \"pattern\": \"pattern\"\n  },\n  \"object\": {\n    \"jx:type\": \"object\",\n    \"properties\": {\n      \"array\": {\n        \"jx:type\": \"array\",\n        \"elements\": [{\n          \"jx:type\": \"boolean\"\n        }, {\n          \"jx:type\": \"number\",\n          \"range\": \"[-1,1)\"\n        }, {\n          \"jx:type\": \"string\",\n          \"pattern\": \"pattern\"\n        }, {\n          \"jx:type\": \"array\",\n          \"elements\": [{\n            \"jx:type\": \"boolean\"\n          }, {\n            \"jx:type\": \"number\",\n            \"range\": \"[-1,1)\"\n          }, {\n            \"jx:type\": \"string\",\n            \"pattern\": \"pattern\"\n          }, {\n            \"jx:type\": \"any\",\n            \"types\": \"boolean number string array object\"\n          }]\n        }, {\n          \"jx:type\": \"reference\",\n          \"type\": \"object\"\n        }, {\n          \"jx:type\": \"any\",\n          \"types\": \"boolean number string array object\"\n        }]\n      },\n      \"boolean\": {\n        \"jx:type\": \"boolean\"\n      },\n      \"number\": {\n        \"jx:type\": \"number\",\n        \"range\": \"[-1,1)\"\n      },\n      \"string\": {\n        \"jx:type\": \"string\",\n        \"pattern\": \"pattern\"\n      },\n      \"booleanRef\": {\n        \"jx:type\": \"reference\",\n        \"type\": \"boolean\"\n      },\n      \"subObject\": {\n        \"jx:type\": \"object\",\n        \"extends\": \"object\",\n        \"use\": \"optional\",\n        \"properties\": {\n          \"subBoolean\": {\n            \"jx:type\": \"boolean\"\n          },\n          \"subNumber\": {\n            \"jx:type\": \"number\",\n            \"range\": \"[-1,1)\"\n          },\n          \"subString\": {\n            \"jx:type\": \"string\",\n            \"pattern\": \"pattern\"\n          },\n          \"subBooleanRef\": {\n            \"jx:type\": \"reference\",\n            \"type\": \"boolean\"\n          },\n          \"subArray\": {\n            \"jx:type\": \"array\",\n            \"elements\": [{\n              \"jx:type\": \"boolean\"\n            }, {\n              \"jx:type\": \"number\",\n              \"range\": \"[-1,1)\"\n            }, {\n              \"jx:type\": \"string\",\n              \"pattern\": \"pattern\"\n            }, {\n              \"jx:type\": \"array\",\n              \"elements\": [{\n                \"jx:type\": \"boolean\"\n              }, {\n                \"jx:type\": \"number\",\n                \"range\": \"[-1,1)\"\n              }, {\n                \"jx:type\": \"string\",\n                \"pattern\": \"pattern\"\n              }, {\n                \"jx:type\": \"any\",\n                \"types\": \"boolean number string array object\"\n              }]\n            }, {\n              \"jx:type\": \"reference\",\n              \"type\": \"object\"\n            }, {\n              \"jx:type\": \"any\",\n              \"types\": \"boolean number string array object\"\n            }]\n          }\n        }\n      },\n      \".*\": {\n        \"jx:type\": \"any\",\n        \"types\": \"boolean number string array object\",\n        \"use\": \"optional\"\n      }\n    }\n  }\n}\n```\n\n#### \u003cb\u003e6.3\u003c/b\u003e `datatype.jsdx`\n\n```xml\n\u003cschema\n  xmlns=\"http://www.jsonx.org/schema-0.4.xsd\"\n  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n  xsi:schemaLocation=\"http://www.jsonx.org/schema-0.4.xsd http://www.jsonx.org/schema.xsd\"\n  targetNamespace=\"http://www.jsonx.org/generator/test/datatype.jsdx\"\n  doc=\"Schema intended to express full variability of type declarations\"\u003e\n  \u003carray name=\"arrayArr\" doc=\"Array of arrays\"\u003e\n    \u003creference type=\"arrayBool\" maxOccurs=\"1\" doc=\"Reference to array of booleans\"/\u003e\n    \u003creference type=\"arrayNum\" maxOccurs=\"1\" doc=\"Reference to array of numbers\"/\u003e\n    \u003creference type=\"arrayObj\" maxOccurs=\"1\" doc=\"Reference to array of objects\"/\u003e\n    \u003creference type=\"arrayObj\" maxOccurs=\"1\" doc=\"Another reference to array of objects\"/\u003e\n    \u003creference type=\"arrayStr\" maxOccurs=\"1\" doc=\"Reference to array of strings\"/\u003e\n    \u003creference type=\"arrayStr\" maxOccurs=\"1\" doc=\"Another reference to array of strings\"/\u003e\n    \u003cany types=\"defaultDecimal StringDecimal defaultBoolean StringBoolean\" minOccurs=\"0\" maxOccurs=\"1\" nullable=\"false\" doc=\"Any of defaultDecimal, StringDecimal, defaultBoolean, or StringBoolean type\"/\u003e\n  \u003c/array\u003e\n  \u003carray name=\"arrayBool\" doc=\"Array of booleans\"\u003e\n    \u003cany maxOccurs=\"1\" nullable=\"false\" doc=\"Any type\"/\u003e\n    \u003creference type=\"primitiveBoolean\" minOccurs=\"1\" maxOccurs=\"1\" nullable=\"false\" doc=\"Not-nullable reference to primitiveBoolean\"/\u003e\n    \u003creference type=\"defaultBoolean\" minOccurs=\"1\" maxOccurs=\"1\" doc=\"Reference to defaultBoolean\"/\u003e\n  \u003c/array\u003e\n  \u003carray name=\"arrayNum\" doc=\"Array of numbers\"\u003e\n    \u003cany minOccurs=\"1\" maxOccurs=\"1\" nullable=\"false\" doc=\"Any type\"/\u003e\n    \u003creference type=\"defaultDecimal\" minOccurs=\"1\" maxOccurs=\"1\" doc=\"Reference to defaultDecimal\"/\u003e\n    \u003creference type=\"byte\" minOccurs=\"1\" maxOccurs=\"1\" nullable=\"false\" doc=\"Reference to byte\"/\u003e\n    \u003creference type=\"StringDecimal\" minOccurs=\"1\" maxOccurs=\"1\" doc=\"Reference to StringDecimal\"/\u003e\n    \u003creference type=\"numRange\" minOccurs=\"1\" maxOccurs=\"1\" nullable=\"false\" doc=\"Reference to numRange\"/\u003e\n    \u003creference type=\"cachedInteger\" minOccurs=\"1\" maxOccurs=\"1\" doc=\"Reference to num\"/\u003e\n    \u003creference type=\"plainDecimal\" minOccurs=\"1\" maxOccurs=\"1\" nullable=\"false\" doc=\"Reference to plainDecimal\"/\u003e\n    \u003creference type=\"cachedPlainDecimal\" minOccurs=\"1\" maxOccurs=\"1\" doc=\"Reference to plainDecimalRange\"/\u003e\n    \u003creference type=\"byte\" minOccurs=\"1\" maxOccurs=\"1\" nullable=\"false\" doc=\"Reference to byte\"/\u003e\n    \u003creference type=\"numRange\" minOccurs=\"1\" maxOccurs=\"1\" nullable=\"false\" doc=\"Reference to numRange\"/\u003e\n    \u003creference type=\"cachedInteger\" minOccurs=\"1\" maxOccurs=\"1\" doc=\"Reference to cachedInteger\"/\u003e\n    \u003creference type=\"defaultDecimalRange2\" minOccurs=\"0\" maxOccurs=\"1\" doc=\"Reference to plainDecimalRange\"/\u003e\n  \u003c/array\u003e\n  \u003carray name=\"arrayObj\" doc=\"Array of object references\"\u003e\n    \u003creference type=\"objArr\" maxOccurs=\"1\" doc=\"Reference to objArr\"/\u003e\n    \u003creference type=\"objBool\" maxOccurs=\"1\" doc=\"Reference to objBool\"/\u003e\n    \u003creference type=\"objNum\" maxOccurs=\"1\" doc=\"Reference to objNum\"/\u003e\n    \u003creference type=\"objObj\" maxOccurs=\"1\" doc=\"Reference to objObj\"/\u003e\n    \u003creference type=\"objStr\" maxOccurs=\"1\" doc=\"Reference to objStr\"/\u003e\n  \u003c/array\u003e\n  \u003carray name=\"arrayStr\" doc=\"Array of string references\"\u003e\n    \u003cany types=\"byte primitiveBoolean\" maxOccurs=\"1\" nullable=\"false\" doc=\"Any type with primitive byte and boolean\"/\u003e\n    \u003creference type=\"defaultString\" maxOccurs=\"1\" doc=\"Reference to defaultString\"/\u003e\n    \u003creference type=\"charArray\" maxOccurs=\"1\" nullable=\"false\" doc=\"Not-nullable reference to charArray\"/\u003e\n    \u003creference type=\"uuid\" maxOccurs=\"1\" doc=\"Reference to uuid\"/\u003e\n    \u003creference type=\"uuid\" maxOccurs=\"1\" nullable=\"false\" doc=\"Not-nullable to uuid\"/\u003e\n    \u003creference type=\"url\" maxOccurs=\"1\" doc=\"Reference to url\"/\u003e\n    \u003creference type=\"url\" maxOccurs=\"1\" nullable=\"false\" doc=\"Not-nullable to url\"/\u003e\n    \u003creference type=\"StringBigDecimal\" maxOccurs=\"1\" doc=\"Reference to StringBigDecimal\"/\u003e\n    \u003creference type=\"StringBigDecimal\" maxOccurs=\"1\" nullable=\"false\" doc=\"Not-nullable to StringBigDecimal\"/\u003e\n    \u003creference type=\"nonEmptyString\" maxOccurs=\"1\" doc=\"Reference to nonEmptyString\"/\u003e\n    \u003creference type=\"nonEmptyString\" minOccurs=\"2\" maxOccurs=\"3\" nullable=\"false\" doc=\"Not-nullable to nonEmptyString\"/\u003e\n  \u003c/array\u003e\n  \u003cboolean name=\"defaultBoolean\" doc=\"Default boolean\"/\u003e\n  \u003cboolean name=\"primitiveBoolean\" doc=\"Primitive boolean\"\u003e\n    \u003cbinding lang=\"java\" type=\"boolean\" encode=\"java.lang.String.valueOf\"/\u003e\n  \u003c/boolean\u003e\n  \u003cboolean name=\"StringBoolean\"\u003e\n    \u003cbinding lang=\"java\" type=\"java.lang.String\" decode=\"java.lang.String.valueOf\"/\u003e\n  \u003c/boolean\u003e\n  \u003cnumber name=\"defaultDecimal\" doc=\"Default decimal type\"/\u003e\n  \u003cnumber name=\"defaultInteger\" scale=\"0\" doc=\"Default integer type\"/\u003e\n  \u003cnumber name=\"byte\" scale=\"0\" range=\"[-64,63]\" doc=\"Primitive byte type\"\u003e\n    \u003cbinding lang=\"java\" type=\"byte\"/\u003e\n  \u003c/number\u003e\n  \u003cnumber name=\"Short\" scale=\"0\" range=\"[-16384,16383]\" doc=\"Short number type\"\u003e\n    \u003cbinding lang=\"java\" type=\"java.lang.Short\"/\u003e\n  \u003c/number\u003e\n  \u003cnumber name=\"StringDecimal\"\u003e\n    \u003cbinding lang=\"java\" type=\"java.lang.CharSequence\"/\u003e\n  \u003c/number\u003e\n  \u003cnumber name=\"numRange\" range=\"[1e10,]\" doc=\"Template for number type with range\"/\u003e\n  \u003cnumber name=\"cachedInteger\" scale=\"0\" range=\"[1,]\" doc=\"Template for integer number type with range\"\u003e\n    \u003cbinding lang=\"java\" type=\"java.math.BigInteger\" decode=\"org.libj.math.BigIntegers.intern\"/\u003e\n  \u003c/number\u003e\n  \u003cnumber name=\"plainDecimal\" scale=\"2\" doc=\"Template cached BigDecimal\"\u003e\n    \u003cbinding lang=\"java\" type=\"java.math.BigDecimal\" encode=\"this.toPlainString\"/\u003e\n  \u003c/number\u003e\n  \u003cnumber name=\"cachedPlainDecimal\" scale=\"3\" range=\"[-2.222e-12,]\" doc=\"First template for real number type with range\"\u003e\n    \u003cbinding lang=\"java\" type=\"java.math.BigDecimal\" decode=\"org.libj.math.BigDecimals.intern\" encode=\"this.toPlainString\"/\u003e\n  \u003c/number\u003e\n  \u003cnumber name=\"defaultDecimalRange2\" scale=\"3\" range=\"[-2.222e-12,]\" doc=\"Second template for real number type with range\"/\u003e\n\n  \u003cstring name=\"defaultString\" doc=\"Default string type\"/\u003e\n  \u003cstring name=\"charArray\" doc=\"char[] type\"\u003e\n    \u003cbinding lang=\"java\" type=\"char[]\" decode=\"org.libj.lang.Characters.valueOf\" encode=\"java.lang.String.\u0026lt;init\u0026gt;\"/\u003e\n  \u003c/string\u003e\n  \u003cstring name=\"uuid\" pattern=\"[0-9]{8}-[a-f]{4}-[0-9]{4}-[a-f]{4}-[0-9]{12}\" doc=\"UUID pattern with UUID type\"\u003e\n    \u003cbinding lang=\"java\" type=\"java.util.UUID\" decode=\"org.libj.lang.Strings.toUuidOrNull\"/\u003e\n  \u003c/string\u003e\n  \u003cstring name=\"url\" pattern=\"((https?|ftp)://jsonx.org/[\\w\\d:#@%/;$()~_?'\\+-=\\\\\\.\u0026amp;]+)\" doc=\"URL pattern with URL type\"\u003e\n    \u003cbinding lang=\"java\" type=\"java.net.URL\" decode=\"java.net.URL.\u0026lt;init\u0026gt;\"/\u003e\n  \u003c/string\u003e\n  \u003cstring name=\"StringBigDecimal\" pattern=\"\\d+(\\.\\d+)?([eE][+-]?\\d{1,5})?\" doc=\"An integer with BigDecimal type represented as a string\"\u003e\n    \u003cbinding lang=\"java\" type=\"java.math.BigDecimal\" decode=\"java.math.BigDecimal.\u0026lt;init\u0026gt;\"/\u003e\n  \u003c/string\u003e\n  \u003cstring name=\"nonEmptyString\" pattern=\"(\\S)|(\\S.*\\S)\" doc=\"Non-empty string\"/\u003e\n  \u003cobject name=\"objTest\" doc=\"Object with array references\"\u003e\n    \u003cproperty names=\"anyNumStr\" xsi:type=\"any\" types=\"defaultDecimal charArray\" use=\"optional\" doc=\"Optional property named anyNumStr of type 'defaultDecimal' or 'charArray'\"/\u003e\n  \u003c/object\u003e\n  \u003cobject name=\"objArr\" doc=\"Object with array references\"\u003e\n    \u003cproperty names=\".*\" xsi:type=\"any\" nullable=\"false\" doc=\"Property accepting any name and any type\"\u003e\n      \u003cbinding lang=\"java\" field=\"any1\"/\u003e\n    \u003c/property\u003e\n    \u003cproperty name=\"arrayBool\" xsi:type=\"reference\" type=\"arrayBool\" doc=\"Property with bool array\"\u003e\n      \u003cbinding lang=\"java\" field=\"ab\"/\u003e\n    \u003c/property\u003e\n    \u003cproperty name=\"arrayBoolOptional\" xsi:type=\"reference\" type=\"arrayBool\" use=\"optional\" doc=\"Optional property with bool array\"\u003e\n      \u003cbinding lang=\"java\" field=\"abO\"/\u003e\n    \u003c/property\u003e\n    \u003cproperty name=\"arrayBoolOptionalNotNullable\" xsi:type=\"reference\" type=\"arrayBool\" use=\"optional\" nullable=\"false\" doc=\"Optional, not-nullable property with bool array\"\u003e\n      \u003cbinding lang=\"java\" field=\"abONN\"/\u003e\n    \u003c/property\u003e\n    \u003cproperty name=\"arrayNum\" xsi:type=\"reference\" type=\"arrayNum\" doc=\"Property with num array\"\u003e\n      \u003cbinding lang=\"java\" field=\"an\"/\u003e\n    \u003c/property\u003e\n    \u003cproperty name=\"arrayNumOptional\" xsi:type=\"reference\" type=\"arrayNum\" use=\"optional\" doc=\"Optional property with num array\"\u003e\n      \u003cbinding lang=\"java\" field=\"anO\"/\u003e\n    \u003c/property\u003e\n    \u003cproperty name=\"arrayNumOptionalNotNullable\" xsi:type=\"reference\" type=\"arrayNum\" use=\"optional\" nullable=\"false\" doc=\"Optional, not-nullable property with num array\"\u003e\n      \u003cbinding lang=\"java\" field=\"anONN\"/\u003e\n    \u003c/property\u003e\n    \u003cproperty name=\"arrayStr\" xsi:type=\"reference\" type=\"arrayStr\" doc=\"Property with str array\"\u003e\n      \u003cbinding lang=\"java\" field=\"as\"/\u003e\n    \u003c/property\u003e\n    \u003cproperty name=\"arrayStrOptional\" xsi:type=\"reference\" type=\"arrayStr\" use=\"optional\" doc=\"Optional property with str array\"\u003e\n      \u003cbinding lang=\"java\" field=\"asO\"/\u003e\n    \u003c/property\u003e\n    \u003cproperty name=\"arrayStrOptionalNotNullable\" xsi:type=\"reference\" type=\"arrayStr\" use=\"optional\" nullable=\"false\" doc=\"Optional, not-nullable property with str array\"\u003e\n      \u003cbinding lang=\"java\" field=\"asONN\"/\u003e\n    \u003c/property\u003e\n    \u003cproperty names=\"anyNumStr\" xsi:type=\"any\" types=\"defaultDecimal charArray\" use=\"optional\" doc=\"Optional property named anyNumStr of type 'defaultDecimal' or 'charArray'\"\u003e\n      \u003cbinding lang=\"java\" field=\"any2\"/\u003e\n    \u003c/property\u003e\n  \u003c/object\u003e\n  \u003cobject name=\"objBool\" doc=\"Object with boolean properties\"\u003e\n    \u003cproperty name=\"bo+l\" xsi:type=\"reference\" type=\"primitiveBoolean\" nullable=\"false\" doc=\"Not-nullable property with name matching a regex of type primitiveBoolean\"\u003e\n      \u003cbinding lang=\"java\" field=\"bool1\"/\u003e\n    \u003c/property\u003e\n    \u003cproperty names=\".*\" xsi:type=\"any\" types=\"primitiveBoolean defaultDecimal\" nullable=\"false\" doc=\"Not-nullable property of any name and of type 'primitiveBoolean' or 'defaultDecimal'\"\u003e\n      \u003cbinding lang=\"java\" field=\"any\"/\u003e\n    \u003c/property\u003e\n    \u003cproperty name=\"bo+lOptional\" xsi:type=\"reference\" type=\"StringBoolean\" use=\"optional\" doc=\"Optional property with name matching a regex of type StringBoolean\"\u003e\n      \u003cbinding lang=\"java\" field=\"bool2\"/\u003e\n    \u003c/property\u003e\n    \u003cproperty name=\"boolOptionalNotNullable\" xsi:type=\"reference\" type=\"defaultBoolean\" use=\"optional\" nullable=\"false\" doc=\"Not-nullable, optional property with name matching a regex of type defaultBoolean\"\u003e\n      \u003cbinding lang=\"java\" field=\"bool3\"/\u003e\n    \u003c/property\u003e\n  \u003c/object\u003e\n  \u003cobject name=\"objNum\" doc=\"Object with number properties\"\u003e\n    \u003cproperty name=\"num.+\" xsi:type=\"reference\" type=\"defaultDecimal\" doc=\"Property with name matching a regex of type defaultDecimal\"\u003e\n      \u003cbinding lang=\"java\" field=\"regexNum\"/\u003e\n    \u003c/property\u003e\n    \u003cproperty name=\"numRequired\" xsi:type=\"reference\" type=\"defaultDecimal\" doc=\"Required property for defaultDecimal type\"/\u003e\n    \u003cproperty name=\"numOptional\" xsi:type=\"reference\" type=\"defaultDecimal\" use=\"optional\" doc=\"Optional property for defaultDecimal type\"/\u003e\n    \u003cproperty name=\"numRequiredNotNullable\" xsi:type=\"reference\" type=\"defaultDecimal\" nullable=\"false\" doc=\"Required and not-nullable property for defaultDecimal type\"/\u003e\n    \u003cproperty name=\"numOptionalNotNullable\" xsi:type=\"reference\" type=\"defaultDecimal\" use=\"optional\" nullable=\"false\" doc=\"Optional and not-nullable property for defaultDecimal type\"/\u003e\n    \u003cproperty names=\"any\" xsi:type=\"any\" types=\"defaultDecimal charArray\" nullable=\"false\" doc=\"Property named 'any' of type 'defaultDecimal or 'charArray'\"/\u003e\n    \u003cproperty name=\"numIntRequired\" xsi:type=\"reference\" type=\"Short\" doc=\"Required property referencing type byte\"/\u003e\n    \u003cproperty name=\"numIntOptional\" xsi:type=\"reference\" type=\"StringDecimal\" use=\"optional\" doc=\"Optional property referencing type StringDecimal\"/\u003e\n    \u003cproperty name=\"numIntRequiredNotNullable\" xsi:type=\"reference\" type=\"byte\" nullable=\"false\" doc=\"Required, not-nullable property referencing type byte\"/\u003e\n    \u003cproperty name=\"numIntOptionalNotNullable\" xsi:type=\"reference\" type=\"defaultInteger\" use=\"optional\" nullable=\"false\" doc=\"Optional, not-nullable property referencing type defaultInteger\"/\u003e\n    \u003cproperty name=\"numRangeRequired\" xsi:type=\"reference\" type=\"numRange\" doc=\"Required property referencing type numRange\"/\u003e\n    \u003cproperty name=\"numRangeOptional\" xsi:type=\"reference\" type=\"numRange\" use=\"optional\" doc=\"Optional property referencing type numRange\"/\u003e\n    \u003cproperty name=\"numRangeRequiredNotNullable\" xsi:type=\"reference\" type=\"numRange\" nullable=\"false\" doc=\"Required, not-nullable property referencing type numRange\"/\u003e\n    \u003cproperty name=\"numRangeOptionalNotNullable\" xsi:type=\"reference\" type=\"numRange\" use=\"optional\" nullable=\"false\" doc=\"Optional, not-nullable property referencing type numRange\"/\u003e\n    \u003cproperty name=\"cachedIntegerRequired\" xsi:type=\"reference\" type=\"cachedInteger\" doc=\"Required property referencing type cachedInteger\"/\u003e\n    \u003cproperty name=\"cachedIntegerOptional\" xsi:type=\"reference\" type=\"cachedInteger\" use=\"optional\" doc=\"Optional property referencing type cachedInteger\"/\u003e\n    \u003cproperty name=\"cachedIntegerRequiredNotNullable\" xsi:type=\"reference\" type=\"cachedInteger\" nullable=\"false\" doc=\"Required, not-nullable property referencing type cachedInteger\"/\u003e\n    \u003cproperty name=\"cachedIntegerOptionalNotNullable\" xsi:type=\"reference\" type=\"cachedInteger\" use=\"optional\" nullable=\"false\" doc=\"Optional, not-nullable property referencing type cachedInteger\"/\u003e\n    \u003cproperty name=\"plainDecimalRequired\" xsi:type=\"reference\" type=\"plainDecimal\" doc=\"Required property referencing type plainDecimal\"/\u003e\n    \u003cproperty name=\"plainDecimalOptional\" xsi:type=\"reference\" type=\"plainDecimal\" use=\"optional\" doc=\"Optional property referencing type plainDecimal\"/\u003e\n    \u003cproperty name=\"plainDecimalRequiredNotNullable\" xsi:type=\"reference\" type=\"plainDecimal\" nullable=\"false\" doc=\"Required, not-nullable property referencing type plainDecimal\"/\u003e\n    \u003cproperty name=\"plainDecimalOptionalNotNullable\" xsi:type=\"reference\" type=\"plainDecimal\" use=\"optional\" nullable=\"false\" doc=\"Optional, not-nullable property referencing type plainDecimal\"/\u003e\n    \u003cproperty name=\"plainDecimalRangeRequired\" xsi:type=\"reference\" type=\"cachedPlainDecimal\" doc=\"Required property referencing type cachedPlainDecimal\"/\u003e\n    \u003cproperty name=\"plainDecimalRangeOptional\" xsi:type=\"reference\" type=\"defaultDecimalRange2\" use=\"optional\" doc=","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsonx-org%2Fschema","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjsonx-org%2Fschema","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsonx-org%2Fschema/lists"}