1{
2    "$schema": "http://json-schema.org/draft-04/schema#",
3    "id": "4.2.-selectorFound.json",
4    "assertionType": "may",
5    "expectedResult": "valid",
6    "onUnexpectedResult" : "passAndContinue",
7    "errorMessage": "The description of a Specific Resource may include a Selector .",
8    "title": "Implements **Specific Resource Selector** - [model 4.2](https://www.w3.org/TR/annotation-model/#selectors)",
9    "description": "True when Annotation includes one or more Specific Resources, one or more of which includes a Selector. (Section 4.2)",
10    "type": "object",
11    "anyOf":
12     [
13      { "properties":
14         { "body":
15            { "oneOf":
16               [
17                 { "type": "object",
18                   "oneOf":
19                    [
20                      { "$ref": "#/definitions/selectorSchema" },
21                      { "$ref": "#/definitions/itemSchema" }
22                    ]
23                 },
24                 { "type": "array",
25                   "minItems": 1,
26                   "not":
27                    { "items":
28                       { "not":
29                          { "oneOf":
30                             [
31                               { "$ref": "#/definitions/selectorSchema" },
32                               { "$ref": "#/definitions/itemSchema" }
33                             ]
34                          }
35                       }
36                    }
37                 }
38               ]
39            }
40         },
41         "required": [ "body" ]
42      },
43      { "properties":
44         { "target":
45            { "oneOf":
46               [
47                 { "type": "object",
48                   "oneOf":
49                    [
50                      { "$ref": "#/definitions/selectorSchema" },
51                      { "$ref": "#/definitions/itemSchema" }
52                    ]
53                 },
54                 { "type": "array",
55                   "minItems": 1,
56                   "not":
57                    { "items":
58                        { "not":
59                           { "oneOf":
60                              [
61                                { "$ref": "#/definitions/selectorSchema" },
62                                { "$ref": "#/definitions/itemSchema" }
63                              ]
64                           }
65                        }
66                    }
67                 }
68               ]
69            }
70         },
71     "required": [ "target" ]
72       }
73     ],
74     "definitions":
75      {
76        "selectorSchema":
77         { "type": "object",
78           "properties":
79            { "selector":
80               { "oneOf":
81                  [
82                    { "type": "object",
83                      "$ref": "specificResource.json#/definitions/selectorDetected"
84                    },
85                    { "type": "array",
86                      "minItems": 1,
87                      "not":
88                       { "items":
89                          { "not": { "$ref": "specificResource.json#/definitions/selectorDetected" } }
90                       }
91                    }
92                  ]
93               }
94            },
95            "required": [ "selector" ]
96         },
97
98        "itemSchema":
99         { "type": "object",
100           "properties":
101            { "items":
102               { "type": "array",
103                 "minItems": 1,
104                 "not":
105                  { "items":
106                      { "not": { "$ref": "#/definitions/selectorSchema" } }
107                  }
108               }
109            },
110            "required": [ "items" ]
111         }
112      }
113}