text:
#include <iostream>
using namespace std;

void cyclicSort(int arr[], int n){
int i = 0;
while(i < n)
{
	// as array is of 1 based indexing so the
	// correct position or index number of each
	// element is element-1 i.e. 1 will be at 0th
	// index similarly 2 correct index will 1 so
	// on...
	int correct = arr[i] - 1 ;
	if(arr[i] != arr[correct]){

	// if array element should be lesser than
	// size and array element should not be at
	// its correct position then only swap with
	// its correct position or index value
	swap(arr[i], arr[correct]) ;
	}else{

	// if element is at its correct position
	// just increment i and check for remaining
	// array elements
	i++ ;
	}
}

}

void printArray(int arr[], int size)
{
int i;
for (i = 0; i < size; i++)
	cout << arr[i] << " ";
cout << endl;
}

int main() {

int arr[] = { 3, 2, 4, 5, 1};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Before sorting array: \n";
printArray(arr, n);
cyclicSort(arr, n);
cout << "Sorted array: \n";
printArray(arr, n);
return 0;

}


text:
#include <bits/stdc++.h>
using namespace std;
vector<int> wave_sort(vector<int> &v, int n)
{
	for (int i = 0; i < n; i += 2)
	{
		if (v[i] < v[i - 1] and i != 0)
		{
			swap(v[i], v[i - 1]);
		}
		if (v[i] < v[i + 1] and i != n - 1)
		{
			swap(v[i], v[i + 1]);
		}
	}

	return v;
}

int main()
{
	int n;
	vector<int> v;
	cin >> n;

	for (int i = 0; i < n; i++)
	{
		int temp;
		cin >> temp;
		v.push_back(temp);
	}
	wave_sort(v, n);
	for (int i = 0; i < n; i++)
	{
		cout << v[i] << " ";
	}

	return 0;
}

file_name: Merge Sorted Array.cpp

mime_type: text/x-c++


text:
#include<iostream>
using namespace std;
void swapping(int &a, int &b) {     //swap the content of a and b
   int temp;
   temp = a;
   a = b;
   b = temp;
}
void display(int *array, int size) {
   for(int i = 0; i<size; i++)
      cout << array[i] << " ";
   cout << endl;
}
void merge(int *array, int l, int m, int r) {
   int i, j, k, nl, nr;
   //size of left and right sub-arrays
   nl = m-l+1; nr = r-m;
   int larr[nl], rarr[nr];
   //fill left and right sub-arrays
   for(i = 0; i<nl; i++)
      larr[i] = array[l+i];
   for(j = 0; j<nr; j++)
      rarr[j] = array[m+1+j];
   i = 0; j = 0; k = l;
   //marge temp arrays to real array
   while(i < nl && j<nr) {
      if(larr[i] <= rarr[j]) {
         array[k] = larr[i];
         i++;
      }else{
         array[k] = rarr[j];
         j++;
      }
      k++;
   }
   while(i<nl) {       //extra element in left array
      array[k] = larr[i];
      i++; k++;
   }
   while(j<nr) {     //extra element in right array
      array[k] = rarr[j];
      j++; k++;
   }
}
void mergeSort(int *array, int l, int r) {
   int m;
   if(l < r) {
      int m = (l+r)/2;
      // Sort first and second arrays
      mergeSort(array, l, m);
      mergeSort(array, m+1, r);
      merge(array, l, m, r);
   }
}
int main() {
   int n;
   cout << "Enter the number of elements: ";
   cin >> n;
   int arr[n];     //create an array with given number of elements
   cout << "Enter elements:" << endl;
   for(int i = 0; i<n; i++) {
      cin >> arr[i];
   }
   cout << "Array before Sorting: ";
   display(arr, n);
   mergeSort(arr, 0, n-1);     //(n-1) for last index
   cout << "Array after Sorting: ";
   display(arr, n);
}


text:
// C++ implementation of Radix Sort
#include <iostream>
using namespace std;

// A utility function to get maximum value in arr[]
int getMax(int arr[], int n)
{
	int mx = arr[0];
	for (int i = 1; i < n; i++)
		if (arr[i] > mx)
			mx = arr[i];
	return mx;
}

// A function to do counting sort of arr[] according to
// the digit represented by exp.
void countSort(int arr[], int n, int exp)
{
	int output[n]; // output array
	int i, count[10] = { 0 };

	// Store count of occurrences in count[]
	for (i = 0; i < n; i++)
		count[(arr[i] / exp) % 10]++;

	// Change count[i] so that count[i] now contains actual
	// position of this digit in output[]
	for (i = 1; i < 10; i++)
		count[i] += count[i - 1];

	// Build the output array
	for (i = n - 1; i >= 0; i--) {
		output[count[(arr[i] / exp) % 10] - 1] = arr[i];
		count[(arr[i] / exp) % 10]--;
	}

	// Copy the output array to arr[], so that arr[] now
	// contains sorted numbers according to current digit
	for (i = 0; i < n; i++)
		arr[i] = output[i];
}

// The main function to that sorts arr[] of size n using
// Radix Sort
void radixsort(int arr[], int n)
{
	// Find the maximum number to know number of digits
	int m = getMax(arr, n);

	// Do counting sort for every digit. Note that instead
	// of passing digit number, exp is passed. exp is 10^i
	// where i is current digit number
	for (int exp = 1; m / exp > 0; exp *= 10)
		countSort(arr, n, exp);
}

// A utility function to print an array
void print(int arr[], int n)
{
	for (int i = 0; i < n; i++)
		cout << arr[i] << " ";
}

// Driver Code
int main()
{
	int arr[] = { 170, 45, 75, 90, 802, 24, 2, 66 };
	int n = sizeof(arr) / sizeof(arr[0]);

	// Function Call
	radixsort(arr, n);
	print(arr, n);
	return 0;
}


text:
#include <bits/stdc++.h>
using namespace std;

void heapify(int arr[], int n, int i)
{
	int largest = i;
	int l = 2 * i + 1;
	int r = 2 * i + 2;

	if (l < n && arr[l] > arr[largest])
		largest = l;

	if (r < n && arr[r] > arr[largest])
		largest = r;

	if (largest != i) {
		swap(arr[i], arr[largest]);
		heapify(arr, n, largest);
	}
}

void heapSort(int arr[], int n)
{
	for (int i = n / 2 - 1; i >= 0; i--)
		heapify(arr, n, i);
	for (int i = n - 1; i >= 0; i--) {
		swap(arr[0], arr[i]);
		heapify(arr, i, 0);
	}
}

void printArray(int arr[], int n)
{
	for (int i = 0; i < n; ++i)
		cout << arr[i] << " ";
	cout << "\n";
}

int main()
{
	int arr[] = { 12, 11, 13, 5, 6, 7 };
	int n = sizeof(arr) / sizeof(arr[0]);

	heapSort(arr, n);

	cout << "Sorted array is \n";
	printArray(arr, n);
}


text:
// C++ Program for counting sort
#include <bits/stdc++.h>
#include <string.h>
using namespace std;
#define RANGE 255

void countSort(char arr[])
{
	char output[strlen(arr)];
    int count[RANGE + 1], i;
	memset(count, 0, sizeof(count));
    for (i = 0; arr[i]; ++i)
		++count[arr[i]];

	for (i = 1; i <= RANGE; ++i)
		count[i] += count[i - 1];

	for (i = 0; arr[i]; ++i) {
		output[count[arr[i]] - 1] = arr[i];
		--count[arr[i]];
	}

	for (i = 0; arr[i]; ++i)
		arr[i] = output[i];
}
int main()
{
	char arr[] = "geeksforgeeks";

	countSort(arr);

	cout << "Sorted character array is " << arr;
	return 0;
}


text:
#include <bits/stdc++.h>
using namespace std;

void swap(int *xp, int *yp)
{
    int temp = *xp;
    *xp = *yp;
    *yp = temp;
}

// A function to implement bubble sort
void bubbleSort(int arr[], int n)
{
    int i, j;
    for (i = 0; i < n-1; i++)

    // Last i elements are already in place
    for (j = 0; j < n-i-1; j++)
        if (arr[j] > arr[j+1])
            swap(&arr[j], &arr[j+1]);
}

/* Function to print an array */
void printArray(int arr[], int size)
{
    int i;
    for (i = 0; i < size; i++)
        cout << arr[i] << " ";
    cout << endl;
}

// Driver code
int main()
{
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr)/sizeof(arr[0]);
    bubbleSort(arr, n);
    cout<<"Sorted array: \n";
    printArray(arr, n);
    return 0;
}


text:
// solution of 0-1 knapsack using recursion
#include <bits/stdc++.h>
using namespace std;

// this fuction returns the maximum value that can be put in a knapsack of capacity W
int knapSack(int W, vector<int> &wt, vector<int> &val , int n)
{

	// Base Case
	if (n == 0 || W == 0)
		return 0;

	// If weight of the nth item is more
	// than Knapsack capacity W, then
	// this item cannot be included
	// in the optimal solution
	if (wt[n - 1] > W)
		return knapSack(W, wt, val, n - 1);

	// Return the maximum of two cases:
	// (1) nth item included
	// (2) not included
	else
		return max(val[n - 1] + knapSack(W - wt[n - 1], wt, val, n - 1),knapSack(W, wt, val, n - 1));
}

