11

I've a json schema like this:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "title": "Operation",
  "description": "The schema of an operation",
  "type": "object",
  "properties": {
    "id":{
      "description": "Unique identifier of the service",
      "type": "string"
    },
    "description":{
      "type": "string"
    },
    "dateDebut":{
      "type": "string",
      "format": "date-time"
    },
    "dateFin":{
      "type": "string",
      "format": "date-time"
    }
  }
}

How can I say in my schema that the dateFin must be greater than the dateDebut ?

slavoo
  • 5,798
  • 64
  • 37
  • 39
Djiby Thiaw
  • 213
  • 4
  • 11

2 Answers2

19

This library supports it https://github.com/epoberezkin/ajv#features

var ajv = Ajv({v5:true,allErrors: true})

{
    "startDate": {
        "format": "date",
        "message": "Please Enter correct date format YYYY-MM-DD"
    },
    "endDate": {
        "format": "date",
        "message": "Please Enter correct date format YYYY-MM-DD",
        "formatMinimum": {
            "$data": "1/startDate"
        }
    }
}
mickdekkers
  • 640
  • 2
  • 11
  • 16
Bolarinwa
  • 191
  • 1
  • 4
10

You can't do that on the JSON-Schema level. You'd have to validate that separately for your Operation objects. In general, JSON-Schema only provides a kind of "well-formed-ness" sanity checks: about a property being a number, date, or a string matching a regexp; or about an object having certain nested structure of properties. More advanced business rules like the one from your example should be controlled elsewhere.

Ivan Krechetov
  • 18,802
  • 8
  • 49
  • 60