<!DOCTYPE HTML>
<!--
/***************************************************************************************************************************
 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *  
 *  http://www.apache.org/licenses/LICENSE-2.0
 *  
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations under the License.
 *
 ***************************************************************************************************************************/
-->
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<style type="text/css">
		/* For viewing in Page Designer */
		@IMPORT url("../../../../../../../javadoc.css");

		/* For viewing in REST interface */
		@IMPORT url("../htdocs/javadoc.css");
		body { 
			margin: 20px; 
		}	
	</style>
	<script>
		/* Replace all @code and @link tags. */	
		window.onload = function() {
			document.body.innerHTML = document.body.innerHTML.replace(/\{\@code ([^\}]+)\}/g, '<code>$1</code>');
			document.body.innerHTML = document.body.innerHTML.replace(/\{\@link (([^\}]+)\.)?([^\.\}]+)\}/g, '<code>$3</code>');
		}
	</script>
</head>
<body>
<p>JSON-Schema Data Transfer Objects</p>
<script>
	function toggle(x) {
		var div = x.nextSibling;
		while (div != null && div.nodeType != 1)
			div = div.nextSibling;
		if (div != null) {
			var d = div.style.display;
			if (d == 'block' || d == '') {
				div.style.display = 'none';
				x.className += " closed";
			} else {
				div.style.display = 'block';
				x.className = x.className.replace(/(?:^|\s)closed(?!\S)/g , '' );
			}
		}
	}
