source: Dev/trunk/src/server/config/couchdb-schema.json @ 525

Last change on this file since 525 was 525, checked in by hendrikvanantwerpen, 11 years ago
  • Allow empty subcodes.
  • Use HTTPResult exclusively on server (no more q).
  • Set readonly & disabled on ourselves as well in _ComplexValueMixin
  • Split server into several modules.
  • Check codes on the variable level, not question level.
  • We can add modules in design documents now.
File size: 9.9 KB
Line 
1{
2  "$schema": "http://json-schema.org/draft-04/schema#",
3  "title": "QED Object Schema",
4  "version": "4",
5  "type": "object",
6  "oneOf": [
7    { "$ref": "#/definitions/schemaInfo" },
8    { "$ref": "#/definitions/docs/any" }
9  ],
10  "definitions": {
11    "nonEmptyString": { "type": "string", "minLength": 1 },
12    "codeString": { "type": "string", "pattern": "^[A-Za-z0-9]+$" },
13    "subcodeString": { "type": "string", "pattern": "^[A-Za-z0-9]*$" },
14    "schemaInfo": {
15      "type": "object",
16      "properties": {
17          "_id": { "type": "string", "pattern": "^schemaInfo$" },
18          "_rev": { "$ref": "#/definitions/nonEmptyString" },
19          "version": { "$ref": "#/definitions/nonEmptyString" },
20          "viewsVersion": { "$ref": "#/definitions/nonEmptyString" }
21      },
22      "required": ["_id","version"],
23      "additionalProperties": false
24    },
25    "docs": {
26      "any": {
27        "type": "object",
28        "oneOf":[
29          { "$ref": "#/definitions/docs/Question" },
30          { "$ref": "#/definitions/docs/Survey" },
31          { "$ref": "#/definitions/docs/SurveyRun" },
32          { "$ref": "#/definitions/docs/Response" }
33        ]
34      },
35      "Question": {
36        "type": "object",
37        "properties": {
38          "type": { "type": "string", "pattern": "^Question$" },
39          "_id": { "$ref": "#/definitions/nonEmptyString" },
40          "_rev": { "$ref": "#/definitions/nonEmptyString" },
41          "categories": { "type": "array", "items": { "$ref": "#/definitions/nonEmptyString" } },
42          "code": { "$ref": "#/definitions/codeString" },
43          "content": { "type": "array", "items": { "$ref": "#/definitions/content/any" } },
44          "description": { "$ref": "#/definitions/nonEmptyString" },
45          "publicationDate": { "type": "string", "format": "datetime" },
46          "title": { "$ref": "#/definitions/nonEmptyString" },
47          "topic": { "$ref": "#/definitions/nonEmptyString" }
48        },
49        "required": ["type","categories","code","content","title"],
50        "additionalProperties": false
51      },
52      "Survey": {
53        "type": "object",
54        "properties": {
55          "type": { "type": "string", "pattern": "^Survey$" },
56          "_id": { "$ref": "#/definitions/nonEmptyString" },
57          "_rev": { "$ref": "#/definitions/nonEmptyString" },
58          "description": { "$ref": "#/definitions/nonEmptyString" },
59          "publicationDate": { "type": "string", "format": "datetime" },
60          "questions": { "type": "array", "items": { "$ref": "#/definitions/docs/Question" } },
61          "title": { "$ref": "#/definitions/nonEmptyString" }
62        },
63        "required": ["type","questions","title"],
64        "additionalProperties": false
65      },
66      "SurveyRun": {
67        "type": "object",
68        "properties": {
69          "type": { "type": "string", "pattern": "^SurveyRun$" },
70          "_id": { "$ref": "#/definitions/nonEmptyString" },
71          "_rev": { "$ref": "#/definitions/nonEmptyString" },
72          "description": { "$ref": "#/definitions/nonEmptyString" },
73          "endDate": { "type": "string", "format": "datetime" },
74          "liveName": { "$ref": "#/definitions/nonEmptyString" },
75          "mode": { "type": "string", "enum": [ "open", "closed" ] },
76          "respondentCanDeleteOwnResponse": { "type": "boolean" },
77          "secret": { "$ref": "#/definitions/nonEmptyString" },
78          "startDate": { "type": "string", "format": "datetime" },
79          "survey": { "$ref": "#/definitions/docs/Survey" },
80          "title": { "$ref": "#/definitions/nonEmptyString" }
81        },
82        "required": ["type","mode","secret","survey","title"],
83        "additionalProperties": false
84      },
85      "Response": {
86        "type": "object",
87        "properties": {
88          "type": { "type": "string", "pattern": "^Response$" },
89          "_id": { "$ref": "#/definitions/nonEmptyString" },
90          "_rev": { "$ref": "#/definitions/nonEmptyString" },
91          "answers": {
92              "type": "object",
93              "patternProperties": {
94                  "^[A-Za-z0-9]+$": { "type": ["string","number"] }
95              },
96              "additionalProperties": false
97          },
98          "email": { "type": "string", "format": "email" },
99          "publicationDate": { "type": "string", "format": "datetime" },
100          "secret": { "$ref": "#/definitions/nonEmptyString" },
101          "surveyRunId": { "$ref": "#/definitions/nonEmptyString" }
102        },
103        "required": ["type","answers","secret","surveyRunId"],
104        "additionalProperties": false
105      }
106    },
107    "content": {
108      "any": {
109        "type": "object",
110        "oneOf": [
111          { "$ref": "#/definitions/content/Header" },
112          { "$ref": "#/definitions/content/Text" },
113          { "$ref": "#/definitions/content/Divider" },
114          { "$ref": "#/definitions/content/StringInput" },
115          { "$ref": "#/definitions/content/TextInput" },
116          { "$ref": "#/definitions/content/NumberInput" },
117          { "$ref": "#/definitions/content/ScaleInput" },
118          { "$ref": "#/definitions/content/SingleChoiceInput" },
119          { "$ref": "#/definitions/content/MultipleChoiceInput" }
120        ]
121      },
122      "Header": {
123        "type": "object",
124        "properties": {
125          "type": { "type": "string", "pattern": "^Header$" },
126          "text": { "$ref": "#/definitions/nonEmptyString" }
127        },
128        "required": ["type","text"],
129        "additionalProperties": false
130      },
131      "Text": {
132        "type": "object",
133        "properties": {
134          "type": { "type": "string", "pattern": "^Text$" },
135          "text": { "$ref": "#/definitions/nonEmptyString" }
136        },
137        "required": ["type","text"],
138        "additionalProperties": false
139      },
140      "Divider": {
141        "type": "object",
142        "properties": {
143          "type": { "type": "string", "pattern": "^Divider$" }
144        },
145        "additionalProperties": false
146      },
147      "StringInput": {
148        "type": "object",
149        "properties": {
150          "type": { "type": "string", "pattern": "^StringInput$" },
151          "subcode": { "$ref": "#/definitions/subcodeString" },
152          "text": { "$ref": "#/definitions/nonEmptyString" }
153        },
154        "required":["type","subcode"],
155        "additionalProperties": false
156      },
157      "TextInput": {
158        "type": "object",
159        "properties": {
160          "type": { "type": "string", "pattern": "^TextInput$" },
161          "maxLength": { "type": "integer" },
162          "subcode": { "$ref": "#/definitions/subcodeString" },
163          "text": { "$ref": "#/definitions/nonEmptyString" }
164        },
165        "required":["type","subcode"],
166        "additionalProperties": false
167      },
168      "NumberInput": {
169        "type": "object",
170        "properties": {
171          "type": { "type": "string", "pattern": "^NumberInput$" },
172          "min": { "type": "integer" },
173          "max": { "type": "integer" },
174          "places": { "type": "integer" },
175          "subcode": { "$ref": "#/definitions/subcodeString" },
176          "text": { "$ref": "#/definitions/nonEmptyString" }
177        },
178        "required":["type","subcode"],
179        "additionalProperties": false
180      },
181      "ScaleInput": {
182        "type": "object",
183        "properties": {
184          "type": { "type": "string", "pattern": "^ScaleInput$" },
185          "minLabel": { "$ref": "#/definitions/nonEmptyString" },
186          "min": { "type": "integer" },
187          "max": { "type": "integer" },
188          "maxLabel": { "$ref": "#/definitions/nonEmptyString" },
189          "naLabel": { "$ref": "#/definitions/nonEmptyString" },
190          "items": { "type": "array", "items": {
191            "type": "object",
192            "properties": {
193              "minLabel": { "$ref": "#/definitions/nonEmptyString" },
194              "maxLabel": { "$ref": "#/definitions/nonEmptyString" },
195              "subcode": { "$ref": "#/definitions/subcodeString" },
196              "text": { "$ref": "#/definitions/nonEmptyString" }
197            },
198            "required":["subcode","text"],
199            "additionalProperties": false
200          } }
201        },
202        "required":["type","min","max","items"],
203        "additionalProperties": false
204      },
205      "SingleChoiceInput": {
206        "type": "object",
207        "properties": {
208          "type": { "type": "string", "pattern": "^SingleChoiceInput$" },
209          "items": { "type": "array", "items": {
210              "type": "object",
211              "properties": {
212                  "text": { "$ref": "#/definitions/nonEmptyString" },
213                  "value": { "$ref": "#/definitions/nonEmptyString" }
214              },
215              "required": ["text","value"],
216              "additionalProperties": false
217          } },
218          "lastItemIsOpen": {
219              "type": "object",
220              "properties": {
221                  "subcode": { "$ref": "#/definitions/subcodeString" }
222              },
223              "required": ["subcode"],
224              "additionalProperties": false
225          },
226          "subcode": { "$ref": "#/definitions/subcodeString" }
227        },
228        "required":["type","items","subcode"],
229        "additionalProperties": false
230      },
231      "MultipleChoiceInput": {
232        "type": "object",
233        "properties": {
234          "type": { "type": "string", "pattern": "^MultipleChoiceInput$" },
235          "items": { "type": "array", "items": {
236              "type": "object",
237              "properties": {
238                "subcode": { "$ref": "#/definitions/subcodeString" },
239                "text": { "$ref": "#/definitions/nonEmptyString" }
240              },
241              "required": ["subcode","text"],
242              "additionalProperties": false
243          } },
244          "lastItemIsOpen": {
245              "type": "object",
246              "properties": {
247                "subcode": { "$ref": "#/definitions/subcodeString" }
248              },
249              "required": ["subcode"],
250              "additionalProperties": false
251          }
252        },
253        "required":["type","items"],
254        "additionalProperties": false
255      }
256    }
257  }
258}
Note: See TracBrowser for help on using the repository browser.