{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "id": "4.2.-selectorFound.json",
    "assertionType": "may",
    "expectedResult": "valid",
    "onUnexpectedResult" : "passAndContinue",
    "errorMessage": "The description of a Specific Resource may include a Selector .",
    "title": "Implements **Specific Resource Selector** - [model 4.2](https://www.w3.org/TR/annotation-model/#selectors)",
    "description": "True when Annotation includes one or more Specific Resources, one or more of which includes a Selector. (Section 4.2)",
    "type": "object",
    "anyOf":
     [
      { "properties":
         { "body":
            { "oneOf":
               [
                 { "type": "object",
                   "oneOf":
                    [
                      { "$ref": "#/definitions/selectorSchema" },
                      { "$ref": "#/definitions/itemSchema" }
                    ]
                 },
                 { "type": "array",
                   "minItems": 1,
                   "not":
                    { "items":
                       { "not":
                          { "oneOf":
                             [
                               { "$ref": "#/definitions/selectorSchema" },
                               { "$ref": "#/definitions/itemSchema" }
                             ]
                          }
                       }
                    }
                 }
               ]
            }
         },
         "required": [ "body" ]
      },
      { "properties":
         { "target":
            { "oneOf":
               [
                 { "type": "object",
                   "oneOf":
                    [
                      { "$ref": "#/definitions/selectorSchema" },
                      { "$ref": "#/definitions/itemSchema" }
                    ]
                 },
                 { "type": "array",
                   "minItems": 1,
                   "not":
                    { "items":
                        { "not":
                           { "oneOf":
                              [
                                { "$ref": "#/definitions/selectorSchema" },
                                { "$ref": "#/definitions/itemSchema" }
                              ]
                           }
                        }
                    }
                 }
               ]
            }
         },
     "required": [ "target" ]
       }
     ],
     "definitions":
      {
        "selectorSchema":
         { "type": "object",
           "properties":
            { "selector":
               { "oneOf":
                  [
                    { "type": "object",
                      "$ref": "specificResource.json#/definitions/selectorDetected"
                    },
                    { "type": "array",
                      "minItems": 1,
                      "not":
                       { "items":
                          { "not": { "$ref": "specificResource.json#/definitions/selectorDetected" } }
                       }
                    }
                  ]
               }
            },
            "required": [ "selector" ]
         },

        "itemSchema":
         { "type": "object",
           "properties":
            { "items":
               { "type": "array",
                 "minItems": 1,
                 "not":
                  { "items":
                      { "not": { "$ref": "#/definitions/selectorSchema" } }
                  }
               }
            },
            "required": [ "items" ]
         }
      }
}