// Driver code
int main()
{
	int n , W;
	cout<<"Enter the number of items";
	cin>>n;	// taking input n
	vector<int> val(n) , wt(n);
	for(int i = 0 ; i < n ; i++)
	   cin>>wt[i];
	for(int i = 0 ; i < n ; i++)
	   cin>>val[i];
	cout<<"Enter the capacity of knapsack";
	cin>>W;	//W of knapsack
	cout << knapSack(W, wt, val, n);
	return 0;
}


text:
#include<iostream>
#include<fstream>
#include<string.h>
#include<cstdlib>
#include<ctime>
using namespace std;
void printfArray(int arr[],int n)
{
    for(int i=0;i<n;i++)
    {
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}
int partition(int arr[],int low,int high)
{
   int pivote=arr[low];
   int i=low+1;
   int j=high;
   int tem=0,tem1=0;
   do{
       while(arr[i]<=pivote)
       {
           i++;
       }
       while(arr[j]>pivote)
       {
           j--;
       }
       if(i<j)
       {
             tem=arr[i];
             arr[i]=arr[j];
             arr[j]=tem;
       }
   }while(i<j);

   tem1=arr[low];
   arr[low]=arr[j];
   arr[j]=tem1;
   return j;
}
void quickSort(int arr[],int low,int high)
{
   for(int i=0;i<1000000;i++);
   if(low<high)
    {
        int partitionIndex=partition(arr,low,high);
        quickSort(arr,low,partitionIndex-1);
        quickSort(arr,partitionIndex+1,high);
    }
}
int main()
{

    int n=6;
    int a[n]={34,12,33,2,56,2};
    printfArray(a,n);

    quickSort(a,0,n-1);

    cout<<endl;
    printfArray(a,n);

}


text:
#include <iostream>
using namespace std;

int factorial(int n)
{
	return (n == 1 || n == 0) ? 1 : n * factorial(n - 1);
}
int main()
{
	int num = 5;
	cout << "Factorial of " << num << " is "<< factorial(num);
	return 0;
}


text:
/*
The N Queen is the problem of placing N chess queens on an N×N chessboard so that no two queens attack each other.
We have to find total number of different ways we can do this.
*/

#include <iostream>
#include <vector>
using namespace std;

int n;
vector<pair<int,int>> queen; // places where queen are placed already

bool isAttacked(int r,int c){
  // This function tells if the current position of queens can attack at position (r,c) or not

  // traversing over all already placed queens
  for(auto &[row,col] : queen){
    if(c == col) return true; // checking if the column c is in attack

    if(abs(r-row) == abs(col-c)) return true;
    // checking for the diagonally attack from already placed queens
  }
  // we are not checking rows here because we are already plackng a single queen at a single row

  // this part of the code will only run when already placed queens can't attack at (r,c)
  return false; // that (r,c) can't be attacked by already placed queens
}

int rec(int row){
  // every row will contain only 1 queen, so 2 queens can't be placed in a single row
  // rec() will return different unique ways to place rest of the queens with the current placed queens (in the queens array)

  if(row == n+1) return 1; // n+1 row doesn't exist, its a NxN chessboard
  // return 1 because if we reach n+1th row it menas there's a way to place queens thats why we are reaching n+1th row otherwise we wouldn't

  int ways = 0; // ways to place n queens
  for(int col = 1; col <= n; ++col){

    if(isAttacked(row,col)) continue;
    // check thats if we can place a queen at (row,col) or not

    // this part of code will only execute if we can place queen at (row,col)
    queen.push_back({row,col}); // placing a queen at (row,col)

    ways += rec(row+1); // suming up different ways to place rest of the queens after placing this queen at (row,col)
    // moving to next row now because this row can't contain 2 queens

    // this part of code will execute when we get return from the rec() call
    queen.pop_back(); // removing the queen from (row,col) // (or can say BackTracking Move)
  }

  return ways; // returning different ways
}

int main()
{
   cin >> n; // Taking Input
   cout << rec(1); // we are starting from 1st row
}


text:
/*

Question : #390 Elimination Game.

You have a list arr of all integers in the range [1, n] sorted in a strictly increasing order. Apply the following algorithm on arr:

->Starting from left to right, remove the first number and every other number afterward until you reach the end of the list.
->Repeat the previous step again, but this time from right to left, remove the rightmost number and every other number from the remaining numbers.
->Keep repeating the steps again, alternating left to right and right to left, until a single number remains.

Given the integer n, return the last number that remains in arr.

* Example 1:

Input: n = 9
Output: 6
Explanation:
arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]
arr = [2, 4, 6, 8]
arr = [2, 6]
arr = [6]

* Example 2:

Input: n = 1
Output: 1

* Constraints:

1 <= n <= 1e9

*/

// Approach : since the constraints are large we need to think of O(logn) solution.
// Recursion + Math Problem

#include <bits/stdc++.h>
using namespace std;

int solve(int n, int i) // i==0 denotes that we start eliminating from left . // i =1 denotes that we start elimination from right.
{
    if (n == 1)
        return 1;
    if (i == 0)
    {
        return (2) * solve(n / 2, 1);
        /*
          let's say we have array  = [1,2,3,4,5,6,7,8,9];
          now we we delete the alternating elements starting from left.
          we are left with [2,4,6,8];
          we can write this as :  2*[1,2,3,4]; // multiply each no with 2 and we will get the original numbers.
          // then we call the solve function on [1,2,3,4] and this time i will be set to 1 and our n will by n/2;
        */
    }
    else if (i == 1)
    {
        // i =1 -> start elemination from right.
        if (n % 2 == 0)
            return (2 * solve((n + 1) / 2, 0)) - 1;
        /*
            example array = [1,2,3,4,5,6];
            after elimination = [1,3,5];
            we can also write this array as =  (2*[1,2,3]) -1;
            and n' = (n+1)/2  //  ==> n' = (6+1)/2 = 3.
        */
        else
            return (2 * solve((n - 1) / 2, 0));
        /*
            example array = [1,2,3,4,5,6,7];
            after elimination = [2,4,6];
            we can also write this array as =  (2*[1,2,3]) ;
            and n' = (n-1)/2  //  ==> n' = (7-1)/2 = 3.

        */
    }
    return n;
}

int main()
{
    int n;
    cout << "Enter the value of n: ";
    cin >> n;
    cout << endl;
    cout << "The last Element remaing will be: " << solve(n, 0) << endl;
    return 0;
}


text:
#include <iostream>
using namespace std;
double e(int x, int n)
{
 static double p=1,f=1;
 double r;

 if(n==0)
 return 1;
 r=e(x,n-1);
 p=p*x;
 f=f*n;
 return r+p/f;
}
int main()
{
 cout<<e(4,15)<<endl;
 return 0;
}


text:
#include <stdio.h>
int fact(int n)
{
 if(n==0)return 1;
 return fact(n-1)*n;
}
int nCr(int n,int r)
{
 int num,den;

 num=fact(n);
 den=fact(r)*fact(n-r);

 return num/den;
}
int NCR(int n,int r)
{
 if(n==r || r==0)
 return 1;
 return NCR(n-1,r-1)+NCR(n-1,r);

}
int main()
{
 printf("%d \n",NCR(5,3));
 return 0;
}


text:
# Recursive Python function to solve tower of hanoi
def TowerOfHanoi(n, from_rod, to_rod, aux_rod):
	if n == 0:
		return
	TowerOfHanoi(n-1, from_rod, aux_rod, to_rod)
	print("Move disk", n, "from rod", from_rod, "to rod", to_rod)
	TowerOfHanoi(n-1, aux_rod, to_rod, from_rod)

# Driver code
N = 3

# A, C, B are the name of rods
TowerOfHanoi(N, 'A', 'C', 'B')


text:
#include<iostream>
using namespace std;
void printArr(int arr[], int n){
    for(int i=0; i<n; i++){
        cout<<arr[i]<<" ";
    }
    cout<<endl;
}
void BubleSort(int arr[],int s,int n){
    if(s>n){
        return ;
    }
    if(n==1 || n==0){
        return ;
    }
    for(int i=0; i<n; i++){
    if(arr[i]>arr[i+1]){
        swap(arr[i],arr[i+1]);
    }
}
    s++;
    BubleSort(arr,s,n);
}
int main()
{
    int arr[]={3,5,1,2,4};
    int n=5;
    printArr(arr,n);
    BubleSort(arr,0,n);
    printArr(arr,n);
    return 0;
}


text:
#include<iostream>
using namespace std;

bool BinarySearch(int arr[],int s,int e,int key){
    if(s>e){return false;}

    int mid=s+(e-s)/2;

    if(arr[mid]==key){
        return true;
    }
    else if(arr[mid]>key){
        e=mid-1;
        return BinarySearch(arr,s,e,key);
    }
    else{
        s=mid+1;
        return BinarySearch(arr,s,e,key);
    }

}

int main()
{
    int n=6;
    int arr[]={1,2,3,3,5,6,7};
    int key=4;

    cout<<BinarySearch(arr,0,n,key)<<endl;

    return 0;
}


text:
#include<stdio.h>
int sumofdigits(int);
int main(){
    int a =sumofdigits(236984);
    printf("Sum = %d\n",a);
    return 0;
}
int sumofdigits(int n){
    if(n==0){
        return 0;
    }
    return n%10+sumofdigits(n/10);
}


text:
#include <bits/stdc++.h>
using namespace std;
#define int long long
int fibonacci(int n)
{
    if (n <= 1)
        return n;
    return fibonacci(n - 1) + fibonacci(n - 2);
}

signed main() {
    cout << "please enter n " << endl;
    int n;
    cin >> n;
    cout << fibonacci(n);

    return 0;
}


text:
#include <iostream>
using namespace std;
int fibonnaci(int x) {
   if((x==1)||(x==0)) {
      return(x);
   }else {
      return(fibonnaci(x-1)+fibonnaci(x-2));
   }
}
int main() {
   int x , i=0;
   cout << "Enter the number of terms of series : ";
   cin >> x;
   cout << "\nFibonnaci Series : ";
   while(i < x) {
      cout << " " << fibonnaci(i);
      i++;
   }
   return 0;
}


text:
/*
Pattern-->
1 2 3 4 5 6 7 6 5 4 3 2 1
1 2 3 4 5 6   6 5 4 3 2 1
1 2 3 4 5       5 4 3 2 1
1 2 3 4           4 3 2 1
1 2 3               3 2 1
1 2                   2 1
1                       1
1 2                   2 1
1 2 3               3 2 1
1 2 3 4           4 3 2 1
1 2 3 4 5       5 4 3 2 1
1 2 3 4 5 6   6 5 4 3 2 1
1 2 3 4 5 6 7 6 5 4 3 2 1
*/
#include<stdio.h>
void pattern(int);
int sp=2;
int main(){
    pattern(7);
    return 0;
}
// Recursive Function
void pattern(int n){
    if(n==1){
        printf("1                       1\n");
        sp-=4;
        return;
    }
    if(n==7){
        printf("1 2 3 4 5 6 7 6 5 4 3 2 1\n");
        n--;
    }
    for(int i=1; i<=n; i++){
        printf("%d ", i);
    }
    for(int i=1;i<=sp;i++){
        printf(" ");
    }
    sp+=4;
    for(int i=n; i>=1; i--){
        printf("%d ", i);
    }
    printf("\n");
    pattern(n-1);
    for(int i=1; i<=n; i++){
        printf("%d ", i);
    }
    for(int i=1;i<=sp;i++){
        printf(" ");
    }
    sp-=4;
    for(int i=n; i>=1; i--){
        printf("%d ", i);
    }
    if(n==6){
        printf("\n1 2 3 4 5 6 7 6 5 4 3 2 1");
    }
    printf("\n");
}


text:
#include <bits/stdc++.h>
using namespace std;

int max(int a, int b);
int lcs( char *X, char *Y, int m, int n )
{
	if (m == 0 || n == 0)
		return 0;
	if (X[m-1] == Y[n-1])
		return 1 + lcs(X, Y, m-1, n-1);
	else
		return max(lcs(X, Y, m, n-1), lcs(X, Y, m-1, n));
}
int max(int a, int b)
{
	return (a > b)? a : b;
}
int main()
{
	char X[] = "BD";
	char Y[] = "ABCD";

	int m = strlen(X);
	int n = strlen(Y);

	cout<<"Length of LCS is "<< lcs( X, Y, m, n ) ;

	return 0;
}


text:
#include <bits/stdc++.h>
using namespace std;

void towerOfHanoi(int n, char from_rod, char to_rod,
                  char aux_rod)
{
    if (n == 0) {
        return;
    }
    towerOfHanoi(n - 1, from_rod, aux_rod, to_rod);
    cout << "Move disk " << n << " from rod " << from_rod
         << " to rod " << to_rod << endl;
    towerOfHanoi(n - 1, aux_rod, to_rod, from_rod);
}

int main()
{
    int N = 3;
     towerOfHanoi(N, 'A', 'C', 'B');
    return 0;
}


text:
class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {

        nums1.resize(m);

        for(int i = 0; i<n; i++){

            nums1.push_back(nums2[i]);

        }

        sort(nums1.begin(), nums1.end());

    }
};


