json_schema: {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "title": "North America address",
      "description": "Postal addresses for Canada, USA and Mexico",
      "type": "object",
      "properties": {
          "address": {
              "type": "object",
              "properties": {
                  "name": {
                      "type": "string"
                  },
                  "number": {
                      "type": "string"
                  },
                  "street": {
                      "type": "string"
                  },
                  "street2": {
                      "type": "string"
                  },
                  "city": {
                      "type": "string"
                  },
                  "national": {
                      "oneOf": [
                          {
                              "properties": {
                                  "country": {
                                      "type": "string",
                                      "enum": [
                                          "CAN"
                                      ]
                                  },
                                  "province": {
                                      "$ref": "#/definitions/CAN_province"
                                  },
                                  "postalCode": {
                                      "$ref": "#/definitions/CAN_postalCode"
                                  }
                              },
                              "additionalProperties": false,
                              "required": [
                                  "country",
                                  "province",
                                  "postalCode"
                              ]
                          },
                          {
                              "properties": {
                                  "country": {
                                      "type": "string",
                                      "enum": [
                                          "USA"
                                      ]
                                  },
                                  "state": {
                                      "$ref": "#/definitions/USA_state"
                                  },
                                  "zipCode": {
                                      "$ref": "#/definitions/USA_zipCode"
                                  }
                              },
                              "additionalProperties": false,
                              "required": [
                                  "country",
                                  "state",
                                  "zipCode"
                              ]
                          },
                          {
                              "properties": {
                                  "country": {
                                      "type": "string",
                                      "enum": [
                                          "MEX"
                                      ]
                                  },
                                  "state": {
                                      "$ref": "#/definitions/MEX_state"
                                  },
                                  "postalCode": {
                                      "$ref": "#/definitions/MEX_postalCode"
                                  }
                              },
                              "additionalProperties": false,
                              "required": [
                                  "country",
                                  "state",
                                  "postalCode"
                              ]
                          }
                      ]
                  }
              },
              "additionalProperties": false,
              "required": [
                  "name",
                  "number",
                  "street",
                  "city",
                  "national"
              ]
          }
      },
      "definitions": {
          "CAN_province": {
              "type": "string",
              "enum": [
                  "AB",
                  "BC",
                  "MB",
                  "NB",
                  "NL",
                  "NS",
                  "NT",
                  "NU",
                  "ON",
                  "PE",
                  "QC",
                  "SK",
                  "YT"
              ]
          },
          "CAN_postalCode": {
              "type": "string",
              "pattern": "^[A-Z][0-9][A-Z]( )?[0-9][A-Z][0-9]$"
          },
          "USA_state": {
              "type": "string",
              "enum": [
                  "AL",
                  "AK",
                  "AR",
                  "AS",
                  "AZ",
                  "CA",
                  "CO",
                  "CT",
                  "DC",
                  "DE",
                  "FL",
                  "FM",
                  "GA",
                  "GU",
                  "HI",
                  "IA",
                  "ID",
                  "IL",
                  "IN",
                  "KS",
                  "KY",
                  "LA",
                  "MA",
                  "MD",
                  "ME",
                  "MH",
                  "MI",
                  "MN",
                  "MO",
                  "MP",
                  "MS",
                  "MT",
                  "NC",
                  "ND",
                  "NE",
                  "NH",
                  "NJ",
                  "NM",
                  "NV",
                  "OH",
                  "OK",
                  "OR",
                  "PA",
                  "PR",
                  "PW",
                  "RI",
                  "SC",
                  "SD",
                  "TN",
                  "TX",
                  "UT",
                  "VA",
                  "VI",
                  "VT",
                  "WA",
                  "WI",
                  "WV",
                  "WY",
                  "AA",
                  "AE",
                  "AP"
              ]
          },
          "USA_zipCode": {
              "type": "string",
              "pattern": "^[0-9]{5}(-[0-9]{4})?$"
          },
          "MEX_state": {
              "type": "string",
              "enum": [
                  "AGS",
                  "BC",
                  "BCS",
                  "CAM",
                  "COAH",
                  "COL",
                  "CHIH",
                  "CHIS",
                  "DF",
                  "DGO",
                  "GTO",
                  "GRO",
                  "HGO",
                  "JAL",
                  "MEX",
                  "MICH",
                  "MOR",
                  "NAY",
                  "NL",
                  "OAX",
                  "PUE",
                  "QRO",
                  "Q ROO",
                  "SLP",
                  "SIN",
                  "SON",
                  "TAB",
                  "TAMPS",
                  "TLAX",
                  "VER",
                  "YUC",
                  "ZAC"
              ]
          },
          "MEX_postalCode": {
              "type": "string",
              "pattern": "^[0-9]{5}$"
          }
      }
  }