{"size": 2236, "ext": "scrbl", "max_stars_repo_path": "scribblings/technical.scrbl", "max_stars_repo_name": "yurkobb/argo", "max_stars_repo_stars_event_min_datetime": "2017-08-26T13:27:14.000Z", "max_stars_repo_stars_event_max_datetime": "2021-11-26T10:50:00.000Z", "max_issues_repo_path": "scribblings/technical.scrbl", "max_issues_repo_name": "yurkobb/argo", "max_issues_repo_issues_event_min_datetime": "2017-08-29T22:14:30.000Z", "max_issues_repo_issues_event_max_datetime": "2021-05-14T03:54:28.000Z", "max_forks_repo_path": "scribblings/technical.scrbl", "max_forks_repo_name": "yurkobb/argo", "max_forks_repo_forks_event_min_datetime": "2017-08-30T14:38:55.000Z", "max_forks_repo_forks_event_max_datetime": "2021-05-03T19:31:29.000Z"}
{"max_stars_count": 11, "max_issues_count": 7, "max_forks_count": 3, "avg_line_length": 77.1034482759, "max_line_length": 890, "alphanum_fraction": 0.7330053667}
#lang scribble/manual

@require[@for-label[racket/base
		    json]]

@title{Technical information}

@section{Semantic validation}

Argo supports all the semantic validation keywords:

@itemlist[
  @item{@tt{date-time} (@hyperlink[#:underline? #f "https://tools.ietf.org/html/rfc3339"]{RFC 3399})}
  @item{@tt{email} (@hyperlink[#:underline? #f "http://tools.ietf.org/html/rfc5322"]{RFC 5322})}
  @item{@tt{hostname} (@hyperlink[#:underline? #f "https://tools.ietf.org/html/rfc1034"]{RFC 1034})}
  @item{@tt{ipv4} (@hyperlink[#:underline? #f "https://tools.ietf.org/html/rfc2673"]{RFC 2673})}
  @item{@tt{ipv6} (@hyperlink[#:underline? #f "https://tools.ietf.org/html/rfc2373"]{RFC 2373})}
  @item{@tt{uri} (@hyperlink[#:underline? #f "https://tools.ietf.org/html/rfc3986"]{RFC 3986})}
  @item{@tt{uri-reference} (@hyperlink[#:underline? #f "https://tools.ietf.org/html/rfc3986"]{ditto})}
  @item{@tt{uri-template} (@hyperlink[#:underline? #f "https://tools.ietf.org/html/rfc6570"]{RFC 6570}), and}
  @item{@tt{json-pointer} (@hyperlink[#:underline? #f "https://tools.ietf.org/html/rfc6901"]{RFC 6901})}
]

@section{JSON Schema versions}

JSON Schema is a moving target. Thankfully, the target moves slowly. But it @italic{does} move. What does that mean for you? To put it bluntly: a JSON document that's valid today may not be valid tomorrow.

Argo implements JSON Schema version 6 (codename ``draft-wright-json-schema-validation-01''). The official homepage for specification that Argo follows is @hyperlink[#:underline? #f "http://json-schema.org/latest/json-schema-validation.html"]{here}. That version was released on April 21, 2017.  If you've been working with JSON Schema for a few years, chances are good that you've worked with version 4. The two versions are largely the same, but there are some minor differences. Unfortunately, what counts as a ``minor difference'' is in the eyes of the beholder. While testing Argo I found several schemas on the web, written in the heyday of version 4---including some on the JSON Schema homepage---that no longer produced the expected results when interpreted as version 6 schemas. They had to be updated. It may very well be possible that you'll need to update your JSON Schemas, too.