text:
# Contributing

If you know of a resource discussing JSON Schema or have created a tool or
website about JSON Schema, [open a GitHub
issue](https://github.com/jviotti/awesome-jsonschema/issues/new/choose) or
add it directly to
[`data.yaml`](https://github.com/jviotti/awesome-jsonschema/blob/master/data.yaml)
and send a pull request. The README is auto-generated from `data.yaml`. You
can locally render the README as follows:

```sh
npm install
npm start
```

repo_name: sourcemeta/awesome-jsonschema

repo_language: Handlebars

mime_type: text/plain


text:
const fs = require('fs')
const util = require('util')
const path = require('path')
const handlebars = require('handlebars')
const yaml = require('js-yaml')
const Ajv = require('ajv/dist/2020')
const addFormats = require('ajv-formats')
const helpers = require('handlebars-helpers')({ handlebars })

const SCHEMA = require('./schema.json')

const ajv = new Ajv({
  allowUnionTypes: true,
  strict: false,
  strictTypes: true,
  strictTuples: true,
  validateSchema: true,
  validateFormats: true,
  allErrors: true
})

addFormats(ajv)

/*
 * Validate the data against the schema
 */
const validateFunction = ajv.compile(SCHEMA)
console.error('Reading YAML data file...')
const DATA = yaml.load(fs.readFileSync(path.resolve(__dirname, 'data.yaml'), 'utf8'))
console.error('Validating the data against the schema...')
if (!validateFunction(DATA)) {
  console.error('Validation failed')
  for (const error of validateFunction.errors) {
    console.error(`- [${error.instancePath}]: ${error.message}`)
  }
  process.exit(1)
}

for (const item of DATA) {
  for (const subitem of DATA) {
    if (!util.isDeepStrictEqual(item, subitem) && item.url === subitem.url) {
      console.error(`Duplicated URL: ${item.url}`)
      process.exit(1)
    }
  }
}

/*
 * Generate the README from the data
 */
console.error('Reading template...')
const template = fs.readFileSync(path.resolve(__dirname, 'template.hbs'), 'utf8')
console.error('Generating README...')
const output = handlebars.compile(template)({
  data: DATA,
  reverseSortBy: (...args) => {
    return helpers.sortBy(...args).reverse()
  }
})
fs.writeFileSync(path.resolve(__dirname, 'README.md'), output)
console.error('Done!')


text:
- title: Using JSON Schema
  url: https://books.apple.com/us/book/using-json-schema/id903248630
  year: 2014
  type: book
  summary: Learn and Apply JSON Schema by Example, with JavaScript (Node.js) and Python Programs
- title: JSON at Work
  url: https://www.oreilly.com/library/view/json-at-work/9781491982389/
  year: 2017
  type: book
  summary: A comprehensive overview of the JSON ecosystem, including JSON Schema
- title: API by Design
  url: https://smizell.gumroad.com/l/apibydesign
  year: 2021
  type: book
  summary: Introduces an approach to measure API complexity by analyzing entropy in JSON Schema definitions

- title: 'JSON Schema in Production - #1 Chuck Reeves at Zones'
  url: https://www.youtube.com/watch?v=fkziMQD7pqQ
  year: 2022
  type: video
  summary: Ben talks to Chuck Reeves, previously at Zones, about how they used JSON Schema to validate data and keep it in a consistent format across their application. Chuck shares how using a public API gateway to validate incoming data saved developers time and compute effort, making sure only valid data was passed downstream to serverless functions or other services

- title: 'JSON Schema in Production - #2 Kin Lane at F5'
  url: https://www.youtube.com/watch?v=pibZF049zqE
  year: 2022
  type: video
  summary: Kin shares the challenges of building a company wide index of data structures (or Schema Registry), aiming to help understand previous, and avoid future, unexpected breaking changes that really impact customers

- title: 'JSON Schema in Production: #3 Mads Kristensen at Microsoft'
  url: https://www.youtube.com/watch?v=-yYTxLZZk58
  year: 2022
  type: video
  summary: Mads shares the story of bringing JSON Schema support into Visual Studio back in version 2013, the first editor supporting JSON Schema. What's called .Net Core today needed tooling for their "project.json" file, similar to a "package.json" file. JSON Schema ended up playing a key role in the autocompletion and validation infastructure ontop of a basic JSON editor

- title: 'JSON Schema in Production - #4 David Brownman at Zapier'
  url: https://www.youtube.com/watch?v=yDL98sd4KVE
  year: 2022
  type: video
  summary: David shares the story of using JSON Schema at Zapier to validate and document their intergration payloads, enabling a better developer experience for their 4000+ intergration partners.

- title: 'JSON Schema in Production - #5 Jens Neuse at Wundergraph'
  url: https://www.youtube.com/watch?v=_TCU6da0GA8
  year: 2022
  type: video
  summary: Jens Neuse, Founder of Wundergraph shares how Wundergraph compiles GraphQL definitions into JSON RPC and create JSON Schema definitions for each JSON RPC endpoint. Input data is validated using JSON Schema at the middleware-level before executing the corresponding GraphQL query

- title: 'JSON Schema in Production - #6 Suresh Srinivas at OpenMetadata'
  url: https://www.youtube.com/watch?v=ZrVTZwmTR3k
  year: 2022
  type: video
  summary: We talk to Suresh Srinivas, Co-Founder at Collate, building OpenMetadata. (Previously engineering leadership at Uber and Founder of Hortonworks.)

- title: Configuring Umbraco on .NET Core - JSON Schema
  url: https://www.youtube.com/watch?v=rpUg-oySw8g
  year: 2021
  type: video
  summary: Configuring Umbraco on .NET Core with JSON Schema-powered autocompletions for appsettings.json using SchemaStore
- title: API Storytelling with Ben Hutton
  url: https://www.youtube.com/watch?v=4xbA82lo_lc
  year: 2021
  type: video
  summary: This episode we sit down with Ben Hutton, the lead behind the JSON Schema community to talk about vocabularies and other ways we validate and annotate how we tell stories we tell in the API space
- title: What is JSON Schema
  url: https://www.youtube.com/watch?v=kK-_gL7Vsc0
  year: 2020
  type: video
  summary: A basic introduction to JSON Schema showing how to auto-generate JSON Schema document from an existing JSON document
- title: "What is a JSON Schema? Generate, Modify, and Understand a JSON Schema: Example"
  url: https://www.youtube.com/watch?v=hGXxXyJmaUo
  year: 2019
  type: video
  summary: An in-depth introduction to JSON Schema including auto-generating JSON Schema documents using QuickType.io
- title: "JSON Schema Validation: How to Validate JSON Schema with Postman?"
  url: https://www.youtube.com/watch?v=X072eKtOIio
  year: 2019
  type: video
  summary: An introduction to JSON Schema and how to use it in Postman
- title: JSON Schema Validation in Postman
  url: https://www.youtube.com/watch?v=8BfshV5n6ac
  year: 2021
  type: video
  summary: An tutorial of performing JSON Schema validation in Postman in API tests
- title: Processing and Interchanging JSON Data
  url: https://www.linkedin.com/learning/processing-and-interchanging-json-data
  year: 2017
  type: course
  summary: An in-depth guide to working with JSON and the JSON ecosystem including using JSON Schema for validation purposes
- title: JSON Schema - Crash Course for Beginners
  url: https://www.udemy.com/course/json-schema-crash-course-for-beginners/
  year: 2017
  type: course
  summary: Learn JSON & JSON Schema in a Quick 30-40 minutes & use it for the rest of your life for complex projects
- title: JSON Schema Tutorial
  url: https://www.w3resource.com/JSON/JSON-Schema.php
  year: 2020
  type: tutorial
  summary: A tutorial of JSON Schema that discusses validation, documentation and hyperlinking
- title: JSON Schema bundling finally formalised
  url: https://json-schema.org/blog/posts/bundling-json-schema-compound-documents
  year: 2021
  type: article
  summary: A close look at bundling and de-referencing JSON Schema documents
- title: Modeling a file system with JSON Schema
  url: https://json-schema.org/learn/file-system.html
  year: 2021
  type: article
  summary: This example shows a possible JSON Schema representation of file system mount points as represented in an /etc/fstab file

- title: JSON Schema Validator, Generator & Editor Guide
  url: https://stoplight.io/json-guide/
  year: 2018
  type: article
  summary: How the JSON and JSON Schema standards are defined and how to put them to use in your code and in your APIs
- title: "REST API Tutorial: JSON Schema"
  url: https://restfulapi.net/json-schema/
  year: 2019
  type: tutorial
  summary: An short introduction to JSON Schema validation
- title: "TutorialsPoint: JSON Schema"
  url: https://www.tutorialspoint.com/json/json_schema.htm
  year: 2013
  type: tutorial
  summary: A short introduction to JSON Schema Draft4 validation
- title: "An introduction to JSON Schema"
  url: https://medium.com/swlh/an-introduction-to-json-schema-8eaea643fcda
  year: 2020
  type: tutorial
  summary: An introduction to JSON Schema covering its history, common keywords and how to use the AJV validator
- title: "Introduction to JSON Schema in Java"
  url: https://www.baeldung.com/introduction-to-json-schema-in-java
  year: 2021
  type: tutorial
  summary: A short introduction to validating JSON documents with JSON Schema in Java
- title: "Using the JSON Schema standard for scientific applications?"
  url: https://cerfacs.fr/coop/json-schema-for-sci-apps
  year: 2020
  type: article
  summary: A discussion on how to use JSON Schema to validate input, add precise documentation, auto-fill missing parts, and create graphical user interfaces in the context of scientific applications
- title: "Building a No-Code JSON Schema Form Builder with ReactJS"
  url: https://www.ginkgobioworks.com/2020/10/08/building-a-no-code-json-schema-form-builder/
  year: 2020
  type: article
  summary: An update on the additional features implemented in the react-json-schema-form-builder open-source JSON Schema form builder project
- title: "Saved by the Schema: Using JSON Schema to Document, Test, and Debug APIs"
  url: https://blog.heroku.com/json-schema-document-debug-apis
  year: 2019
  type: article
  summary: Learn how Heroku uses JSON Schema to test and document their Platform API, and how it helped them uncover an unexpected bug, rooted in the way the Oj gem parses Big Decimals
- title: "Validating and documenting JSON with JSON Schema"
  url: https://www.mscharhag.com/api-design/json-schema
  year: 2020
  type: tutorial
  summary: An introduction to JSON Schema by example by showing an annotated JSON Schema that validates an example document
- title: How to Integrate "React JSON Schema Form" into a Redux and Typescript Project
  url: https://www.xtivia.com/blog/how-to-integrate-react-json-schema-form-into-a-redux-and-typescript-project/
  year: 2020
  type: tutorial
  summary: Adding a form using "React JSON Schema Form" and integrating it with Redux and Typescript
- title: JSON Schema Validation & Expressive Query Syntax in MongoDB 3.6
  url: https://www.sitepoint.com/json-schema-validation-expressive-query-syntax-in-mongodb-3-6/
  year: 2018
  type: article
  summary: An in-depth discussion about using JSON Schema to define collection validation on MongoDB
- title: Azure Pipelines autocomplete in PyCharm, IntelliJ, WebStorm, CLion, and Rider
  url: https://tonybaloney.github.io/posts/azure-pipelines-autocomplete-in-pycharm.html
  year: 2020
  type: article
  summary: Setting up PyCharm, IntelliJ, WebStorm, CLion and Rider to have auto-complete, syntax highlighting and validation support of Azure Pipelines workflows
- title: PHP With MySQL
  url: https://elephantdolphin.blogspot.com/2019/07/json-schema-validation-with-mysql-8017.html
  year: 2019
  type: tutorial
  summary: A practical tutorial on expressing JSON Schema table constraints on MySQL

- title: Definitions for filtering properties in JSON schema
  url: https://gist.github.com/LucianBuzzo/5ff9106ce3ae12fb58e4def572b9344d
  year: 2018
  type: article
  summary: An introduction to the problem of using JSON Schema for data filtering and querying purposes

- title: Getting started with JSON Hyper-Schema
  url: https://apisyouwonthate.com/blog/getting-started-with-json-hyper-schema
  year: 2017
  type: tutorial
  summary: An introduction to the Hyper-Schema JSON Schema vocabulary

- title: "JSON Schema: Getting Started Step-By-Step"
  url: https://json-schema.org/learn/getting-started-step-by-step.html
  year: 2021
  type: tutorial
  summary: A comprehensive introduction to JSON Schema

- title: Understanding JSON Schema
  url: https://json-schema.org/understanding-json-schema/
  year: 2021
  type: tutorial
  summary: An in-depth guide to JSON Schema

- title: OpenAPI
  url: https://swagger.io/specification/
  year: 2021
  type: spec
  summary: The OpenAPI specification embeds and extends JSON Schema for defining API request and responses
- title: RAML
  url: https://raml.org
  year: 2021
  type: spec
  summary: The RAML specification supports modeling API data using JSON Schema

- title: W3C Web of Things
  url: https://www.w3.org/WoT/
  year: 2020
  type: spec
  summary: The Web of Things (WoT) seeks to counter the fragmentation of the IoT by using and extending existing, standardized Web technologies. WoT models data using JSON Schema

- title: AsyncAPI
  url: https://www.asyncapi.com/docs/specifications/v2.1.0
  year: 2021
  type: spec
  summary: AsyncAPI is an open source initiative that seeks to improve the current state of Event-Driven Architectures (EDA). The AsyncAPI specification supports data modeling using JSON Schema

- title: JSON Schema in RDF
  url: https://www.w3.org/2019/wot/json-schema
  year: 2021
  type: spec
  summary: This document introduces an RDF vocabulary for JSON schema definitions. This vocabulary provides a stable namespace IRI for JSON schema keywords, as well as simple axioms, defined against schema.org's meta-model. Various examples on how to use the vocabulary are also introduced, e.g. to annotate schemas with JSON-LD metadata or to embed schema annotations inside RDF graphs

- title: JSON Schema Core 2020-12
  url: https://json-schema.org/draft/2020-12/json-schema-core.html
  year: 2020
  type: spec
  summary: JSON Schema defines the media type "application/schema+json", a JSON-based format for describing the structure of JSON data. JSON Schema asserts what a JSON document must look like, ways to extract information from it, and how to interact with it. The "application/schema-instance+json" media type provides additional feature-rich integration with "application/schema+json" beyond what can be offered for "application/json" documents

- title: JSON Schema Validation 2020-12
  url: https://json-schema.org/draft/2020-12/json-schema-validation.html
  year: 2020
  type: spec
  summary: JSON Schema (application/schema+json) has several purposes, one of which is JSON instance validation. This document specifies a vocabulary for JSON Schema to describe the meaning of JSON documents, provide hints for user interfaces working with JSON data, and to make assertions about what a valid document must look like

- title: Relative JSON Pointers
  url: https://json-schema.org/draft/2020-12/relative-json-pointer.html
  year: 2020
  type: spec
  summary: JSON Pointer is a syntax for specifying locations in a JSON document, starting from the document root. This document defines an extension to the JSON Pointer syntax, allowing relative locations from within the document

- title: JSON Hyper-Schema
  url: https://datatracker.ietf.org/doc/html/draft-handrews-json-schema-hyperschema-02
  year: 2019
  type: spec
  summary: JSON Schema is a JSON-based format for describing JSON data using various vocabularies.  This document specifies a vocabulary for annotating JSON documents with hyperlinks.  These hyperlinks include attributes describing how to manipulate and interact with remote resources through hypermedia environments such as HTTP, as well as determining whether the link is usable based on the instance value

- title: JSON:API
  url: https://github.com/json-api/json-api/blob/a0296352b6eb57a4ea3eb08a1332e311f78adafa/schema
  type: adoption
  summary: The JSON:API 1.0 and later specifications for building APIs in JSON use JSON Schema to define JSON:API responses
- title: MongoDB
  url: https://docs.mongodb.com/manual/reference/operator/query/jsonSchema/
  type: adoption
  summary: MongoDB 3.6 and later support JSON Schema for querying data and defining collection constraints
- title: Assertible
  url: https://assertible.com/json-schema-validation
  type: adoption
  summary: Assertible provides a free-to-use API to validate a JSON document against a JSON Schema and a service to test and monitor web services using JSON Schema
- title: MySQL
  url: https://dev.mysql.com/doc/refman/8.0/en/json-validation-functions.html
  type: adoption
  summary: MySQL 8.0.17 and later support table constraints to validate a JSON document against a JSON Schema
- title: Amazon EventBridge Schema Registry
  url: https://aws.amazon.com/about-aws/whats-new/2020/09/amazon-eventbridge-schema-registry-announces-support-for-json-schema/
  type: adoption
  summary: Amazon EventBridge Schema Registry has support for JSON Schema, allowing customers to validate, annotate, and manipulate JSON documents conforming to JSON Schema Draft 4 specification

- title: KrakenD
  url: https://www.krakend.io/docs/endpoints/json-schema/
  type: adoption
  summary: KrakenD endpoints receiving a JSON object in its body can apply automatic validations using the JSON Schema vocabulary before the content passes to the backends
- title: IBM App Connect
  url: https://www.ibm.com/docs/en/app-connect/11.0.0?topic=schema-json-requirements-message-maps
  type: adoption
  summary: The Graphical Data Mapping editor can be used to create and transform JSON messages with the data model defined from a JSON schema
- title: Confluent Schema Registry
  url: https://docs.confluent.io/platform/current/schema-registry/serdes-develop/serdes-json.html
  type: adoption
  summary: JSON Schema can be configured with the Apache Kafka Java client and console tools to fail if the payload is not valid for the given schema
- title: RESTHeart
  url: https://restheart.org/docs/json-schema-validation/
  type: adoption
  summary: "RESTHeart supports MongoDB schema validation to enforce a format to documents: rules-based validation from MongoDB 3.2 and Json Schema validation from MongoDB 3.6"
- title: MuleSoft
  url: https://docs.mulesoft.com/json-module/2.1/json-schema-validation
  type: adoption
  summary: The MuleSoft integration framework supports validating a JSON document against a JSON Schema
- title: Apiary
  url: https://help.apiary.io/api_101/json-schema/
  type: adoption
  summary: Apiary's interactive documentation is able to render JSON Schema documents associated with payloads
- title: Axway API Gateway
  url: https://docs.axway.com/bundle/APIGateway_762_PolicyDevFilterReference_allOS_en_HTML5/page/Content/PolicyDevTopics/content_schema_json.htm
  type: adoption
  summary: The API Gateway can check that JavaScript Object Notation (JSON) messages conform to the format expected by a web service by validating requests against a specified JSON schema
- title: Ory Kratos
  url: https://www.ory.sh/kratos/docs/reference/json-schema-json-paths/
  type: adoption
  summary: The Ory Kratos identity & user management product relies on JSON Schema from configuration validation, documentation generation for defining identity schemas
- title: Hackolade
  url: https://hackolade.com/help/JSONSchema.html
  type: adoption
  summary: The Hackolade data modelling service supports defining entities using JSON Schema
- title: JamF
  url: https://docs.jamf.com/technical-papers/jamf-pro/json-schema/10.26.0/Understanding_the_Structure_of_a_JSON_Schema_Manifest.html
  type: adoption
  summary: The JamF Apple enterprise management service supports creating app manifests using JSON Schema
- title: SpreadJS
  url: https://www.grapecity.com/spreadjs/docs/v13/online/jsonschema.html
  type: adoption
  summary: The SpreadJS JavaScript spreadsheet library uses JSON Schema to describe the SpreadJS JSON data format
- title: Contentstack
  url: https://www.contentstack.com/docs/developers/create-content-types/json-schema-for-creating-a-content-type/
  type: adoption
  summary: The Contentstack CMS platform supports creating content types using JSON Schema
- title: Decisions
  url: https://documentation.decisions.com/docs/create-types-json-schema
  type: adoption
  summary: The Decisions rules-driven business process automation platform support using JSON Schema to generate JSON deserializers
- title: Informatica
  url: https://docs.informatica.com/data-integration/b2b-data-transformation/10-2-2/user-guide/wizard-input-and-output-formats/json/sample-json-schema.html
  type: adoption
  summary: The Informatica data management platform supports creating auto-generated data processor transformations using JSON Schema
- title: JetBrains
  url: https://www.jetbrains.com/help/objc/json.html
  type: adoption
  summary: The suite of JetBrains programming editors supports JSON code-completion based on JSON Schema
- title: Postman
  url: https://learning.postman.com/docs/writing-scripts/script-references/test-examples/
  type: adoption
  summary: The Postman API platform supports running JSON Schema validation in API tests
- title: Human Cell Atlas
  url: https://data.humancellatlas.org/metadata/structure
  type: adoption
  summary: The open data generated by the Human Cell Atlas describes metadata structure using JSON Schema
- title: Genomic Data Commons
  url: https://gdc.cancer.gov/developers/gdc-data-model
  type: adoption
  summary: The Genomic Data Commons data model is defined using JSON Schema
- title: Drupal Patternkit
  url: https://www.drupal.org/project/patternkit
  type: adoption
  summary: The Drupal Patternkit module uses JSON Schema to define pattern templates
- title: Smart Data Models
  url: https://github.com/smart-data-models
  type: adoption
  summary: The Smart Data Models GitHub organization makes use of JSON Schema to describe harmonized Data Models for different Smart Domains
- title: Walmart eCommerce
  url: https://developer.walmart.com/documentation/item-object-v4-0/
  type: adoption
  summary: Walmart publishes JSON Schema documents for certain resources that developers can make use of when integratting with the Walmart eCommerce platform
- title: Retool
  url: https://docs.retool.com/docs/working-with-json-schema-form
  type: adoption
  summary: The Retool no-code platform supports generating web forms using JSON Schema
- title: Adobe Experience Manager
  url: https://experienceleague.adobe.com/docs/experience-manager-65/forms/adaptive-forms-advanced-authoring/adaptive-form-json-schema-form-model.html?lang=en
  type: adoption
  summary: The Adobe Experience Manager content management solution for building websites, mobile apps and forms supports creating adaptative forms using JSON Schema
- title: Form.io
  url: https://www.form.io/article/angular-json-schema-form-builder
  type: adoption
  summary: The Form.io online web form generator supports generating Angular.js forms using JSON Schema
- title: Cloudflare
  url: https://blog.cloudflare.com/cloudflares-json-powered-documentation-generator/
  type: adoption
  summary: The Cloudflare makes use of JSON Schema and Hyper Schema to keep track of their API endpoints
- title: Lightblue.io
  url: https://docs.lightblue.io/standards/json_schema.html
  type: adoption
  summary: The Lightblue document based data access layer framework uses JSON Schema to define certain file resources in the project
- title: Open Policy Agent (OPA)
  url: https://blog.openpolicyagent.org/enhanced-type-checking-for-opa-with-json-schema-annotations-826acb0f575
  type: adoption
  summary: The OPA policy-based control platform 0.27.0 and newer support statically type-checking Rego policy code using JSON Schema
- title: Serverless
  url: https://www.serverless.com/framework/docs/configuration-validation/
  type: adoption
  summary: The Serverless framework validates service configuration files using JSON Schema
- title: Snowplow
  url: https://docs.snowplowanalytics.com/docs/understanding-tracking-design/understanding-schemas-and-validation/
  type: adoption
  summary: The Snowplow analytics platform support using JSON Schema to define the structure of the data to collect
- title: Heroku
  url: https://blog.heroku.com/json_schema_for_heroku_platform_api
  type: adoption
  summary: Heroku makes use of JSON Schema to publish machine-readable schema definitions for their public APIs
- title: DocSpring
  url: https://docspring.com/docs/api/get_template_schema.html
  type: adoption
  summary: The DocSpring service to automatically fill out PDF forms supports generating JSON Schema definitions for user-created templates
- title: Nakadi
  url: https://nakadi.io
  type: adoption
  summary: The Nakadi open-source distributed event bus supports defining event types with JSON Schema
- title: Mozilla Data Pipeline
  url: https://docs.telemetry.mozilla.org/concepts/pipeline/schemas.html
  type: adoption
  summary: Mozilla Data Pipeline uses JSON Schema to define telemetry data ingested from Mozilla products and logs from various services
- title: nf-core
  url: https://nf-co.re/tools/#pipeline-schema
  type: adoption
  summary: The nf-core Nextflow analysis pipelines collection uses JSON Schema to define the parameters used by Nextflow workflows
- title: Linux
  url: https://www.kernel.org/doc/html/latest/devicetree/bindings/writing-schema.html
  type: adoption
  summary: The Linux kernel uses JSON Schema to define Devicetree bindings
- title: Cloudflare Terraform
  url: https://www.infoq.com/news/2021/04/cloudflare-terraform/
  type: adoption
  summary: The Cloudflare Terraform provider comes with a tool to generate Terraform configuration from existing Cloudflare resources that uses JSON Schema to map data between both technologies

- title: RDA DMP Common Standard for machine-actionable Data Management Plans
  url: https://github.com/RDA-DMP-Common/RDA-DMP-Common-Standard
  type: adoption
  summary: The RDA DMP Common Standards Working Group maintains JSON Schemas to validate maDMP JSON documents
- title: NinJS
  url: https://www.iptc.org/std/ninjs/userguide/
  type: adoption
  summary: NinJS standardises the representation of news content in JSON and maintains a JSON Schema document to help validate NinJS implementations

- title: JSON BinPack
  url: https://www.jsonbinpack.org
  type: adoption
  summary: JSON BinPack uses JSON Schema to perform space-efficient JSON binary serialization

- title: GitHub Discussions
  url: https://github.com/json-schema-org/community/discussions
  type: official
  summary: The discussions page of JSON Schema
- title: Twitter
  url: https://twitter.com/jsonschema
  type: official
  summary: The Twitter account of the JSON Schema project
- title: GitHub
  url: https://github.com/json-schema-org
  type: official
  summary: The official GitHub organization of the JSON Schema project
- title: Test Suite
  url: https://github.com/json-schema-org/JSON-Schema-Test-Suite
  type: official
  summary: The official test suite for JSON Schema implementations
- title: Slack
  url: https://json-schema.org/slack
  type: official
  summary: The official Slack workspace of JSON Schema
- title: Stack Overflow
  url: https://stackoverflow.com/questions/tagged/jsonschema
  type: official
  summary: The JSON Schema tag in Stack Overflow
- title: YouTube
  url: https://www.youtube.com/channel/UCrl3fjmHSp6FhJUKcEJhisA
  type: official
  summary: The JSON Schema official YouTube channel

- title: JSON Schema 2020-12 Core
  url: https://json-schema.org/draft/2020-12/vocab/core
  type: vocabulary
  summary: Keywords that are either required in order to process any schema or meta-schema, including those split across multiple documents, or exist to reserve keywords for purposes that require guaranteed interoperability
- title: JSON Schema 2020-12 Applicator
  url: https://json-schema.org/draft/2020-12/vocab/applicator
  type: vocabulary
  summary: Applicator keywords that are recommended for use as the basis of other vocabularies
- title: JSON Schema 2020-12 Unevaluated
  url: https://json-schema.org/draft/2020-12/vocab/unevaluated
  type: vocabulary
  summary: Keywords that enable schema authors to apply subschemas to array items or object properties that have not been successfully evaluated against any dynamic-scope subschema of any adjacent keywords
- title: JSON Schema 2020-12 Validation
  url: https://json-schema.org/draft/2020-12/vocab/validation
  type: vocabulary
  summary: Validation keywords in a schema impose requirements for successful validation of an instance. These keywords are all assertions without any annotation behavior
- title: JSON Schema 2020-12 Format Annotation
  url: https://json-schema.org/draft/2020-12/vocab/format-annotation
  type: vocabulary
  summary: An annotation keyword defined to allow schema authors to convey semantic information for a fixed subset of values which are accurately described by authoritative resources
- title: JSON Schema 2020-12 Format Assertion
  url: https://json-schema.org/draft/2020-12/vocab/format-assertion
  type: vocabulary
  summary: An assertion keyword defined to allow schema authors to convey semantic information for a fixed subset of values which are accurately described by authoritative resources
- title: JSON Schema 2020-12 Content
  url: https://json-schema.org/draft/2020-12/vocab/content
  type: vocabulary
  summary: Annotations keywords that indicate that an instance contains non-JSON data encoded in a JSON string
- title: JSON Schema 2020-12 Meta-Data
  url: https://json-schema.org/draft/2020-12/vocab/meta-data
  type: vocabulary
  summary: These general-purpose annotation keywords provide commonly used information for documentation and user interface display purposes
- title: Hyper-Schema 2019-09
  url: https://json-schema.org/draft/2019-09/vocab/hyper-schema
  type: vocabulary
  summary: Keywords to annotate JSON documents with hyperlinks. These hyperlinks include attributes describing how to manipulate and interact with remote resources through hypermedia environments such as HTTP, as well as determining whether the link is usable based on the instance value

- title: Type Safety with JSON Subschema
  url: https://arxiv.org/abs/1911.12651
  year: 2020
  type: paper
  summary: Deciding whether one schema is a subschema of another is non-trivial because of the richness of the JSON Schema specification language. Given a pair of schemas, our approach first canonicalizes and simplifies both schemas, then decides the subschema question on the canonical forms, dispatching simpler subschema queries to type-specific checkers

- title: Witness Generation for JSON Schema
  url: https://arxiv.org/abs/2202.12849
  year: 2022
  type: paper
  summary: "JSON Schema is an important, evolving standard schema language for families of JSON documents. It is based on a complex combination of structural and Boolean assertions, and features negation and recursion. The static analysis of JSON Schema documents comprises practically relevant problems, including schema satisfiability, inclusion, and equivalence. These three problems can be reduced to witness generation: given a schema, generate an element of the schema, if it exists, and report failure otherwise"

- title: What Are Real JSON Schemas Like?
  url: https://link.springer.com/chapter/10.1007/978-3-030-34146-6_9
  year: 2019
  type: paper
  summary: A first empirical analysis of a curated collection of real-world JSON Schemas. Knowing what real JSON Schemas are like (to borrow from a title of a related study on DTDs) helps practitioners and researchers in making realistic assumptions when building tools for JSON Schema processing

- title: Challenges in Checking JSON Schema Containment over Evolving Real-World Schemas
  url: https://link.springer.com/chapter/10.1007/978-3-030-65847-2_20
  year: 2020
  type: paper
  summary: This paper presents the results of an empirical study of the first generation of tools for checking JSON Schema containment which is applied to a diverse collection of over 230 real-world schemas and their altogether 1k historic versions

- title: Schema Inference for Massive JSON Datasets
  url: https://hal.archives-ouvertes.fr/hal-01491765
  year: 2017
  type: paper
  summary: "Recent years have seen the widespread use of JSON as a data format to represent massive data collections. JSON data collections are usually schemaless. While this ensures several advantages, the absence of schema information has important negative consequences: the correctness of complex queries and programs cannot be statically checked, users cannot rely on schema information to quickly figure out structural properties that could speed up the formulation of correct queries, and many schema-based optimizations are not possible. In this paper we deal with the problem of inferring a schema from massive JSON data sets"

- title: JSON Schema Inference Approaches
  url: https://link.springer.com/chapter/10.1007/978-3-030-65847-2_16
  year: 2020
  type: paper
  summary: In the context of document NoSQL databases, namely those assuming the JSON data format, this paper focuses on several representatives of the existing inference approaches and provide their thorough comparison

- title: JSONSchema.dev
  url: https://jsonschema.dev
  type: tool
  summary: An online JSON Schema validator created by the JSON Schema specification lead

- title: JSON Schema Viewer
  url: http://jlblcc.github.io/json-schema-viewer/
  type: tool
  summary: An online tool to visualize JSON Schema definitions

- title: Hyperjump JSON Schema Validator
  url: https://json-schema.hyperjump.io
  type: tool
  summary: An online JSON Schema validator that supports Draft 04, 06, 07, 2019-09, and 2020-12
- title: JSONschema.Net
  url: https://www.jsonschema.net
  type: tool
  summary: An online tool that generates JSON schema from JSON documents
- title: JSON Schema Validator
  url: https://www.jsonschemavalidator.net
  type: tool
  summary: An online JSON Schema validator with support for JSON Schema Draft 3, Draft 4, Draft 6, Draft 7 and Draft 2019-09
- title: JSON Schema Validator and Generator
  url: https://extendsclass.com/json-schema-validator.html
  type: tool
  summary: An online JSON Schema validator that can generate JSON Schema from JSON documents and generate random JSON documents from JSON Schema

- title: Top-Down Model-Driven Engineering of Web Services from Extended OpenAPI Models
  url: https://ieeexplore.ieee.org/abstract/document/9000020
  year: 2018
  type: paper
  summary: Shows how OpenAPI can be extended to add implementation details inside models. These extensions link services to assemblies of components that describe computations. Hence a top-down development process that keeps model and implementation aligned

- title: Foundations of JSON Schema
  url: https://dl.acm.org/doi/abs/10.1145/2872427.2883029
  year: 2016
  type: paper
  summary: In this paper we provide the first formal definition of syntax and semantics for JSON Schema and use it to show that implementing this layer on top of JSON is feasible in practice

- title: "User profile integration made easy: model-driven extraction and transformation of social network schemas"
  url: https://dl.acm.org/doi/abs/10.1145/2187980.2188227
  year: 2012
  type: paper
  summary: This paper presents, firstly, a semi-automatic approach to extract schema information from instance data. Secondly, transformations of the derived schemas to different technical spaces are utilized, thereby allowing, amongst other benefits, the application of established integration tools and methods. Finally, as a case study, schemas are derived for Facebook, Google+, and LinkedIn

- title: Example-Driven Web API Specification Discovery
  url: https://link.springer.com/chapter/10.1007/978-3-319-61482-3_16
  year: 2017
  type: paper
  summary: In this paper we present an example-driven discovery process that generates model-based OpenAPI specifications for REST Web APIs by using API call examples. A tool implementing our approach and a community-driven repository for the discovered APIs are also presented

- title: "Jsongen: a quickcheck based library for testing JSON web services"
  url: https://dl.acm.org/doi/abs/10.1145/2633448.2633454
  year: 2014
  type: paper
  summary: This article describes a systematic approach to testing behavioural aspects of Web Services that communicate using the JSON data format. To generate random JSON data for populating tests we have developed a new library, jsongen, which given a characterisation of the JSON data as a JSON schema, (i) automatically derives a QuickCheck generator which can generate an infinite number of JSON values that validate against the schema, and (ii) provides a generic QuickCheck state machine which is capable of following the (hyper)links documented in the JSON schema, to automatically explore the web service

- title: An Approach for Schema Extraction of JSON and Extended JSON Document Collections
  url: https://ieeexplore.ieee.org/abstract/document/8424731
  year: 2018
  type: paper
  summary: This paper presents an approach that extracts a schema from a JSON or Extended JSON document collection stored in a NoSQL document-oriented database or other document repository. Aggregation operations are considered in order to obtain a schema for each distinct structure in the collection, and a hierarchical data structure is proposed to group these schemas in order to generate a global schema in JSON Schema format

- title: Schema extraction and structural outlier detection for JSON-based nosql data stores
  url: https://dl.gi.de/handle/20.500.12116/2420
  year: 2015
  type: paper
  summary: Rather than designing the schema up front, extracting a schema in hindsight can be seen as a reverse-engineering step. Based on the extracted schema information, we propose set of similarity measures that capture the degree of heterogeneity of JSON data and which reveal structural outliers in the data

- title: Definition of REST web services with JSON schema
  url: https://dl.acm.org/doi/abs/10.1002/spe.2466
  year: 2017
  type: paper
  summary: The aim of this article is to demonstrate how JSON Schema, and particularly the JSON Hyper Schema extension, is suitable to describe JSON-based web services that follow the REST architectural pattern

- title: Understanding API Complexity Through Schema Entropy
  url: https://smizell.com/posts/2021/05/understanding-api-complexity-through-schema-entropy/
  year: 2021
  type: article
  summary: A look at API complexity by analyzing entropy of JSON Schema documents

- title: Robustness, Tolerance, and JSON Schema
  url: https://smizell.com/posts/2021/07/robustness-tolerance-and-json-schema/
  year: 2021
  type: article
  summary: Applying the Robustness Principle and increasing schema entropy when making changes to an API

- title: SchemaStore
  url: https://www.schemastore.org
  type: registry
  summary: The largest collection of independent JSON schemas in the world meant as a universal JSON schema store, where schemas for popular JSON documents can be found

- title: Sourcemeta Schemas
  url: https://schemas.sourcemeta.com
  type: registry
  summary: An immutable collection of curated and versioned modern JSON Schema definitions

- title: TILT (machine-readable privacy policies)
  url: https://github.com/Transparency-Information-Language/schema
  type: adoption
  summary: TILT is a transparency information language and toolkit powered by JSON Schema explicitly designed to represent and process transparency information in line with the requirements of the EU General Data Protection Regulation and allowing for a more automated and adaptive use of such information than established, legalese data protection policies do

- title: Wordpress
  url: https://make.wordpress.org/themes/2021/11/30/theme-json-schema/
  type: adoption
  summary: Wordpress maintains official JSON Schema documents to help with building block based themes

- title: "TILT: A GDPR-Aligned Transparency Information Language and Toolkit for Practical Privacy Engineering"
  url: https://dl.acm.org/doi/10.1145/3442188.3445925
  year: 2021
  type: paper
  summary: We present TILT, a transparency information language and toolkit explicitly designed to represent and process transparency information in line with the requirements of the GDPR and allowing for a more automated and adaptive use of such information than established, legalese data protection policies do

- title: API Lifecycles, Specifications, and Standards with Kin Lane
  url: https://www.infoq.com/podcasts/api-lifecycles-specifications-standards/
  year: 2021
  type: podcast
  summary: Thomas Betts talks with Kin Lane about managing your API lifecycle using standards and specifications, including OpenAPI, AsyncAPI, and JSON Schema. These specifications and the tooling based on them can help reduce communication problems, by creating documentation, generating code, and automating testing

- title: "JSON Schema, Schema.org, JSON-LD: What's the Difference?"
  url: https://dashjoin.medium.com/json-schema-schema-org-json-ld-whats-the-difference-e30d7315686a
  year: 2020
  type: article
  summary: An overview of the difference between JSON Schema and JSON-LD, their relationship and the role of Schema.org

- title: "Project Cambria: Translate your data with lenses"
  url: https://www.inkandswitch.com/cambria/
  year: 2020
  type: article
  summary: A proposal for an isolated software layer that translates data between JSON Schema definitions on demand. Translation logic is defined by composing bidirectional lenses, a kind of data transformation that can run both forward and backward

- title: "Deriving Semantics-Aware Fuzzers from Web API Schemas"
  url: https://arxiv.org/abs/2112.10328
  year: 2021
  type: paper
  summary: Discusses JSON Schema canonicalization and JSON Schema instance derivation in the context of property-based testing of APIs

- title: Microsoft
  url: https://github.com/microsoft/json-schemas
  type: adoption
  summary: A collection of JSON Schema definitions used by products and services at Microsoft

- title: The Usage of Negation in Real-World JSON Schema Documents
  url: http://bilioso.isti.cnr.it/sebd2022/preprint/SEBD_2022_Camera-ready_PDF_8.pdf
  year: 2022
  type: paper
  summary: Many software tools, but also formal frameworks for working with JSON Schema, do not fully support negation. This motivates us to study whether negation is actually used in practice, for which aims, and whether it could, in principle, be replaced by simpler operators. We have collected a large corpus of 80k open source JSON Schema documents. We perform a systematic analysis, quantify usage patterns of negation, and also qualitatively analyze schemas. We show that negation is indeed used, albeit infrequently, following a stable set of patterns

- title: JSONBuddy
  url: https://www.json-buddy.com
  type: tool
  summary: A JSON editor and validator desktop application for Windows

- title: Implicit JSON Schema Versioning Triggered by Temporal Updates to JSON-Based Big Data in the τJSchema Framework
  url: https://link.springer.com/chapter/10.1007/978-3-031-07969-6_3
  year: 2022
  type: paper
  summary: This paper proposes an approach for handling implicit schema changes triggered by temporal updates of JSON-based Big Data. More precisely, when a user specifies a temporal JSON update operation that modifies a snapshot JSON component assigning a valid-time timestamp to its new value, the execution of such an operation requires the JSON component to become temporal, which is for all intents a schema change. Thus, a new version of the τJSchema temporal characteristics document is generated, with the addition of a new valid-time characteristic. New versions of the temporal JSON schema and of the temporal JSON document are also accordingly created

- title: "τJSchema: A Framework for Managing Temporal JSON-Based NoSQL Databases"
  url: https://link.springer.com/chapter/10.1007/978-3-319-44406-2_13
  year: 2016
  type: paper
  summary: This paper proposes a framework called Temporal JSON Schema (τJSchema), inspired by the τXSchema framework defined for XML data. τJSchema allows defining a temporal JSON schema from a conventional JSON schema and a set of temporal logical and physical characteristics. Our framework guarantees logical and physical data independence for temporal schemas and provides a low-impact solution since it requires neither modifications of existing JSON documents, nor extensions to the JSON format, the JSON Schema language, and all related tools and languages

- title: AlterSchema
  url: https://alterschema.sourcemeta.com
  type: tool
  summary: Convert a JSON Schema definition between specification versions

- title: Introducing SchemaVer for semantic versioning of schemas
  url: https://snowplowanalytics.com/blog/2014/05/13/introducing-schemaver-for-semantic-versioning-of-schemas/#feedback
  year: 2014
  type: article
  summary: A proposal for a versioning convention for JSON Schema definitions based on SemVer

- title: "JSON BinPack: A space-efficient schema-driven and schema-less binary serialization specification based on JSON Schema"
  url: https://www.jviotti.com/assets/dissertation.pdf
  year: 2022
  type: paper
  summary: A survey and benchmark of JSON-compatible binary serialization specifications followed by the introduction of JSON BinPack, a novel protocol-independent schema-driven and schema-less binary serialization specification that is strictly-compatible with JSON and takes advantage of JSON Schema formal definitions to produce bit-strings that are space-efficient in comparison to every considered alternative serialization specification

- title: Using Dynamic References to Support Generic Types
  url: https://json-schema.org/blog/posts/dynamicref-and-generics
  year: 2022
  type: article
  summary: Representing generic types from strongly-typed programming languages with JSON Schema

- title: Uniqueness of Array Items
  url: https://json-everything.net/json-schema/#a-vocabulary-for-identifying-uniqueness-of-array-items
  type: vocabulary
  summary: A vocabulary defining keywords that can be used to validate that arrary instances contain unique values as determined by one or more given paths within each item

- title: Accessing Data Stored in JSON
  url: https://json-everything.net/json-schema/#a-vocabulary-for-accessing-data-stored-in-json
  type: vocabulary
  summary: A vocabulary defining keywords that can be used to reference values stored in the instance data, the schema data and external JSON data where the dereferenced values serve as input for keywords in a derived subschema

- title: 'Maintaining JSON Schemas at Scale - Jason Desrosiers'
  url: https://www.youtube.com/watch?v=GjJpRsVffg0
  year: 2021
  type: video
  summary: In this talk, we will cover the keywords, concepts, and patterns for maintaining large schemas or large collections of schemas. We'll tackle problems like how to breakdown and organize schemas, how to bundle schemas, how to make large schemas efficient, how to get better error messages from large schemas, and more

- title: 'So you think you understand JSON Schema? - Ben Hutton'
  url: https://www.youtube.com/watch?v=vMG0NCDifI0
  year: 2021
  type: video
  summary: In this session you'll learn some key fundamentals, intracacies that even catch out the experienced, and how to develop your own interoperable JSON Schema Vocabulary

- title: 'JSON Schema In Production - You Can Use It Today - Ben Hutton, Postman'
  url: https://www.youtube.com/watch?v=48QgjmwLWh0
  year: 2022
  type: video
  summary: Hear the about the journey of organizations that use JSON Schema in production today, and learn about how JSON Schema continues to deliver value

- title: "React JSON Schema Form"
  url: https://medium.com/javarevisited/react-json-schema-form-cdc8fbb06f8c
  year: 2022
  type: tutorial
  summary: A tutorial on using the React JSON Schema Form project by Mozilla to generate web forms using JSON Schema

- title: "JSON Schema validation for columns"
  url: https://sqlfordevs.com/json-schema-validation
  year: 2022
  type: tutorial
  summary: A short tutorial on adding MySQL and PostgreSQL table constraints using JSON Schema

- title: Remote
  url: https://remote.com/blog/how-remote-builds-onboarding-for-60-countries
  type: adoption
  summary: Remote uses JSON Schema to perform form generation and data validation in their frontend and backend systems

- title: "Validating POST Data Against JSON Schema"
  url: https://blog.begin.com/posts/2022-06-27-validating-post-data-agaist-json-schema
  year: 2022
  type: tutorial
  summary: A tutorial on validating HTTP request data using JSON Schema using the Architect Functional Web Apps (FWAs) framework

- title: "U.S. Department of Commerce"
  url: https://github.com/usnistgov/OSCAL/tree/main/json
  type: adoption
  summary: The National Institute of Standards and Technology uses JSON Schema Draft 7 to model Open Security Controls Assessment Language (OSCAL) JSON documents

- title: "Zuplo"
  url: https://zuplo.com/json-schema/lp-a
  type: adoption
  summary: The Zuplo API gateway provides JSON Schema validation and supports generating API documentation out of OpenAPI specifications

- title: "Zapier"
  url: https://github.com/zapier/zapier-platform/tree/master/packages/schema
  type: adoption
  summary: Zapier maintains a large set of JSON Schema definitions that define its platform

- title: "Creating a JSON schema"
  url: https://publishing-project.rivendellweb.net/creating-a-json-schema/
  year: 2022
  type: tutorial
  summary: A tutorial on creating JSON Schema 2020-12 definitions for a fictitious interviewing platform

- title: "YAML Data Validation"
  url: https://infrastructureascode.ch/yaml_validation.html
  year: 2022
  type: tutorial
  summary: A tutorial on validating YAML documents using JSON Schema 2020-12

- title: QuickType.io
  url: https://app.quicktype.io
  type: tool
  summary: An online JSON Schema code-generation utility with diverse programming language support

- title: 'JSON Schema - the Good, the Bad and the Ugly'
  url: https://vimeo.com/222489288
  year: 2017
  type: video
  summary: With JSON Schema you are required to define your data and the available tooling to do so is not really great (yet). This presentation provides you with criteria to judge whether JSON Schema could be beneficial for your project or is just too much overhead

- title: "Easy and Quick Form Generation Using JSON Schema in VueJS"
  url: https://www.bacancytechnology.com/blog/form-generation-using-json-schema-in-vuejs
  year: 2022
  type: tutorial
  summary: A tutorial on generating web forms using JSON Schema and VueJS

- title: TypedWebhook.tools
  url: https://typedwebhook.tools
  type: tool
  summary: An online webhook testing tool that is able to generate JSON Schema definitions out of incoming data

- title: "Docs! Docs! Docs!"
  url: https://brandur.org/nanoglyphs/031-api-docs
  year: 2022
  type: article
  summary: An overview of API documentation generation using Hyper Schema and OpenAPI

- title: "Forming new relationships: Contributing to Open source"
  url: https://www.crossref.org/blog/forming-new-relationships-contributing-to-open-source/
  year: 2022
  type: article
  summary: A description of adopting and extending JSON Forms, a JSON Schema based form rendering library, to support VueJS and Vuetify.

- title: "JSON Schema is a constraint system"
  url: https://modern-json-schema.com/json-schema-is-a-constraint-system
  year: 2022
  type: article
  summary: "Or: Why object-oriented programming is a mis-matched mental model for JSON Schema"

- title: "What is \"Modern\" JSON Schema?"
  url: https://modern-json-schema.com/what-is-modern-json-schema
  year: 2022
  type: article
  summary: "How \"modern\" JSON Schema, meaning 2019-09, 2020-12, and later, can solve far more problems than \"classical\" JSON Schema (draft-07 and earlier)"

- title: Validating Streaming JSON Documents with Learned VPAs
  url: https://arxiv.org/abs/2211.08891
  year: 2022
  type: paper
  summary: This paper presents a new streaming algorithm to validate JSON documents against a set of constraints given as a JSON schema. It proves that there always exists a visibly pushdown automaton (VPA) that accepts the same set of JSON documents as a JSON schema

- title: Manfred
  url: https://www.youtube.com/watch?v=KB2DkeQo8d8
  type: adoption
  summary: Manfred uses JSON Schema to define their APIs and their open CV format

- title: Learn JSON Schema
  url: https://www.learnjsonschema.com
  type: official
  summary: Reference documentation for JSON Schema

- title: Understanding JSON Schema compatibility
  url: https://yokota.blog/2021/03/29/understanding-json-schema-compatibility/
  year: 2021
  type: article
  summary: A study of open, closed, and partially-open content models when evolving schemas in a backward, forward, or fully compatible manners

- title: Not Elimination and Witness Generation for JSON Schema
  url: https://arxiv.org/abs/2104.14828
  year: 2021
  type: paper
  summary: "In this paper, we present an algebraic characterization of JSON Schema, obtained by adding opportune operators, and by mirroring existing ones. We present then algebra-based approaches for dealing with not-elimination and witness generation problems, which play a central role as they lead to solutions for the other mentioned complex problems."

- title: National Cancer Institute
  url: https://github.com/NCI-GDC/gdcdictionary/tree/develop/gdcdictionary/schemas
  type: adoption
  summary: The National Cancer Institute uses JSON Schema to model entities for their Genomic Data Commons collection

- title: 'JSONoid: Distributed JSON Schema Discovery'
  url: https://github.com/dataunitylab/jsonoid-discovery
  year: 2023
  type: paper
  summary: A tool for distributed JSON schema discovery including many properties of the data.

- title: Enhancing JSON Schema Discovery by Uncovering Hidden Data
  url: https://ceur-ws.org/Vol-2971/paper11.pdf
  year: 2021
  type: paper
  summary: Enhancing discovered JSON Schemas by disambiguating data and metadata.

- title: 'JSONoid: Monoid-based Enrichment for Configurable and Scalable Data-Driven Schema Discovery'
  url: https://arxiv.org/abs/2307.03113
  year: 2023
  type: paper
  summary: Meaningful schema information for semi-structured data.

- title: Comprehending Semantic Types in JSON Data with Graph Neural Networks
  url: https://arxiv.org/abs/2307.12807
  year: 2023
  type: paper
  summary: Graph neural networks for semantic type detection in JSON.

- title: Fast Discovery of Nested Dependencies on JSON Data
  url: https://arxiv.org/abs/2111.10398
  year: 2021
  type: paper
  summary: Efficient dependency mining algorithms for non-relational data.

- title: LLMs for Schema Augmentation
  url: https://michael.mior.ca/blog/llms-for-schema-augmentation/
  year: 2023
  type: article
  summary: Large language models can be exploited to automatically augment JSON Schemas with useful information.