</script>
<a id='TOC'></a><h5 class='toc'>Table of Contents</h5>
<ol class='toc'>
	<li><p>{@doc package-summary.html#Overview Overview}</p>
	<ol>
		<li><p>{@doc package-summary.html#SchemaDefinition JSON-Schema schema definition}</p>
		<li><p>{@doc package-summary.html#Serialize Creating JSON-Schema documents}</p>
		<ol>
			<li><p>{@doc package-summary.html#SerializeToOther Serializing to other data types}</p>
		</ol>
		<li><p>{@doc package-summary.html#Parse Parsing JSON-Schema documents}</p>
	</ol>
</ol>
<!-- ======================================================================================================== -->
<a id="Overview"></a>
<h2 class='topic' onclick='toggle(this)'>1 - Overview</h2>
<div class='topic'>
	<p>
		Juneau supports serializing and parsing of JSON-Schema documents through the use of beans defined in the 
		<code>org.apache.juneau.dto.jsonschema</code> package.
		<br>These beans are used with the existing {@link org.apache.juneau.json.JsonSerializer} and 
		{@link org.apache.juneau.json.JsonParser} classes to produce and consume JSON-Schema documents. 
	</p>
	<p>
		<b>NOTE:</b>  JSON-Schema is currently in draft form.  
		This API may change as the JSON-Schema specification changes.
	</p>
	
	<!-- ======================================================================================================== -->
	<a id="SchemaDefinition"></a>
	<h3 class='topic' onclick='toggle(this)'>1.1 - JSON-Schema schema definition</h3>
	<div class='topic'>
		<p>
			The draft JSON-Schema specification that the JSON-Schema beans are modeled after is as follows:
		</p>
		<p class='bcode w800'>
	{
	    <js>"id"</js>: <js>"http://json-schema.org/draft-04/schema#"</js>,
	    <js>"$schema"</js>: <js>"http://json-schema.org/draft-04/schema#"</js>,
	    <js>"description"</js>: <js>"Core schema meta-schema"</js>,
	    <js>"definitions"</js>: {
	        <js>"schemaArray"</js>: {
	            <js>"type"</js>: <js>"array"</js>,
	            <js>"minItems"</js>: 1,
	            <js>"items"</js>: { <js>"$ref"</js>: <js>"#"</js> }
	        },
	        <js>"positiveInteger"</js>: {
	            <js>"type"</js>: <js>"integer"</js>,
	            <js>"minimum"</js>: 0
	        },
	        <js>"positiveIntegerDefault0"</js>: {
	            <js>"allOf"</js>: [ { <js>"$ref"</js>: <js>"#/definitions/positiveInteger"</js> }, 
	            	{ <js>"default"</js>: 0 } ]
	        },
	        <js>"simpleTypes"</js>: {
	            <js>"enum"</js>: [ <js>"array"</js>, <js>"boolean"</js>, <js>"integer"</js>, <js>"null"</js>, 
	            	<js>"number"</js>, <js>"object"</js>, <js>"string"</js> ]
	        },
	        <js>"stringArray"</js>: {
	            <js>"type"</js>: <js>"array"</js>,
	            <js>"items"</js>: { <js>"type"</js>: <js>"string"</js> },
	            <js>"minItems"</js>: 1,
	            <js>"uniqueItems"</js>: <jk>true</jk>
	        }
	    },
	    <js>"type"</js>: <js>"object"</js>,
	    <js>"properties"</js>: {
	        <js>"id"</js>: {
	            <js>"type"</js>: <js>"string"</js>,
	            <js>"format"</js>: <js>"uri"</js>
	        },
	        <js>"$schema"</js>: {
	            <js>"type"</js>: <js>"string"</js>,
	            <js>"format"</js>: <js>"uri"</js>
	        },
	        <js>"title"</js>: {
	            <js>"type"</js>: <js>"string"</js>
	        },
	        <js>"description"</js>: {
	            <js>"type"</js>: <js>"string"</js>
	        },
	        <js>"default"</js>: {},
	        <js>"multipleOf"</js>: {
	            <js>"type"</js>: <js>"number"</js>,
	            <js>"minimum"</js>: 0,
	            <js>"exclusiveMinimum"</js>: <jk>true</jk>
	        },
	        <js>"maximum"</js>: {
	            <js>"type"</js>: <js>"number"</js>
	        },
	        <js>"exclusiveMaximum"</js>: {
	            <js>"type"</js>: <js>"boolean"</js>,
	            <js>"default"</js>: <jk>false</jk>
	        },
	        <js>"minimum"</js>: {
	            <js>"type"</js>: <js>"number"</js>
	        },
	        <js>"exclusiveMinimum"</js>: {
	            <js>"type"</js>: <js>"boolean"</js>,
	            <js>"default"</js>: <jk>false</jk>
	        },
	        <js>"maxLength"</js>: { <js>"$ref"</js>: <js>"#/definitions/positiveInteger"</js> },
	        <js>"minLength"</js>: { <js>"$ref"</js>: <js>"#/definitions/positiveIntegerDefault0"</js> },
	        <js>"pattern"</js>: {
	            <js>"type"</js>: <js>"string"</js>,
	            <js>"format"</js>: <js>"regex"</js>
	        },
	        <js>"additionalItems"</js>: {
	            <js>"anyOf"</js>: [
	                { <js>"type"</js>: <js>"boolean"</js> },
	                { <js>"$ref"</js>: <js>"#"</js> }
	            ],
	            <js>"default"</js>: {}
	        },
	        <js>"items"</js>: {
	            <js>"anyOf"</js>: [
	                { <js>"$ref"</js>: <js>"#"</js> },
	                { <js>"$ref"</js>: <js>"#/definitions/schemaArray"</js> }
	            ],
	            <js>"default"</js>: {}
	        },
	        <js>"maxItems"</js>: { <js>"$ref"</js>: <js>"#/definitions/positiveInteger"</js> },
	        <js>"minItems"</js>: { <js>"$ref"</js>: <js>"#/definitions/positiveIntegerDefault0"</js> },
	        <js>"uniqueItems"</js>: {
	            <js>"type"</js>: <js>"boolean"</js>,
	            <js>"default"</js>: <jk>false</jk>
	        },
	        <js>"maxProperties"</js>: { <js>"$ref"</js>: <js>"#/definitions/positiveInteger"</js> },
	        <js>"minProperties"</js>: { <js>"$ref"</js>: <js>"#/definitions/positiveIntegerDefault0"</js> },
	        <js>"required"</js>: { <js>"$ref"</js>: <js>"#/definitions/stringArray"</js> },
	        <js>"additionalProperties"</js>: {
	            <js>"anyOf"</js>: [
	                { <js>"type"</js>: <js>"boolean"</js> },
	                { <js>"$ref"</js>: <js>"#"</js> }
	            ],
	            <js>"default"</js>: {}
	        },
	        <js>"definitions"</js>: {
	            <js>"type"</js>: <js>"object"</js>,
	            <js>"additionalProperties"</js>: { <js>"$ref"</js>: <js>"#"</js> },
	            <js>"default"</js>: {}
	        },
	        <js>"properties"</js>: {
	            <js>"type"</js>: <js>"object"</js>,
	            <js>"additionalProperties"</js>: { <js>"$ref"</js>: <js>"#"</js> },
	            <js>"default"</js>: {}
	        },
	        <js>"patternProperties"</js>: {
	            <js>"type"</js>: <js>"object"</js>,
	            <js>"additionalProperties"</js>: { <js>"$ref"</js>: <js>"#"</js> },
	            <js>"default"</js>: {}
	        },
	        <js>"dependencies"</js>: {
	            <js>"type"</js>: <js>"object"</js>,
	            <js>"additionalProperties"</js>: {
	                <js>"anyOf"</js>: [
	                    { <js>"$ref"</js>: <js>"#"</js> },
	                    { <js>"$ref"</js>: <js>"#/definitions/stringArray"</js> }
	                ]
	            }
	        },
	        <js>"enum"</js>: {
	            <js>"type"</js>: <js>"array"</js>,
	            <js>"minItems"</js>: 1,
	            <js>"uniqueItems"</js>: <jk>true</jk>
	        },
	        <js>"type"</js>: {
	            <js>"anyOf"</js>: [
	                { <js>"$ref"</js>: <js>"#/definitions/simpleTypes"</js> },
	                {
	                    <js>"type"</js>: <js>"array"</js>,
	                    <js>"items"</js>: { <js>"$ref"</js>: <js>"#/definitions/simpleTypes"</js> },
	                    <js>"minItems"</js>: 1,
	                    <js>"uniqueItems"</js>: <jk>true</jk>
	                }
	            ]
	        },
	        <js>"allOf"</js>: { <js>"$ref"</js>: <js>"#/definitions/schemaArray"</js> },
	        <js>"anyOf"</js>: { <js>"$ref"</js>: <js>"#/definitions/schemaArray"</js> },
	        <js>"oneOf"</js>: { <js>"$ref"</js>: <js>"#/definitions/schemaArray"</js> },
	        <js>"not"</js>: { <js>"$ref"</js>: <js>"#"</js> }
	    },
	    <js>"dependencies"</js>: {
	        <js>"exclusiveMaximum"</js>: [ <js>"maximum"</js> ],
	        <js>"exclusiveMinimum"</js>: [ <js>"minimum"</js> ]
	    },
	    <js>"default"</js>: {}
	}
		</p>
		<p>
			The bean classes that make up the model are as follows:
		</p>
		<ul class='spaced-list'>
			<li>
				{@link org.apache.juneau.dto.jsonschema.JsonSchema} - Top level schema object.
			<li>
				{@link org.apache.juneau.dto.jsonschema.JsonSchemaProperty} - A subclass of <code>Schema</code> for 
				representing properties.
			<li>
				{@link org.apache.juneau.dto.jsonschema.JsonSchemaPropertySimpleArray} - A convenience subclass of 
				<code>SchemaProperty</code> for representing properties of simple array types.
			<li>
				{@link org.apache.juneau.dto.jsonschema.JsonSchemaRef} - Represents a URI reference to another schema.
			<li>
				{@link org.apache.juneau.dto.jsonschema.JsonSchemaArray} - An array of <code>Schema</code> objects.
			<li>
				{@link org.apache.juneau.dto.jsonschema.JsonType} - An enum of possible JSON data types.
			<li>
				{@link org.apache.juneau.dto.jsonschema.JsonTypeArray} - An array of <code>JsonType</code> objects.
		</ul>
	</div>	


	<!-- ======================================================================================================== -->
	<a id="Serialize"></a>
	<h3 class='topic' onclick='toggle(this)'>1.2 - Creating JSON-Schema documents</h3>
	<div class='topic'>
		<p>
			JSON-Schema documents can be constructed using the Juneau JSON-Schema beans as a document model object.
			These beans are defined with fluent-style setters to make constructing documents as easy as possible.
		</p>
		<p>
			The following is an example JSON-Schema document:
		</p>
		<p class='bcode w800'>
	{
		<js>"title"</js>: <js>"Example Schema"</js>,
		<js>"type"</js>: <js>"object"</js>,
		<js>"properties"</js>: {
			<js>"firstName"</js>: {
				<js>"type"</js>: <js>"string"</js>
			},
			<js>"lastName"</js>: {
				<js>"type"</js>: <js>"string"</js>
			},
			<js>"age"</js>: {
				<js>"description"</js>: <js>"Age in years"</js>,
				<js>"type"</js>: <js>"integer"</js>,
				<js>"minimum"</js>: 0
			}
		},
		<js>"required"</js>: [<js>"firstName"</js>, <js>"lastName"</js>]
	}		
		</p>
		<p>
			This document can be constructing using the following code:
		</p>
		<p class='bcode w800'>
	<jc>// Create the document object model</jc>
	JsonSchema s = <jk>new</jk> JsonSchema()
		.setTitle(<js>"Example Schema"</js>)
		.setType(JsonType.<jsf>OBJECT</jsf>)
		.addProperties(
			<jk>new</jk> JsonSchemaProperty(<js>"firstName"</js>, JsonType.<jsf>STRING</jsf>),
			<jk>new</jk> JsonSchemaProperty(<js>"lastName"</js>, JsonType.<jsf>STRING</jsf>),
			<jk>new</jk> JsonSchemaProperty(<js>"age"</js>, JsonType.<jsf>INTEGER</jsf>)
				.setDescription(<js>"Age in years"</js>)
				.setMinimum(0)
		)
		.addRequired(<js>"firstName"</js>, <js>"lastName"</js>);
		
	<jc>// Serialize to JSON</jc>
	String json = JsonSerializer.<jsf>DEFAULT_READABLE</jsf>.serialize(s);
		</p>	
		<p>
			The following is a more-complex example showing various kinds of constraints.
		</p>		
		<p class='bcode w800'>
	{
	    <js>"id"</js>: <js>"http://some.site.somewhere/entry-schema#"</js>,
	    <js>"$schema"</js>: <js>"http://json-schema.org/draft-04/schema#"</js>,
	    <js>"description"</js>: <js>"schema for an fstab entry"</js>,
	    <js>"type"</js>: <js>"object"</js>,
	    <js>"required"</js>: [ <js>"storage"</js> ],
	    <js>"properties"</js>: {
	        <js>"storage"</js>: {
	            <js>"type"</js>: <js>"object"</js>,
	            <js>"oneOf"</js>: [
	                { <js>"$ref"</js>: <js>"#/definitions/diskDevice"</js> },
	                { <js>"$ref"</js>: <js>"#/definitions/diskUUID"</js> },
	                { <js>"$ref"</js>: <js>"#/definitions/nfs"</js> },
	                { <js>"$ref"</js>: <js>"#/definitions/tmpfs"</js> }
	            ]
	        },
	        <js>"fstype"</js>: {
	            <js>"enum"</js>: [ <js>"ext3"</js>, <js>"ext4"</js>, <js>"btrfs"</js> ]
	        },
	        <js>"options"</js>: {
	            <js>"type"</js>: <js>"array"</js>,
	            <js>"minItems"</js>: 1,
	            <js>"items"</js>: { <js>"type"</js>: <js>"string"</js> },
	            <js>"uniqueItems"</js>: <jk>true</jk>
	        },
	        <js>"readonly"</js>: { <js>"type"</js>: <js>"boolean"</js> }
	    },
	    <js>"definitions"</js>: {
	        <js>"diskDevice"</js>: {},
	        <js>"diskUUID"</js>: {},
	        <js>"nfs"</js>: {},
	        <js>"tmpfs"</js>: {}
	    }
	}
		</p>
		<p>
			This document can be constructing using the following code:
		</p>
		<p class='bcode w800'>
	JsonSchema s = <jk>new</jk> JsonSchema()
		.setId(<js>"http://some.site.somewhere/entry-schema#"</js>)
		.setSchemaVersionId(<js>"http://json-schema.org/draft-04/schema#"</js>)
		.setDescription(<js>"schema for an fstab entry"</js>)
		.setType(JsonType.<jsf>OBJECT</jsf>)
		.addRequired(<js>"storage"</js>)
		.addProperties(
			<jk>new</jk> JsonSchemaProperty(<js>"storage"</js>)
				.setType(JsonType.<jsf>OBJECT</jsf>)
				.addOneOf(
					<jk>new</jk> JsonSchemaRef(<js>"#/definitions/diskDevice"</js>),
					<jk>new</jk> JsonSchemaRef(<js>"#/definitions/diskUUID"</js>),
					<jk>new</jk> JsonSchemaRef(<js>"#/definitions/nsf"</js>),
					<jk>new</jk> JsonSchemaRef(<js>"#/definitions/tmpfs"</js>)
				),
			<jk>new</jk> JsonSchemaProperty(<js>"fstype"</js>)
				.addEnum(<js>"ext3"</js>, <js>"ext4"</js>, <js>"btrfs"</js>),
			<jk>new</jk> JsonSchemaPropertySimpleArray(<js>"options"</js>, JsonType.<jsf>STRING</jsf>)
				.setMinItems(1)
				.setUniqueItems(<jk>true</jk>),
			<jk>new</jk> JsonSchemaProperty(<js>"readonly"</js>)
				.setType(JsonType.<jsf>BOOLEAN</jsf>)
		)
		.addDefinition(<js>"diskDevice"</js>,
			<jk>new</jk> JsonSchema()
		)
		.addDefinition(<js>"diskUUID"</js>,
			<jk>new</jk> JsonSchema()
		)
		.addDefinition(<js>"nfs"</js>,
			<jk>new</jk> JsonSchema()
		)
		.addDefinition(<js>"tmpfs"</js>,
			<jk>new</jk> JsonSchema()
		);

	<jc>// Serialize to JSON</jc>
	String json = JsonSerializer.<jsf>DEFAULT_READABLE</jsf>.serialize(s);
		</p>
	
	
		<!-- ======================================================================================================== -->
		<a id="SerializeToOther"></a>
		<h4 class='topic' onclick='toggle(this)'>1.2.1 - Serializing to other data types</h4>
		<div class='topic'>
			<p>
				Since the JSON-Schema DTOs are simple beans, they can be used to serialize to a variety of other 
				language types as well as JSON.
				This also allows JSON-Schema documents to be easily served up using the Juneau REST API.
			</p>
			<p>
				The sample web application includes a REST resource that generates a JSON-Schema document.  
				We'll use this resource to show what the JSON-Schema document looks like in other languages.
			</p>
			<p class='bcode w800'>
	<jd>/**
	 * Sample resource that shows how to serialize JSON-Schema documents.
	 */</jd>
	<ja>@Rest</ja>(
		path=<js>"/jsonSchema"</js>,
		messages=<js>"nls/JsonSchemaResource"</js>,
		title=<js>"Sample JSON-Schema document"</js>,
		htmldoc=<ja>@HtmlDoc</ja>(
			navlinks={
				<js>"options: ?method=OPTIONS"</js>
			}
		)
	)
	<jk>public class</jk> JsonSchemaResource <jk>extends</jk> BasicRestServletJena {
	
		<jk>private</jk> JsonSchema <jf>schema</jf>;     <jc>// The schema document</jc>
		
		<jd>/** Servlet initialization */</jd> 
		<ja>@Override</ja>
		<jk>public void</jk> init() {
	
			<jk>try</jk> {
				<jf>schema</jf> = <jk>new</jk> JsonSchema()
					.setId(<js>"http://example.com/sample-schema#"</js>)
					.setSchemaVersionUri(<js>"http://json-schema.org/draft-04/schema#"</js>)
					.setTitle(<js>"Example Schema"</js>)
					.setType(JsonType.<jsf>OBJECT</jsf>)
					.addProperties(
						<jk>new</jk> JsonSchemaProperty(<js>"firstName"</js>, JsonType.<jsf>STRING</jsf>),
						<jk>new</jk> JsonSchemaProperty(<js>"lastName"</js>, JsonType.<jsf>STRING</jsf>),
						<jk>new</jk> JsonSchemaProperty(<js>"age"</js>, JsonType.<jsf>INTEGER</jsf>)
							.setDescription(<js>"Age in years"</js>)
							.setMinimum(0)
					)
					.addRequired(<js>"firstName"</js>, <js>"lastName"</js>);
			} <jk>catch</jk> (Exception e) {
				<jk>throw new</jk> RuntimeException(e);
			}
		}
		
		<jd>/** GET request handler */</jd>
		<ja>@RestMethod</ja>(name=<jsf>GET</jsf>, path=<js>"/"</js>)
		<jk>public</jk> JsonSchema getSchema() <jk>throws</jk> Exception {
			<jk>return</jk> <jf>schema</jf>;
		}
		
		<jd>/** 
		 * PUT request handler.
		 * Replaces the schema document with the specified content, and then mirrors it as the response. 
		 */</jd>
		<ja>@RestMethod</ja>(name=<jsf>PUT</jsf>, path=<js>"/"</js>)
		<jk>public</jk> JsonSchema setSchema(<ja>@Body</ja> JsonSchema schema) <jk>throws</jk> Exception {
			<jk>this</jk>.<jf>schema</jf> = schema;
			<jk>return</jk> <jk>this</jk>.<jf>schema</jf>;
		}
	
		<jd>/** OPTIONS request handler */</jd>
	 	<ja>@RestMethod</ja>(name=<jsf>OPTIONS</jsf>, path=<js>"/*"</js>)
		<jk>public</jk> ResourceOptions doOptions(RestRequest req) {
			<jk>return new</jk> ResourceOptions(<jk>this</jk>, req);
		}
	}
			</p>
			<p>
				When you point your browser to this resource, the default content type is HTML (since that's what the 
				browser asks for by default).
			</p>
			
			<h5 class='figure'>HTML</h5>
			<img class='bordered' src="doc-files/Example_Html.png">
			<p>
				The REST API allows you to specify the <code>Accept</code> header as a GET parameter, and the 
				<code>plainText=true</code> parameter forces the returned <code>Content-Type</code> to be 
				<code>text/plain</code>.
				We'll use this to view the JSON-Schema document in other languages.
			</p>			
			
			<h5 class='figure'>Normal JSON</h5>
			<img class='bordered' src="doc-files/Example_Json.png">
			
			<h5 class='figure'>XML</h5>
			<img class='bordered' src="doc-files/Example_Xml.png">

			<h5 class='figure'>URL-Encoded</h5>
			<img class='bordered' src="doc-files/Example_UrlEncoded.png">

			<h5 class='figure'>Abbreviated RDF/XML</h5>
			<img class='bordered' src="doc-files/Example_XmlRdfAbbrev.png">

			<h5 class='figure'>Turtle</h5>
			<img class='bordered' src="doc-files/Example_Turtle.png">
			
			<p>
				The full list of options for this resource can be accessed by the <code>options</code> link on the HTML 
				page.
			</p>
			
			<h5 class='figure'>Resource Options</h5>
			<img class='bordered' src="doc-files/Example_Options.png">
		</div>	
	</div>
		
	<!-- ======================================================================================================== -->
	<a id="Parse"></a>
	<h3 class='topic' onclick='toggle(this)'>1.3 - Parsing JSON-Schema documents</h3>
	<div class='topic'>
		<p>
			Use the {@link org.apache.juneau.json.JsonParser} to parse JSON-Schema documents into DTOs:
		</p>
		<p class='bcode w800'>		
	<jc>// Use parser to load JSON-Schema document into JSON-Schema DTOs</jc>
	Schema schema = JsonParser.<jsf>DEFAULT</jsf>.parse(json, JsonSchema.<jk>class</jk>);
		</p>
		<p>
			Schema objects can also be constructed from the other media types using the appropriate parsers.
		</p>
	</div>

</div>
<p align="center"><i><b>*** fín ***</b></i></p>
</body>
</html>