├── .gitignore ├── .npmignore ├── 1.0.1 ├── README.md ├── about.json ├── account.json ├── activity.json ├── activity_definition.json ├── activity_list_or_obj.json ├── activityid.json ├── agent.json ├── anonymousgroup.json ├── attachment.json ├── context.json ├── contextactivities.json ├── extensions.json ├── formats │ ├── README.md │ └── formats.json ├── group.json ├── group_base.json ├── identifiedgroup.json ├── interactionactivity.json ├── interactionactivity_base.json ├── interactionactivity_choices.json ├── interactionactivity_none.json ├── interactionactivity_scale.json ├── interactionactivity_sourcetarget.json ├── interactionactivity_steps.json ├── interactioncomponent.json ├── interactioncomponent_list.json ├── inversefunctional.json ├── languagemap.json ├── mbox.json ├── mbox_sha1sum.json ├── openid.json ├── person.json ├── result.json ├── score.json ├── statement.json ├── statement_base.json ├── statement_list.json ├── statement_object.json ├── statementref.json ├── statementresult.json ├── substatement.json └── verb.json ├── LICENSE ├── NOTICE ├── README.md ├── npm └── prepublish.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | formats.json 3 | 1.0.1.json 4 | *.tgz 5 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | 1.0.1 2 | npm 3 | -------------------------------------------------------------------------------- /1.0.1/README.md: -------------------------------------------------------------------------------- 1 | Schema for Tin Can API v1.0.1 (`tcapi:1.0.1`) 2 | ============================================= 3 | A JSON schema for the 4 | [xAPI 1.0.1](https://github.com/adlnet/xAPI-Spec/blob/master/xAPI.md) (Tin Can 5 | API) standard. It is being tested using 6 | https://github.com/RusticiSoftware/TinCanValidator. 7 | 8 | 9 | Files 10 | ----- 11 | Many of the files here are not complete objects, but are used as overlaid rules 12 | on other objects. Such overlay objects are generally not useful to test against. 13 | 14 | The *non-*overlay objects most useful for testing are 15 | 16 | * `about`\* 17 | * `account!core` 18 | * `activity` 19 | * `activity_definition` 20 | * `activityid!core`\*\* 21 | * `activity_list_or_obj` 22 | * `agent` 23 | * `anonymousgroup` 24 | * `attachment` 25 | * `context` 26 | * `contextactivities` 27 | * `extensions`\* 28 | * `group` 29 | * `identifiedgroup` 30 | * `interactioncomponent` 31 | * `interactioncomponent_list` 32 | * `languagemap`\* 33 | * `mbox!core`\*\* 34 | * `mbox_sha1sum!core`\*\* 35 | * `openid!core`\*\* 36 | * `person`\* (AKA Agent Profile) 37 | * `result` 38 | * `score` 39 | * `statement`\* 40 | * `statement_object` 41 | * `statementref` 42 | * `statementresult` 43 | * `substatement` 44 | * `verb` 45 | 46 | \* Probably important 47 |
48 | \*\* Formatted string, not an object 49 | 50 | The overlay objects are listed here. If they contain non-overlay objects, these 51 | are listed in parenthesis. 52 | 53 | * `account` (`account!core`) 54 | * `activity_definition` 55 | * `activityid` (`activityid!core`) 56 | * `group_base` 57 | * `interactionactivity` 58 | * `interactionactivity_base` 59 | * `interactionactivity_choices` 60 | * `interactionactivity_none` 61 | * `interactionactivity_scale` 62 | * `interactionactivity_sourcetarget` 63 | * `interactionactivity_steps` 64 | * `inversefunctional` 65 | * `mbox` (`mbox!core`) 66 | * `mbox_sha1sum` (`mbox_sha1sum!core`) 67 | * `openid` (`openid!core`) 68 | * `statement_base` 69 | 70 | Naming conventions 71 | ------------------ 72 | 73 | ### File names 74 | The following rules were applied to name the files. Exactly one of these was 75 | used, preferring rules higher in the list. All uppercase letters are converted 76 | to lowercase in the file name. 77 | 78 | 1. If it is the sole object with an "objectType" property of value `type`: 79 | 80 | type ".json" 81 | 82 | 2. If it is one of many objects with an "objectType" property of value `type`, 83 | and is named in the xAPI spec as `subtype` `type`: 84 | 85 | subtype type ".json" 86 | 87 | 3. If the xAPI spec devotes a numbered section to an object `object`: 88 | 89 | object ".json" 90 | 91 | 4. If it is an array containing `itemtype` objects: 92 | 93 | itemtype "_list.json" 94 | 95 | 5. If it may be either an array of `itemtype` objects or a single `itemtype`: 96 | 97 | itemtype "_list_or_obj.json" 98 | 99 | 6. If it is a base object that is extended by other objects defined by the xAPI 100 | spec, belonging to `category`: 101 | 102 | category "_base.json" 103 | 104 | 7. If the xAPI spec defines an object `child` as a child of only one other 105 | object `parent`: 106 | 107 | parent "_" child ".json" 108 | 109 | 8. If it is an object containing only one property `prop`: 110 | 111 | prop ".json" 112 | 113 | 114 | ### JSON Schema ids 115 | The top level object in a file named `name ".json"` is given a schema id of 116 | 117 | "#" name 118 | 119 | If the top level object in `name ".json"` contains only one property, this one 120 | property is often useful on its own. In such cases, the property is given a 121 | JSON Schema id of its own, for outside reference by other schema files: 122 | 123 | "#" name "!core" 124 | 125 | 126 | TODO 127 | ---- 128 | * Verification of SCORM data model elements (SCORM 2004:4.1.1) in interaction 129 | activities' `correctResponsePattern`s, eg. `1[.]a[,]2[.]c[,]3[.]b`, 130 | `{lang=de}Hallo, Welt!` 131 | -------------------------------------------------------------------------------- /1.0.1/about.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#about", 4 | "type": "object", 5 | "required": ["version"], 6 | "additionalProperties": false, 7 | "properties": { 8 | "version": { 9 | "type": "string", 10 | "format": "version" 11 | }, 12 | "extensions": {"$ref": "#extensions"} 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /1.0.1/account.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#account", 4 | "type": "object", 5 | "required": ["account"], 6 | "properties": { 7 | "account": { 8 | "id": "#account!core", 9 | "type": "object", 10 | "additionalProperties": false, 11 | "required": [ 12 | "homePage", 13 | "name" 14 | ], 15 | "properties": { 16 | "homePage": { 17 | "type": "string", 18 | "format": "iri" 19 | }, 20 | "name": {"type": "string"} 21 | } 22 | }, 23 | "mbox": {"type": "null"}, 24 | "mbox_sha1sum": {"type": "null"}, 25 | "openid": {"type": "null"} 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /1.0.1/activity.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#activity", 4 | "type": "object", 5 | "required": ["id"], 6 | "additionalProperties": false, 7 | "properties": { 8 | "objectType": {"enum": ["Activity"]}, 9 | "id": {"$ref": "#activityid!core"}, 10 | "definition": {"$ref": "#activity_definition"} 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /1.0.1/activity_definition.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#activity_definition", 4 | "type": "object", 5 | "oneOf": [ 6 | { 7 | "properties": { 8 | "interactionType": {"type": "null"}, 9 | "correctResponsesPattern": {"type": "null"}, 10 | "choices": {"type": "null"}, 11 | "scale": {"type": "null"}, 12 | "source": {"type": "null"}, 13 | "target": {"type": "null"}, 14 | "steps": {"type": "null"} 15 | } 16 | }, 17 | {"$ref": "#interactionactivity"} 18 | ], 19 | "additionalProperties": false, 20 | "properties": { 21 | "name": {"$ref": "#languagemap"}, 22 | "description": {"$ref": "#languagemap"}, 23 | "type": { 24 | "type": "string", 25 | "format": "iri" 26 | }, 27 | "moreInfo": { 28 | "type": "string", 29 | "format": "iri" 30 | }, 31 | "interactionType": {}, 32 | "correctResponsesPattern": {}, 33 | "choices": {}, 34 | "scale": {}, 35 | "source": {}, 36 | "target": {}, 37 | "steps": {}, 38 | "extensions": {"$ref": "#extensions"} 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /1.0.1/activity_list_or_obj.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#activity_list_or_obj", 4 | "oneOf": [ 5 | { 6 | "type": "array", 7 | "items": {"$ref": "#activity"} 8 | }, 9 | {"$ref": "#activity"} 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /1.0.1/activityid.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#activityid", 4 | "type": "object", 5 | "required": ["activityId"], 6 | "properties": { 7 | "activityId": { 8 | "id": "#activityid!core", 9 | "type": "string", 10 | "format": "iri" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /1.0.1/agent.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#agent", 4 | "allOf": [{"$ref": "#inversefunctional"}], 5 | "properties": { 6 | "name": {"type": "string"}, 7 | "objectType": {"enum": ["Agent"]}, 8 | "mbox": {}, 9 | "mbox_sha1sum": {}, 10 | "account": {}, 11 | "openid": {} 12 | }, 13 | "additionalProperties": false 14 | } 15 | -------------------------------------------------------------------------------- /1.0.1/anonymousgroup.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#anonymousgroup", 4 | "allOf": [{"$ref": "#group_base"}], 5 | "required": ["member"], 6 | "properties": { 7 | "member": {}, 8 | "name": {}, 9 | "objectType": {} 10 | }, 11 | "additionalProperties": false 12 | } 13 | -------------------------------------------------------------------------------- /1.0.1/attachment.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#attachment", 4 | "type": "object", 5 | "additionalProperties": false, 6 | "required": [ 7 | "usageType", 8 | "display", 9 | "contentType", 10 | "length", 11 | "sha2" 12 | ], 13 | "properties": { 14 | "usageType": { 15 | "type": "string", 16 | "format": "iri" 17 | }, 18 | "display": {"$ref": "#languagemap"}, 19 | "description": {"$ref": "#languagemap"}, 20 | "contentType": { 21 | "type": "string", 22 | "format": "mimetype" 23 | }, 24 | "length": { 25 | "type": "number", 26 | "minimum": 0 27 | }, 28 | "sha2": { 29 | "type": "string", 30 | "format": "sha2" 31 | }, 32 | "fileUrl": { 33 | "type": "string", 34 | "format": "iri" 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /1.0.1/context.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#context", 4 | "type": "object", 5 | "additionalProperties": false, 6 | "properties": { 7 | "registration": { 8 | "type": "string", 9 | "format": "uuid" 10 | }, 11 | "instructor": { 12 | "oneOf": [ 13 | {"$ref": "#agent"}, 14 | {"$ref": "#group"} 15 | ] 16 | }, 17 | "team": { 18 | "allOf": [{"$ref": "#group"}] 19 | }, 20 | "contextActivities": {"$ref": "#contextactivities"}, 21 | "revision": {"type": "string"}, 22 | "platform": {"type": "string"}, 23 | "language": { 24 | "type": "string", 25 | "format": "langtag" 26 | }, 27 | "statement": {"$ref": "#statementref"}, 28 | "extensions": {"$ref": "#extensions"} 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /1.0.1/contextactivities.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#contextactivities", 4 | "type": "object", 5 | "additionalProperties": false, 6 | "properties": { 7 | "parent": {"$ref": "#activity_list_or_obj"}, 8 | "grouping": {"$ref": "#activity_list_or_obj"}, 9 | "category": {"$ref": "#activity_list_or_obj"}, 10 | "other": {"$ref": "#activity_list_or_obj"} 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /1.0.1/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#extensions", 4 | "patternProperties": { "^(?:[A-Za-z](?:[-A-Za-z0-9\\+\\.])*:(?:\\/\\/(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:])*@)?(?:\\[(?:(?:(?:[0-9A-Fa-f]{1,4}:){6}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|::(?:[0-9A-Fa-f]{1,4}:){5}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){4}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){3}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){2}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(?:(?:[0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::)|v[0-9A-Fa-f]+[-A-Za-z0-9\\._~!\\$&'\\(\\)\\*\\+,;=:]+)\\]|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}|(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=@])*)(?::[0-9]*)?(?:\\/(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))*)*|\\/(?:(?:(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))+)(?:\\/(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))*)*)?|(?:(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))+)(?:\\/(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))*)*|(?!(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@])))(?:\\?(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@])|[\\uE000-\\uF8FF\\uDC00\\uDB80-\\uDFFD\\uDBBF|\\uDC00\\uDBC0-\\uDFFD\\uDBFF\\/\\?])*)?(?:\\#(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@])|[\\/\\?])*)?)$": {} }, 5 | "additionalProperties": false 6 | } 7 | -------------------------------------------------------------------------------- /1.0.1/formats/README.md: -------------------------------------------------------------------------------- 1 | Formats 2 | ======= 3 | These regular expressions are to be loaded into the JSON validator and run 4 | against any strings that specify one of these formats. 5 | 6 | For example, the mbox schema specifies that the `mbox` property be formatted in 7 | conformance with the `mailto-iri` regex: 8 | 9 | ... 10 | "mbox": { 11 | "type": "string", 12 | "format": "mailto-iri" 13 | } 14 | ... 15 | 16 | If a format is specified in the schema but not defined in formats.json, 17 | undefined behavior will result. What actually happens will depend on which, if 18 | any, formats come pre-defined by your JSON validator library. In `tv4` for 19 | example, no formats come predefined. If an undefined format is specified, it 20 | will be ignored, and any string given for `mbox` will allow the test to pass. 21 | 22 | 23 | Extending 24 | --------- 25 | If a new format must be added, a new entry must be added to formats.json. This 26 | is slightly difficult, because proper escaping must be applied to produce a 27 | valid JSON representation of the regex. Here is a suggested technique, using 28 | JavaScript in Node.js: 29 | 30 | // 1. Create the RegExp object: 31 | var any_three = /^...$/; 32 | 33 | // 2. Make and print the JSON string: 34 | console.log(JSON.stringify(any_three.source)); 35 | 36 | // 3. You can then copy-paste the output into formats.json: 37 | // ... 38 | // "sha1": "^[0-9a-f]{40}$", 39 | // "any_three": "^...$", 40 | // ... 41 | 42 | 43 | Notes on the patterns 44 | --------------------- 45 | ### `version` 46 | 47 | "^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z-]+)?$" 48 | 49 | ` "." "." [ "-" ( | "-" )+ ]` 50 | 51 | Quoting the API: "Starting with 1.0.0, xAPI will be versioned according to 52 | [Semantic Versioning 1.0.0](http://semver.org/spec/v1.0.0.html)." This standard 53 | requires a major version number, a minor version number AND a patch number. 54 | Other specifiers may be appended. 55 | 56 | ### `uuid` 57 | 58 | "^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$" 59 | 60 | Based on [RFC 4122](http://www.ietf.org/rfc/rfc4122.txt). Used in `statement`, 61 | `statementref`, and `context`. 62 | 63 | ### `sha1` 64 | 65 | "^[0-9a-fA-F]{40}$" 66 | 67 | 40 hex digits. Used for `mbox_sha1sum`. 68 | 69 | ### `sha2` 70 | 71 | "^[0-9a-fA-F]{56}(?:[0-9a-fA-F]{8}(?:[0-9a-fA-F]{32}){0,2})?$" 72 | 73 | Allows SHA-224 (permitted, not recommended), SHA-256, SHA-384 and SHA-512. Used 74 | for `attachments`. 75 | 76 | SHA-224: Each hex digit is 4 bits, so `224/4 = 56` hex digits are needed. 77 | 78 | SHA-256: `256-224 = 32` more bits needed. `32/4 = 8` more hex digits than 79 | SHA-224. 80 | 81 | SHA-384: 128 more bits = 32 more hex digits. 82 | 83 | SHA-512: 128 more bits = 32 more hex digits. 84 | 85 | ### `mimetype` 86 | "^[-\\w\\+\\.]+/[-\\w\\+\\.]+(?:;\\s*[-\\w\\+\\.]+=(?:(['\"]?)[-\\w\\+\\.]+\\1)|''|\"\")?$" 87 | 88 | Specifies the data type. Used in `attachment`. 89 | 90 | After examining http://www.freeformatter.com/mime-types-list.html, I determined 91 | that every mimetype has two identifiers, separated by a single slash (/). Each 92 | identifier may contain word characters, ".", "+" or "-". 93 | 94 | Optionally, a parameter may be specified following ";" and whitespace, as in 95 | 96 | text/html; charset=utf-8 97 | 98 | This consists of an identifier, followed by "=", followed by the (possibly 99 | quoted) value. 100 | 101 | ### `mailto-uri` 102 | 103 | A URI, consisting of "mailto:" followed by an email address. Superseded by 104 | `mailto-iri`. 105 | 106 | This was assembled from pieces of [JMRWare's URI regex](http://jmrware.com/articles/2009/uri_regexp/URI_regex.html). I sliced the 107 | first and last characters off of his regexes so that I could combine them 108 | without worrying about the anchors to the beginning and end of the string. I 109 | also disallowed the empty string for the username and host. 110 | 111 | var user = new RegExp( 112 | '^' + 113 | re_js_rfc3986_userinfo.source.slice(1,-2) + '+' + // '*' -> '+' 114 | '$' 115 | ); 116 | var host = new RegExp( 117 | '^' + 118 | re_js_rfc3986_host.source.slice(1,-3) + '+)' + // '*' -> '+' 119 | '$' 120 | ); 121 | var email = new RegExp( 122 | '^' + 123 | '(?:' + user.source.slice(1,-1) + ')' + 124 | '@' + 125 | '(?:' + host.source.slice(1,-1) + ')' + 126 | '$' 127 | ); 128 | var mailto_uri = new RegExp( 129 | '^' + 130 | 'mailto:' + 131 | '(?:' + email.source.slice(1,-1) + ')' + 132 | '$' 133 | ); 134 | console.log(JSON.stringify(mailto.source)); 135 | 136 | ### `mailto-iri` 137 | 138 | An IRI, consisting of "mailto:" followed by an email address. May contain 139 | international characters. A handmade frankenstein of `mailto-uri` and `iri`. 140 | 141 | ### `iri` 142 | 143 | Like a URI, but allows international characters. Requires a scheme, e.g. "http:" 144 | at the beginning. Official definition is in 145 | [RFC 3987](http://www.ietf.org/rfc/rfc3987.txt). Used in `verb`. 146 | 147 | Modified from [Artefaria's IRI Reference regex](http://www.artefarita.com/journel/post/2013/05/23/An-IRI-pattern-for-Java). 148 | 149 | ### `iri-reference` 150 | 151 | Like a URI Reference, but allows international characters. May be an IRI, or a 152 | resolvable IRI fragment. Official definition is in [RFC 3987](http://www.ietf.org/rfc/rfc3987.txt). Taken from 153 | [Artefaria's IRI Reference regex](http://www.artefarita.com/journel/post/2013/05/23/An-IRI-pattern-for-Java). 154 | 155 | ### `rfc3986-uri` 156 | 157 | A URI, which contains only ASCII. Requires a scheme, e.g. "http:" at the 158 | beginning. Official definition is in 159 | [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt). Used in `openid`. 160 | 161 | Taken from 162 | [JMRWare's URI regex](http://jmrware.com/articles/2009/uri_regexp/URI_regex.html). 163 | 164 | I wanted to put this in `uri`, but this conflicts with 165 | [json-schema.org's idea](http://json-schema.org/latest/json-schema-core.html#rfc.section.7.2.3) of 166 | what a `uri` is, since they also allow things like 167 | "#/definitions/positiveInteger" and "schema1" as URIs, which by the RFC are 168 | invalid. Hence, their [metaschema](http://json-schema.org/schema) has a bug at 169 | line 32: 170 | 171 | ... 172 | "id": { 173 | "type": "string", 174 | "format": "uri" # << line 32 175 | }, 176 | ... 177 | 178 | There, "uri" has to be changed to "uri-reference". Also, tv4 will attempt to 179 | verify "$ref" fields as `uri`, so tv4 also needs to be fixed. Until both of 180 | these things are fixed, I cannot define `uri`, since the JSON metaschema from 181 | http://json-schema.org/draft-04/schema won't verify itself. 182 | 183 | ### `rfc3986-uri-reference` 184 | 185 | A URI Reference, which may be a URI, or a resolvable URI fragment. Taken from 186 | [JMRWare's URI regex](http://jmrware.com/articles/2009/uri_regexp/URI_regex.html). 187 | 188 | ### `iso_date` 189 | 190 | A date and time recorded in ISO 8601 format. Used in `statement_base`. 191 | 192 | Taken from 193 | http://stackoverflow.com/questions/21686539/regular-expression-for-full-iso-8601-date-syntax. 194 | 195 | ### `iso_duration` 196 | 197 | A time duration recorded in ISO 8601 format. Used in `result`. 198 | 199 | Also taken from 200 | http://stackoverflow.com/questions/21686539/regular-expression-for-full-iso-8601-date-syntax. 201 | 202 | ### `langtag` 203 | 204 | "^(((([A-Za-z]{2,3}(-([A-Za-z]{3}(-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-([A-Za-z]{4}))?(-([A-Za-z]{2}|[0-9]{3}))?(-([A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3}))*(-([0-9A-WY-Za-wy-z](-[A-Za-z0-9]{2,8})+))*(-(x(-[A-Za-z0-9]{1,8})+))?)|(x(-[A-Za-z0-9]{1,8})+)|((en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)))$" 205 | 206 | Based on [RFC 5646](http://tools.ietf.org/html/rfc5646). Taken from 207 | http://stackoverflow.com/questions/7035825/regular-expression-for-a-language-tag-as-defined-by-bcp47. 208 | 209 | Thanks 210 | ------ 211 | * [Stackoverflow.com: Regular expression for full iso 8601 date syntax](http://stackoverflow.com/questions/21686539/regular-expression-for-full-iso-8601-date-syntax) 212 | * [JMRWare.com: URI regex](http://jmrware.com/articles/2009/uri_regexp/URI_regex.html) 213 | * [Stackoverflow.com: Regular expression for a language tag as defined by BCP47](http://stackoverflow.com/questions/7035825/regular-expression-for-a-language-tag-as-defined-by-bcp47) 214 | * [Artefaria.com: An IRI pattern for Java](http://www.artefarita.com/journel/post/2013/05/23/An-IRI-pattern-for-Java) 215 | -------------------------------------------------------------------------------- /1.0.1/formats/formats.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "^[0-9]+\\.[0-9]+\\.[0-9]+(?:-[0-9A-Za-z-]+)?$", 3 | "uuid": "^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$", 4 | "sha1": "^[0-9a-fA-F]{40}$", 5 | "sha2": "^[0-9a-fA-F]{56}(?:[0-9a-fA-F]{8}(?:[0-9a-fA-F]{32}){0,2})?$", 6 | "mimetype": "^[-\\w\\+\\.]+/[-\\w\\+\\.]+(?:;\\s*[-\\w\\+\\.]+=(?:(['\"]?)[-\\w\\+\\.]+\\1)|''|\"\")?$", 7 | "mailto-iri": "^mailto:(?:%[0-9a-fA-F]{2}|[-a-zA-Z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:])+@(?:\\[(?:(?:(?:(?:[0-9A-Fa-f]{1,4}:){6}|::(?:[0-9A-Fa-f]{1,4}:){5}|(?:[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){4}|(?:(?:[0-9A-Fa-f]{1,4}:){0,1}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){3}|(?:(?:[0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){2}|(?:(?:[0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:|(?:(?:[0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::)(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(?:(?:[0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(?:(?:[0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::)|[Vv][0-9A-Fa-f]+\\.[A-Za-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:%[0-9a-fA-F]{2}|[-a-zA-Z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:])+)$", 8 | "mailto-uri": "^mailto:(?:(?:(?:[A-Za-z0-9\\-._~!$&'()*+,;=:]|%[0-9A-Fa-f]{2})+)@(?:(?:\\[(?:(?:(?:(?:[0-9A-Fa-f]{1,4}:){6}|::(?:[0-9A-Fa-f]{1,4}:){5}|(?:[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){4}|(?:(?:[0-9A-Fa-f]{1,4}:){0,1}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){3}|(?:(?:[0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){2}|(?:(?:[0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:|(?:(?:[0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::)(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(?:(?:[0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(?:(?:[0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::)|[Vv][0-9A-Fa-f]+\\.[A-Za-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:[A-Za-z0-9\\-._~!$&'()*+,;=]|%[0-9A-Fa-f]{2})+)))$", 9 | "iri": "^(?:[A-Za-z](?:[-A-Za-z0-9\\+\\.])*:(?:\\/\\/(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:])*@)?(?:\\[(?:(?:(?:[0-9A-Fa-f]{1,4}:){6}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|::(?:[0-9A-Fa-f]{1,4}:){5}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){4}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){3}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){2}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(?:(?:[0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::)|v[0-9A-Fa-f]+[-A-Za-z0-9\\._~!\\$&'\\(\\)\\*\\+,;=:]+)\\]|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}|(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=@])*)(?::[0-9]*)?(?:\\/(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))*)*|\\/(?:(?:(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))+)(?:\\/(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))*)*)?|(?:(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))+)(?:\\/(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))*)*|(?!(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@])))(?:\\?(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@])|[\\uE000-\\uF8FF\\uDC00\\uDB80-\\uDFFD\\uDBBF|\\uDC00\\uDBC0-\\uDFFD\\uDBFF\\/\\?])*)?(?:\\#(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@])|[\\/\\?])*)?)$", 10 | "iri-reference": "^(?:[A-Za-z](?:[-A-Za-z0-9\\+\\.])*:(?:\\/\\/(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:])*@)?(?:\\[(?:(?:(?:[0-9A-Fa-f]{1,4}:){6}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|::(?:[0-9A-Fa-f]{1,4}:){5}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){4}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){3}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){2}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(?:(?:[0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::)|v[0-9A-Fa-f]+[-A-Za-z0-9\\._~!\\$&'\\(\\)\\*\\+,;=:]+)\\]|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}|(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=@])*)(?::[0-9]*)?(?:\\/(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))*)*|\\/(?:(?:(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))+)(?:\\/(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))*)*)?|(?:(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))+)(?:\\/(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))*)*|(?!(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@])))(?:\\?(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@])|[\\uE000-\\uF8FF\\uDC00\\uDB80-\\uDFFD\\uDBBF|\\uDC00\\uDBC0-\\uDFFD\\uDBFF\\/\\?])*)?(?:\\#(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@])|[\\/\\?])*)?|(?:\\/\\/(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:])*@)?(?:\\[(?:(?:(?:[0-9A-Fa-f]{1,4}:){6}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|::(?:[0-9A-Fa-f]{1,4}:){5}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){4}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){3}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){2}(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3})|(?:(?:[0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(?:(?:[0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::)|v[0-9A-Fa-f]+[-A-Za-z0-9\\._~!\\$&'\\(\\)\\*\\+,;=:]+)\\]|(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(?:\\.(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}|(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=@])*)(?::[0-9]*)?(?:\\/(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))*)*|\\/(?:(?:(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))+)(?:\\/(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))*)*)?|(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=@])+)(?:\\/(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@]))*)*|(?!(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@])))(?:\\?(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@])|[\\uE000-\\uF8FF\\uDC00\\uDB80-\\uDFFD\\uDBBF|\\uDC00\\uDBC0-\\uDFFD\\uDBFF\\/\\?])*)?(?:\\#(?:(?:%[0-9A-Fa-f][0-9A-Fa-f]|[-A-Za-z0-9\\._~\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF\\uDC00\\uD800-\\uDFFD\\uD83F\\uDC00\\uD840-\\uDFFD\\uD87F\\uDC00\\uD880-\\uDFFD\\uD8BF\\uDC00\\uD8C0-\\uDFFD\\uD8FF\\uDC00\\uD900-\\uDFFD\\uD93F\\uDC00\\uD940-\\uDFFD\\uD97F\\uDC00\\uD980-\\uDFFD\\uD9BF\\uDC00\\uD9C0-\\uDFFD\\uD9FF\\uDC00\\uDA00-\\uDFFD\\uDA3F\\uDC00\\uDA40-\\uDFFD\\uDA7F\\uDC00\\uDA80-\\uDFFD\\uDABF\\uDC00\\uDAC0-\\uDFFD\\uDAFF\\uDC00\\uDB00-\\uDFFD\\uDB3F\\uDC00\\uDB44-\\uDFFD\\uDB7F!\\$&'\\(\\)\\*\\+,;=:@])|[\\/\\?])*)?)$", 11 | "rfc3986-uri": "^[A-Za-z][A-Za-z0-9+\\-.]*:(?:\\/\\/(?:(?:[A-Za-z0-9\\-._~!$&'()*+,;=:]|%[0-9A-Fa-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9A-Fa-f]{1,4}:){6}|::(?:[0-9A-Fa-f]{1,4}:){5}|(?:[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){4}|(?:(?:[0-9A-Fa-f]{1,4}:){0,1}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){3}|(?:(?:[0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){2}|(?:(?:[0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:|(?:(?:[0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::)(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(?:(?:[0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(?:(?:[0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::)|[Vv][0-9A-Fa-f]+\\.[A-Za-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:[A-Za-z0-9\\-._~!$&'()*+,;=]|%[0-9A-Fa-f]{2})*)(?::[0-9]*)?(?:\\/(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})*)*|\\/(?:(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})+(?:\\/(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})*)*)?|(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})+(?:\\/(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})*)*|)(?:\\?(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9A-Fa-f]{2})*)?(?:\\#(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9A-Fa-f]{2})*)?$", 12 | "rfc3986-uri-reference": "^(?:[A-Za-z][A-Za-z0-9+\\-.]*:(?:\\/\\/(?:(?:[A-Za-z0-9\\-._~!$&'()*+,;=:]|%[0-9A-Fa-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9A-Fa-f]{1,4}:){6}|::(?:[0-9A-Fa-f]{1,4}:){5}|(?:[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){4}|(?:(?:[0-9A-Fa-f]{1,4}:){0,1}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){3}|(?:(?:[0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){2}|(?:(?:[0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:|(?:(?:[0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::)(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(?:(?:[0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(?:(?:[0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::)|[Vv][0-9A-Fa-f]+\\.[A-Za-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:[A-Za-z0-9\\-._~!$&'()*+,;=]|%[0-9A-Fa-f]{2})*)(?::[0-9]*)?(?:\\/(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})*)*|\\/(?:(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})+(?:\\/(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})*)*)?|(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})+(?:\\/(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})*)*|)(?:\\?(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9A-Fa-f]{2})*)?(?:\\#(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9A-Fa-f]{2})*)?|(?:\\/\\/(?:(?:[A-Za-z0-9\\-._~!$&'()*+,;=:]|%[0-9A-Fa-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9A-Fa-f]{1,4}:){6}|::(?:[0-9A-Fa-f]{1,4}:){5}|(?:[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){4}|(?:(?:[0-9A-Fa-f]{1,4}:){0,1}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){3}|(?:(?:[0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})?::(?:[0-9A-Fa-f]{1,4}:){2}|(?:(?:[0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}:|(?:(?:[0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})?::)(?:[0-9A-Fa-f]{1,4}:[0-9A-Fa-f]{1,4}|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))|(?:(?:[0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})?::[0-9A-Fa-f]{1,4}|(?:(?:[0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})?::)|[Vv][0-9A-Fa-f]+\\.[A-Za-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)|(?:[A-Za-z0-9\\-._~!$&'()*+,;=]|%[0-9A-Fa-f]{2})*)(?::[0-9]*)?(?:\\/(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})*)*|\\/(?:(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})+(?:\\/(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})*)*)?|(?:[A-Za-z0-9\\-._~!$&'()*+,;=@]|%[0-9A-Fa-f]{2})+(?:\\/(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@]|%[0-9A-Fa-f]{2})*)*|)(?:\\?(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9A-Fa-f]{2})*)?(?:\\#(?:[A-Za-z0-9\\-._~!$&'()*+,;=:@\\/?]|%[0-9A-Fa-f]{2})*)?)$", 13 | "iso_date": "^([-+]?\\d{4}(?!\\d{2}\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([-+])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$", 14 | "iso_duration": "^P(?=\\w*\\d)(?:\\d+Y|Y)?(?:\\d+M|M)?(?:\\d+W|W)?(?:\\d+D|D)?(?:T(?:\\d+H|H)?(?:\\d+M|M)?(?:\\d+(?:\\.\\d{1,2})?S|S)?)?$", 15 | "langtag": "^(((([A-Za-z]{2,3}(-([A-Za-z]{3}(-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-([A-Za-z]{4}))?(-([A-Za-z]{2}|[0-9]{3}))?(-([A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3}))*(-([0-9A-WY-Za-wy-z](-[A-Za-z0-9]{2,8})+))*(-(x(-[A-Za-z0-9]{1,8})+))?)|(x(-[A-Za-z0-9]{1,8})+)|((en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)))$" 16 | } 17 | -------------------------------------------------------------------------------- /1.0.1/group.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#group", 4 | "oneOf": [ 5 | {"$ref": "#anonymousgroup"}, 6 | {"$ref": "#identifiedgroup"} 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /1.0.1/group_base.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#group_base", 4 | "type": "object", 5 | "required": ["objectType"], 6 | "properties": { 7 | "name": {"type": "string"}, 8 | "objectType": {"enum": ["Group"]}, 9 | "member": { 10 | "type": "array", 11 | "items": {"$ref": "#agent"} 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /1.0.1/identifiedgroup.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#identifiedgroup", 4 | "allOf": [ 5 | {"$ref": "#inversefunctional"}, 6 | {"$ref": "#group_base"} 7 | ], 8 | "properties": { 9 | "name": {}, 10 | "objectType": {}, 11 | "member": {}, 12 | "mbox": {}, 13 | "mbox_sha1sum": {}, 14 | "account": {}, 15 | "openid": {} 16 | }, 17 | "additionalProperties": false 18 | } 19 | -------------------------------------------------------------------------------- /1.0.1/interactionactivity.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#interactionactivity", 4 | "type": "object", 5 | "oneOf": [ 6 | {"$ref": "#interactionactivity_choices"}, 7 | {"$ref": "#interactionactivity_scale"}, 8 | {"$ref": "#interactionactivity_sourcetarget"}, 9 | {"$ref": "#interactionactivity_steps"}, 10 | {"$ref": "#interactionactivity_none"} 11 | ] 12 | } 13 | -------------------------------------------------------------------------------- /1.0.1/interactionactivity_base.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#interactionactivity_base", 4 | "type": "object", 5 | "properties": { 6 | "correctResponsesPattern": { 7 | "type": "array", 8 | "items": {"type": "string"} 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /1.0.1/interactionactivity_choices.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#interactionactivity_choices", 4 | "type": "object", 5 | "allOf": [{"$ref": "#interactionactivity_base"}], 6 | "required": ["interactionType"], 7 | "properties": { 8 | "choices": {"$ref": "#interactioncomponent_list"}, 9 | "scale": {"type": "null"}, 10 | "source": {"type": "null"}, 11 | "target": {"type": "null"}, 12 | "steps": {"type": "null"}, 13 | "interactionType": { 14 | "enum": [ 15 | "choice", 16 | "sequencing" 17 | ] 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /1.0.1/interactionactivity_none.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#interactionactivity_none", 4 | "type": "object", 5 | "required": ["interactionType"], 6 | "allOf": [ 7 | {"$ref": "#interactionactivity_base"}, 8 | {"oneOf": [ 9 | {"properties": { 10 | "interactionType": {"enum": ["true-false"]}, 11 | "correctResponsesPattern": { 12 | "type": "array", 13 | "items": {"enum": ["true", "false"]} 14 | } 15 | }}, 16 | {"not": {"properties": { 17 | "interactionType": {"enum": ["true-false"]} 18 | }}} 19 | ]} 20 | ], 21 | "properties": { 22 | "choices": {"type": "null"}, 23 | "scale": {"type": "null"}, 24 | "source": {"type": "null"}, 25 | "target": {"type": "null"}, 26 | "steps": {"type": "null"}, 27 | "interactionType": { 28 | "enum": [ 29 | "true-false", 30 | "fill-in", 31 | "long-fill-in", 32 | "numeric", 33 | "other" 34 | ] 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /1.0.1/interactionactivity_scale.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#interactionactivity_scale", 4 | "type": "object", 5 | "allOf": [{"$ref": "#interactionactivity_base"}], 6 | "required": ["interactionType"], 7 | "properties": { 8 | "choices": {"type": "null"}, 9 | "scale": {"$ref": "#interactioncomponent_list"}, 10 | "source": {"type": "null"}, 11 | "target": {"type": "null"}, 12 | "steps": {"type": "null"}, 13 | "interactionType": {"enum": ["likert"]} 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /1.0.1/interactionactivity_sourcetarget.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#interactionactivity_sourcetarget", 4 | "type": "object", 5 | "allOf": [{"$ref": "#interactionactivity_base"}], 6 | "required": ["interactionType"], 7 | "properties": { 8 | "choices": {"type": "null"}, 9 | "scale": {"type": "null"}, 10 | "source": {"$ref": "#interactioncomponent_list"}, 11 | "target": {"$ref": "#interactioncomponent_list"}, 12 | "steps": {"type": "null"}, 13 | "interactionType": {"enum": ["matching"]} 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /1.0.1/interactionactivity_steps.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#interactionactivity_steps", 4 | "type": "object", 5 | "allOf": [{"$ref": "#interactionactivity_base"}], 6 | "required": ["interactionType"], 7 | "properties": { 8 | "choices": {"type": "null"}, 9 | "scale": {"type": "null"}, 10 | "source": {"type": "null"}, 11 | "target": {"type": "null"}, 12 | "steps": {"$ref": "#interactioncomponent_list"}, 13 | "interactionType": {"enum": ["performance"]} 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /1.0.1/interactioncomponent.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#interactioncomponent", 4 | "type": "object", 5 | "required": ["id"], 6 | "properties": { 7 | "id": { 8 | "type": "string", 9 | "minLength": 1 10 | }, 11 | "description": {"$ref": "#languagemap"} 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /1.0.1/interactioncomponent_list.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#interactioncomponent_list", 4 | "type": "array", 5 | "items": {"$ref": "#interactioncomponent"}, 6 | "minItems": 0 7 | } 8 | -------------------------------------------------------------------------------- /1.0.1/inversefunctional.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#inversefunctional", 4 | "oneOf": [ 5 | {"$ref": "#mbox"}, 6 | {"$ref": "#mbox_sha1sum"}, 7 | {"$ref": "#openid"}, 8 | {"$ref": "#account"} 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /1.0.1/languagemap.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#languagemap", 4 | "type": "object", 5 | "patternProperties": { 6 | "^(((([A-Za-z]{2,3}(-([A-Za-z]{3}(-[A-Za-z]{3}){0,2}))?)|[A-Za-z]{4}|[A-Za-z]{5,8})(-([A-Za-z]{4}))?(-([A-Za-z]{2}|[0-9]{3}))?(-([A-Za-z0-9]{5,8}|[0-9][A-Za-z0-9]{3}))*(-([0-9A-WY-Za-wy-z](-[A-Za-z0-9]{2,8})+))*(-(x(-[A-Za-z0-9]{1,8})+))?)|(x(-[A-Za-z0-9]{1,8})+)|((en-GB-oed|i-ami|i-bnn|i-default|i-enochian|i-hak|i-klingon|i-lux|i-mingo|i-navajo|i-pwn|i-tao|i-tay|i-tsu|sgn-BE-FR|sgn-BE-NL|sgn-CH-DE)|(art-lojban|cel-gaulish|no-bok|no-nyn|zh-guoyu|zh-hakka|zh-min|zh-min-nan|zh-xiang)))$": { 7 | "type": "string" 8 | } 9 | }, 10 | "additionalProperties": false 11 | } 12 | -------------------------------------------------------------------------------- /1.0.1/mbox.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#mbox", 4 | "type": "object", 5 | "required": ["mbox"], 6 | "properties": { 7 | "mbox": { 8 | "id": "#mbox!core", 9 | "type": "string", 10 | "format": "mailto-iri" 11 | }, 12 | "mbox_sha1sum": {"type": "null"}, 13 | "openid": {"type": "null"}, 14 | "account": {"type": "null"} 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /1.0.1/mbox_sha1sum.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#mbox_sha1sum", 4 | "type": "object", 5 | "required": ["mbox_sha1sum"], 6 | "properties": { 7 | "mbox_sha1sum": { 8 | "id": "#mbox_sha1sum!core", 9 | "type": "string", 10 | "format": "sha1" 11 | }, 12 | "mbox": {"type": "null"}, 13 | "openid": {"type": "null"}, 14 | "account": {"type": "null"} 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /1.0.1/openid.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#openid", 4 | "type": "object", 5 | "required": ["openid"], 6 | "properties": { 7 | "openid": { 8 | "id": "#openid!core", 9 | "type": "string", 10 | "format": "rfc3986-uri" 11 | }, 12 | "mbox": {"type": "null"}, 13 | "mbox_sha1sum": {"type": "null"}, 14 | "account": {"type": "null"} 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /1.0.1/person.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#person", 4 | "type": "object", 5 | "additionalProperties": false, 6 | "required": ["objectType"], 7 | "properties": { 8 | "objectType": {"enum": ["Person"]}, 9 | "name": { 10 | "type": "array", 11 | "items": {"type": "string"} 12 | }, 13 | "mbox": { 14 | "type": "array", 15 | "items": {"$ref": "#mbox!core"} 16 | }, 17 | "mbox_sha1sum": { 18 | "type": "array", 19 | "items": {"$ref": "#mbox_sha1sum!core"} 20 | }, 21 | "openid": { 22 | "type": "array", 23 | "items": {"$ref": "#openid!core"} 24 | }, 25 | "account": { 26 | "type": "array", 27 | "items": {"$ref": "#account!core"} 28 | } 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /1.0.1/result.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#result", 4 | "type": "object", 5 | "properties": { 6 | "score": {"$ref": "#score"}, 7 | "success": {"type": "boolean"}, 8 | "completion": {"type": "boolean"}, 9 | "response": { 10 | "type": "string" 11 | }, 12 | "duration": { 13 | "type": "string", 14 | "format": "iso_duration" 15 | }, 16 | "extensions": {"$ref": "#extensions"} 17 | }, 18 | "additionalProperties": false 19 | } 20 | -------------------------------------------------------------------------------- /1.0.1/score.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#score", 4 | "type": "object", 5 | "additionalProperties": false, 6 | "properties": { 7 | "scaled": { 8 | "type": "number", 9 | "minimum": -1, 10 | "maximum": 1 11 | }, 12 | "raw": { 13 | "type": "number" 14 | }, 15 | "min": { 16 | "type": "number" 17 | }, 18 | "max": { 19 | "type": "number" 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /1.0.1/statement.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#statement", 4 | "type": "object", 5 | "allOf": [{"$ref": "#statement_base"}], 6 | "properties": { 7 | "objectType": {"type": "null"}, 8 | "id": {}, 9 | "actor": {}, 10 | "verb": {}, 11 | "object": {}, 12 | "result": {}, 13 | "context": {}, 14 | "timestamp": {}, 15 | "stored": {}, 16 | "authority": {}, 17 | "version": {}, 18 | "attachments": {} 19 | }, 20 | "additionalProperties": false 21 | } 22 | -------------------------------------------------------------------------------- /1.0.1/statement_base.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#statement_base", 4 | "type": "object", 5 | "required": ["actor", "verb", "object"], 6 | "oneOf": [ 7 | { 8 | "required": ["object"], 9 | "properties": { 10 | "object": {"$ref": "#activity"} 11 | } 12 | }, 13 | { 14 | "required": ["object"], 15 | "properties": { 16 | "object": {"not": {"$ref": "#activity"}}, 17 | "context": { 18 | "properties": { 19 | "revision": {"type": "null"}, 20 | "platform": {"type": "null"} 21 | } 22 | } 23 | } 24 | } 25 | ], 26 | "additionalProperties": false, 27 | "properties": { 28 | "objectType": {}, 29 | "id": { 30 | "type": "string", 31 | "format": "uuid" 32 | }, 33 | "actor": { 34 | "oneOf": [ 35 | {"$ref": "#agent"}, 36 | {"$ref": "#group"} 37 | ] 38 | }, 39 | "verb": {"$ref": "#verb"}, 40 | "object": {"$ref": "#statement_object"}, 41 | "result": {"$ref": "#result"}, 42 | "context": {"$ref": "#context"}, 43 | "timestamp": { 44 | "type": "string", 45 | "format": "iso_date" 46 | }, 47 | "stored": { 48 | "type": "string", 49 | "format": "iso_date" 50 | }, 51 | "authority": { 52 | "oneOf": [ 53 | {"$ref": "#agent"}, 54 | { 55 | "allOf": [{"$ref": "#anonymousgroup"}], 56 | "properties": { 57 | "member": { 58 | "type": "array", 59 | "items": {"$ref": "#agent"}, 60 | "minItems": 2, 61 | "maxItems": 2 62 | } 63 | } 64 | } 65 | ] 66 | }, 67 | "version": { 68 | "type": "string", 69 | "format": "version" 70 | }, 71 | "attachments": { 72 | "type": "array", 73 | "items": {"$ref": "#attachment"} 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /1.0.1/statement_list.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#statement_list", 4 | "type": "array", 5 | "items": {"$ref": "#statement"} 6 | } 7 | -------------------------------------------------------------------------------- /1.0.1/statement_object.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#statement_object", 4 | "type": "object", 5 | "oneOf": [ 6 | {"$ref": "#activity"}, 7 | { 8 | "required": ["objectType"], 9 | "oneOf":[ 10 | {"$ref": "#agent"}, 11 | {"$ref": "#group"}, 12 | {"$ref": "#statementref"}, 13 | {"$ref": "#substatement"} 14 | ] 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /1.0.1/statementref.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#statementref", 4 | "type": "object", 5 | "additionalProperties": false, 6 | "required": [ 7 | "objectType", 8 | "id" 9 | ], 10 | "properties": { 11 | "objectType": {"enum": ["StatementRef"]}, 12 | "id": { 13 | "type": "string", 14 | "format": "uuid" 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /1.0.1/statementresult.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#statementresult", 4 | "type": "object", 5 | "additionalProperties": false, 6 | "required": ["statements"], 7 | "properties": { 8 | "statements": {"$ref": "#statement_list"}, 9 | "more": { 10 | "type": "string", 11 | "format": "iri" 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /1.0.1/substatement.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#substatement", 4 | "allOf": [{"$ref": "#statement_base"}], 5 | "required": ["objectType"], 6 | "additionalProperties": false, 7 | "properties": { 8 | "objectType": {"enum": ["SubStatement"]}, 9 | "id": {"type": "null"}, 10 | "stored": {"type": "null"}, 11 | "version": {"type": "null"}, 12 | "authority": {"type": "null"}, 13 | "object": { 14 | "not": { 15 | "required": ["objectType"], 16 | "properties": { 17 | "objectType": {"enum": ["SubStatement"]} 18 | } 19 | } 20 | }, 21 | "actor": {}, 22 | "verb": {}, 23 | "result": {}, 24 | "context": {}, 25 | "timestamp": {}, 26 | "attachments": {} 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /1.0.1/verb.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema#", 3 | "id": "#verb", 4 | "type": "object", 5 | "required": ["id"], 6 | "properties": { 7 | "id": { 8 | "type": "string", 9 | "format": "iri" 10 | }, 11 | "display": {"$ref": "#languagemap"} 12 | }, 13 | "additionalProperties": false 14 | } 15 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | http://www.apache.org/licenses/ 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | "License" shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | "Licensor" shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | "Legal Entity" shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | "control" means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | "You" (or "Your") shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | "Source" form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | "Object" form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | "Work" shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | "Derivative Works" shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | "Contribution" shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, "submitted" 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as "Not a Contribution." 62 | 63 | "Contributor" shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions: 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a "NOTICE" text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places: within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an "AS IS" BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations and/or rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX: How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets "[]" 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same "printed page" as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright [yyyy] [name of copyright owner] 191 | 192 | Licensed under the Apache License, Version 2.0 (the "License"); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | http://www.apache.org/licenses/LICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an "AS IS" BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. 203 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | TinCanSchema 2 | Copyright 2014 Rustici Software 3 | 4 | This product includes software developed at 5 | Rustici Software (http://www.tincanapi.com/). 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Tin Can Schema 2 | ============== 3 | The folder(s) here contain JSON schema for Tin Can API objects. They are 4 | used to validate objects against the 5 | [Tin Can API specification](https://github.com/adlnet/xAPI-Spec). 6 | 7 | The schema are designed to be language-independent; the only requirements are 8 | 9 | 1. That the validator must 10 | [support draft-4](http://www.json-schema.org/implementations.html) JSON 11 | schema, and 12 | 13 | 2. That the validator has some way of registering Regular Expressions to 14 | support the `format` field. This is not a hard requirement, but without this 15 | support, strings will not be verified for their format. 16 | 17 | We are testing the schema using 18 | [Tin Can Validator](https://github.com/RusticiSoftware/TinCanValidator). 19 | 20 | 21 | Structure 22 | --------- 23 | Each directory contains a complete set of parts that can be easily assembled 24 | into a complete schema file. 25 | 26 | A `formats` sub-directory may be present. This contains Regular Expression 27 | strings in JSON format to validate special strings like UUIDs, version numbers 28 | and URIs. These are not part of the schema itself, but must be registered with 29 | the schema validator to enable string format checking. 30 | 31 | 32 | ### Build the schema (automatic) 33 | You can use 34 | [Tin Can Validator](https://github.com/RusticiSoftware/TinCanValidator) to do 35 | this for you: 36 | 37 | git clone https://github.com/RusticiSoftware/TinCanValidator 38 | cd TinCanValidator 39 | ./joinSchema.js path/to/TinCanSchema/ result.json 40 | 41 | 42 | ### Build the schema (manual) 43 | If you don't want to use that, follow these instructions: 44 | 45 | // 1. Make a skeleton: 46 | result = { 47 | "$schema": "http://json-schema.org/draft-04/schema#", 48 | "type": "object", 49 | "additionalProperties": false, 50 | "properties": {} 51 | } 52 | 53 | // 2. For each JSON file: 54 | files = [ "account.json", "..." ] 55 | for (var i=0; i", result); 86 | 87 | // 4. Now to register the formats. Load and validate formats/formats.json: 88 | try { 89 | stringData = readFile("formats/formats.json"); 90 | data = JSON.parse(stringData); 91 | } catch (err) { 92 | // handle the error 93 | } 94 | 95 | // 5. For each item in the data, make the Regex and register it with your validator: 96 | for (item in data.keys()) { 97 | rgx = new RegExp(data[item]); 98 | YourValidator.addFormat(item, rgx); 99 | } 100 | 101 | // 6. Now you can validate stuff! 102 | function validateAs(obj, id) { 103 | schema = { "$ref": "tcapi:#" + id }; 104 | YourValidator.validate(obj, schema); 105 | } 106 | 107 | -------------------------------------------------------------------------------- /npm/prepublish.js: -------------------------------------------------------------------------------- 1 | var fs = require("fs"), 2 | glob = require("glob"), 3 | base = { 4 | "$schema": "http://json-schema.org/draft-04/schema#", 5 | type: "object", 6 | additionalProperties: false, 7 | properties: {} 8 | }, 9 | version = "1.0.1", 10 | outputFile = version + ".json"; 11 | 12 | glob( 13 | version + "/**/*.json", 14 | function (err, files) { 15 | if (err) { 16 | throw new Error("Unable to glob schema files: " + err); 17 | } 18 | 19 | files.forEach( 20 | function (file) { 21 | if (file === version + "/formats/formats.json") { 22 | return; 23 | } 24 | 25 | var schema = require(__dirname + "/../" + file); 26 | 27 | if (typeof schema["$schema"] !== "undefined") { 28 | delete schema["$schema"]; 29 | } 30 | 31 | base.properties[schema.id.slice(1)] = schema; 32 | } 33 | ); 34 | 35 | fs.writeFile( 36 | __dirname + "/../" + outputFile, 37 | JSON.stringify(base, null, 2), 38 | function (err) { 39 | if (err) { 40 | throw new Error("Failed to write combined file: " + err); 41 | } 42 | 43 | console.log("combined schema written to: " + outputFile); 44 | } 45 | ); 46 | } 47 | ); 48 | 49 | fs.writeFileSync(__dirname + "/../formats.json", fs.readFileSync(__dirname + "/../" + version + "/formats/formats.json")); 50 | console.log("formats written to: formats.json"); 51 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tin-can-json-schema", 3 | "version": "2.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "balanced-match": { 8 | "version": "1.0.2", 9 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 10 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 11 | "dev": true 12 | }, 13 | "brace-expansion": { 14 | "version": "1.1.11", 15 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 16 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 17 | "dev": true, 18 | "requires": { 19 | "balanced-match": "^1.0.0", 20 | "concat-map": "0.0.1" 21 | } 22 | }, 23 | "concat-map": { 24 | "version": "0.0.1", 25 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 26 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 27 | "dev": true 28 | }, 29 | "glob": { 30 | "version": "4.5.3", 31 | "resolved": "https://registry.npmjs.org/glob/-/glob-4.5.3.tgz", 32 | "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", 33 | "dev": true, 34 | "requires": { 35 | "inflight": "^1.0.4", 36 | "inherits": "2", 37 | "minimatch": "^2.0.1", 38 | "once": "^1.3.0" 39 | } 40 | }, 41 | "inflight": { 42 | "version": "1.0.6", 43 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 44 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 45 | "dev": true, 46 | "requires": { 47 | "once": "^1.3.0", 48 | "wrappy": "1" 49 | } 50 | }, 51 | "inherits": { 52 | "version": "2.0.4", 53 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 54 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 55 | "dev": true 56 | }, 57 | "minimatch": { 58 | "version": "2.0.10", 59 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.10.tgz", 60 | "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", 61 | "dev": true, 62 | "requires": { 63 | "brace-expansion": "^1.0.0" 64 | } 65 | }, 66 | "once": { 67 | "version": "1.4.0", 68 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 69 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 70 | "dev": true, 71 | "requires": { 72 | "wrappy": "1" 73 | } 74 | }, 75 | "wrappy": { 76 | "version": "1.0.2", 77 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 78 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 79 | "dev": true 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tin-can-json-schema", 3 | "version": "2.0.0", 4 | "description": "JSON Schema files for structures in the Experience API", 5 | "private": false, 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/RusticiSoftware/TinCanSchema.git" 9 | }, 10 | "keywords": [ 11 | "tincan", 12 | "tin can", 13 | "e-learning", 14 | "scorm", 15 | "lrs", 16 | "experienceapi", 17 | "experience api", 18 | "xapi" 19 | ], 20 | "author": "Rustici Software ", 21 | "contributors": [ 22 | { 23 | "name": "Chaim-Leib Halbert", 24 | "email": "chaim.leib.halbert@gmail.com" 25 | }, 26 | { 27 | "name": "Brian J. Miller", 28 | "email": "brian.miller@rusticisoftware.com" 29 | }, 30 | { 31 | "name": "Chris Hooks", 32 | "email": "chris.hooks@rusticisoftware.com" 33 | } 34 | ], 35 | "license": "Apache-2.0", 36 | "bugs": { 37 | "url": "https://github.com/RusticiSoftware/TinCanSchema/issues" 38 | }, 39 | "homepage": "https://github.com/RusticiSoftware/TinCanSchema", 40 | "devDependencies": { 41 | "glob": "^4.4.0" 42 | }, 43 | "scripts": { 44 | "prepublish": "node npm/prepublish.js" 45 | } 46 | } 47 | --------------------------------------------------------------------------------