moca-reader 0.6.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- moca_reader/__init__.py +84 -0
- moca_reader/_js.py +291 -0
- moca_reader/attestations.py +271 -0
- moca_reader/audience.py +49 -0
- moca_reader/backends/__init__.py +1 -0
- moca_reader/backends/bm25.py +118 -0
- moca_reader/backends/dense.py +146 -0
- moca_reader/backends/hybrid.py +73 -0
- moca_reader/backends/lexical.py +112 -0
- moca_reader/backends/memory_store.py +122 -0
- moca_reader/citation.py +213 -0
- moca_reader/codes.py +110 -0
- moca_reader/conformance.py +249 -0
- moca_reader/content.py +312 -0
- moca_reader/diagnostics.py +45 -0
- moca_reader/digest.py +92 -0
- moca_reader/dsse.py +97 -0
- moca_reader/ed25519.py +83 -0
- moca_reader/embedders.py +224 -0
- moca_reader/evidence_text.py +187 -0
- moca_reader/frontmatter.py +151 -0
- moca_reader/library.py +176 -0
- moca_reader/manifest.py +186 -0
- moca_reader/metadata.py +58 -0
- moca_reader/profiles.py +5 -0
- moca_reader/py.typed +0 -0
- moca_reader/reader.py +468 -0
- moca_reader/relations.py +46 -0
- moca_reader/resolver.py +33 -0
- moca_reader/reviews.py +18 -0
- moca_reader/schemas/ag-ui-citations.schema.json +36 -0
- moca_reader/schemas/citation-record.schema.json +326 -0
- moca_reader/schemas/manifest.schema.json +171 -0
- moca_reader/schemas/node.schema.json +372 -0
- moca_reader/schemas/review-predicate.schema.json +42 -0
- moca_reader/schemas/search-hit.schema.json +62 -0
- moca_reader/schemas/sidecar-index.schema.json +155 -0
- moca_reader/schemas/structure.schema.json +93 -0
- moca_reader/schemas/trust-root.schema.json +130 -0
- moca_reader/schemas.py +44 -0
- moca_reader/search.py +346 -0
- moca_reader/sidecar.py +228 -0
- moca_reader/source.py +285 -0
- moca_reader/state.py +119 -0
- moca_reader/strategies/__init__.py +1 -0
- moca_reader/strategies/diversify.py +28 -0
- moca_reader/strategies/ontology_guided.py +63 -0
- moca_reader/structure.py +385 -0
- moca_reader/structure_ops.py +160 -0
- moca_reader/unicode.py +33 -0
- moca_reader-0.6.0.dist-info/METADATA +209 -0
- moca_reader-0.6.0.dist-info/RECORD +55 -0
- moca_reader-0.6.0.dist-info/WHEEL +4 -0
- moca_reader-0.6.0.dist-info/licenses/LICENSE +201 -0
- moca_reader-0.6.0.dist-info/licenses/NOTICE +15 -0
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://w3id.org/moca/schemas/v1/citation-record.schema.json",
|
|
4
|
+
"title": "MOCA citation record",
|
|
5
|
+
"description": "What a Reader or adapter hands to an application for one node or chunk. Normative: spec/moca-reader-contract.md section 7.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"package",
|
|
9
|
+
"node",
|
|
10
|
+
"trust"
|
|
11
|
+
],
|
|
12
|
+
"properties": {
|
|
13
|
+
"package": {
|
|
14
|
+
"type": "object",
|
|
15
|
+
"required": [
|
|
16
|
+
"id",
|
|
17
|
+
"version",
|
|
18
|
+
"digest",
|
|
19
|
+
"signed"
|
|
20
|
+
],
|
|
21
|
+
"properties": {
|
|
22
|
+
"id": {
|
|
23
|
+
"type": "string"
|
|
24
|
+
},
|
|
25
|
+
"version": {
|
|
26
|
+
"type": "string"
|
|
27
|
+
},
|
|
28
|
+
"digest": {
|
|
29
|
+
"type": "string",
|
|
30
|
+
"pattern": "^sha256:[a-f0-9]{64}(?![\\s\\S])"
|
|
31
|
+
},
|
|
32
|
+
"signed": {
|
|
33
|
+
"type": "boolean"
|
|
34
|
+
},
|
|
35
|
+
"signers": {
|
|
36
|
+
"type": "array",
|
|
37
|
+
"items": {
|
|
38
|
+
"type": "string"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"additionalProperties": false
|
|
43
|
+
},
|
|
44
|
+
"node": {
|
|
45
|
+
"type": "object",
|
|
46
|
+
"required": [
|
|
47
|
+
"id",
|
|
48
|
+
"path",
|
|
49
|
+
"type",
|
|
50
|
+
"ref"
|
|
51
|
+
],
|
|
52
|
+
"properties": {
|
|
53
|
+
"id": {
|
|
54
|
+
"type": "string"
|
|
55
|
+
},
|
|
56
|
+
"path": {
|
|
57
|
+
"type": "string"
|
|
58
|
+
},
|
|
59
|
+
"locale": {
|
|
60
|
+
"type": "string"
|
|
61
|
+
},
|
|
62
|
+
"type": {
|
|
63
|
+
"type": "string"
|
|
64
|
+
},
|
|
65
|
+
"title": {
|
|
66
|
+
"type": "string"
|
|
67
|
+
},
|
|
68
|
+
"description": {
|
|
69
|
+
"type": "string"
|
|
70
|
+
},
|
|
71
|
+
"tags": {
|
|
72
|
+
"type": "array",
|
|
73
|
+
"items": {
|
|
74
|
+
"type": "string"
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
"digest": {
|
|
78
|
+
"type": "string",
|
|
79
|
+
"pattern": "^sha256:[a-f0-9]{64}(?![\\s\\S])"
|
|
80
|
+
},
|
|
81
|
+
"ref": {
|
|
82
|
+
"type": "string",
|
|
83
|
+
"minLength": 1,
|
|
84
|
+
"description": "Versioned node reference: <package id>@<version>#<path>. Unique across package versions; use it as the citation key."
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"additionalProperties": false
|
|
88
|
+
},
|
|
89
|
+
"span": {
|
|
90
|
+
"type": "object",
|
|
91
|
+
"required": [
|
|
92
|
+
"start",
|
|
93
|
+
"end"
|
|
94
|
+
],
|
|
95
|
+
"properties": {
|
|
96
|
+
"start": {
|
|
97
|
+
"type": "integer",
|
|
98
|
+
"minimum": 0
|
|
99
|
+
},
|
|
100
|
+
"end": {
|
|
101
|
+
"type": "integer",
|
|
102
|
+
"minimum": 0
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"additionalProperties": false,
|
|
106
|
+
"description": "UTF-8 byte offsets into the node file."
|
|
107
|
+
},
|
|
108
|
+
"text": {
|
|
109
|
+
"type": "string"
|
|
110
|
+
},
|
|
111
|
+
"trust": {
|
|
112
|
+
"type": "object",
|
|
113
|
+
"required": [
|
|
114
|
+
"status",
|
|
115
|
+
"declaredVerified",
|
|
116
|
+
"attestedReviews",
|
|
117
|
+
"reviewStatus",
|
|
118
|
+
"stale",
|
|
119
|
+
"inForce",
|
|
120
|
+
"superseded",
|
|
121
|
+
"contested"
|
|
122
|
+
],
|
|
123
|
+
"properties": {
|
|
124
|
+
"status": {
|
|
125
|
+
"enum": [
|
|
126
|
+
"draft",
|
|
127
|
+
"stable",
|
|
128
|
+
"deprecated"
|
|
129
|
+
]
|
|
130
|
+
},
|
|
131
|
+
"generated": {
|
|
132
|
+
"oneOf": [
|
|
133
|
+
{
|
|
134
|
+
"type": "object",
|
|
135
|
+
"required": [
|
|
136
|
+
"by"
|
|
137
|
+
],
|
|
138
|
+
"properties": {
|
|
139
|
+
"by": {
|
|
140
|
+
"type": "string"
|
|
141
|
+
},
|
|
142
|
+
"at": {
|
|
143
|
+
"type": "string"
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"type": "null"
|
|
149
|
+
}
|
|
150
|
+
]
|
|
151
|
+
},
|
|
152
|
+
"declaredVerified": {
|
|
153
|
+
"type": "array",
|
|
154
|
+
"items": {
|
|
155
|
+
"type": "object",
|
|
156
|
+
"required": [
|
|
157
|
+
"by"
|
|
158
|
+
],
|
|
159
|
+
"properties": {
|
|
160
|
+
"by": {
|
|
161
|
+
"type": "string"
|
|
162
|
+
},
|
|
163
|
+
"at": {
|
|
164
|
+
"type": "string"
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
"description": "OKF verified entries: self-declared, not cryptographically checked."
|
|
169
|
+
},
|
|
170
|
+
"attestedReviews": {
|
|
171
|
+
"type": "array",
|
|
172
|
+
"items": {
|
|
173
|
+
"type": "object",
|
|
174
|
+
"required": [
|
|
175
|
+
"reviewer",
|
|
176
|
+
"reviewedAt",
|
|
177
|
+
"outcome",
|
|
178
|
+
"signer",
|
|
179
|
+
"packageVerified"
|
|
180
|
+
],
|
|
181
|
+
"properties": {
|
|
182
|
+
"reviewer": {
|
|
183
|
+
"type": "string"
|
|
184
|
+
},
|
|
185
|
+
"reviewedAt": {
|
|
186
|
+
"type": "string"
|
|
187
|
+
},
|
|
188
|
+
"outcome": {
|
|
189
|
+
"enum": [
|
|
190
|
+
"accurate",
|
|
191
|
+
"needs-change",
|
|
192
|
+
"inaccurate"
|
|
193
|
+
]
|
|
194
|
+
},
|
|
195
|
+
"scope": {
|
|
196
|
+
"type": "string"
|
|
197
|
+
},
|
|
198
|
+
"signer": {
|
|
199
|
+
"type": "string"
|
|
200
|
+
},
|
|
201
|
+
"packageVerified": {
|
|
202
|
+
"type": "boolean",
|
|
203
|
+
"description": "Whether the package carrying the review has a valid package attestation. A review in an unsigned package never counts as approved (ADR-0017)."
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
"reviewStatus": {
|
|
209
|
+
"enum": [
|
|
210
|
+
"approved",
|
|
211
|
+
"disputed",
|
|
212
|
+
"unverified",
|
|
213
|
+
"none"
|
|
214
|
+
],
|
|
215
|
+
"description": "approved: signed, a current review is accurate and none says otherwise; disputed: signed, and a current review says needs-change or inaccurate; unverified: reviews in an unsigned package; none: no current review (Reader contract §7)."
|
|
216
|
+
},
|
|
217
|
+
"staleAfter": {
|
|
218
|
+
"type": "string"
|
|
219
|
+
},
|
|
220
|
+
"validFrom": {
|
|
221
|
+
"type": "string"
|
|
222
|
+
},
|
|
223
|
+
"validUntil": {
|
|
224
|
+
"type": "string"
|
|
225
|
+
},
|
|
226
|
+
"stale": {
|
|
227
|
+
"type": "boolean"
|
|
228
|
+
},
|
|
229
|
+
"inForce": {
|
|
230
|
+
"type": "boolean"
|
|
231
|
+
},
|
|
232
|
+
"superseded": {
|
|
233
|
+
"type": "boolean"
|
|
234
|
+
},
|
|
235
|
+
"supersededBy": {
|
|
236
|
+
"type": "array",
|
|
237
|
+
"items": {
|
|
238
|
+
"type": "string"
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
"contested": {
|
|
242
|
+
"type": "boolean"
|
|
243
|
+
},
|
|
244
|
+
"contestedBy": {
|
|
245
|
+
"type": "array",
|
|
246
|
+
"items": {
|
|
247
|
+
"type": "string"
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
},
|
|
251
|
+
"additionalProperties": false
|
|
252
|
+
},
|
|
253
|
+
"evidence": {
|
|
254
|
+
"type": "array",
|
|
255
|
+
"items": {
|
|
256
|
+
"type": "object",
|
|
257
|
+
"required": [
|
|
258
|
+
"source"
|
|
259
|
+
],
|
|
260
|
+
"properties": {
|
|
261
|
+
"source": {
|
|
262
|
+
"type": "object"
|
|
263
|
+
},
|
|
264
|
+
"selector": {
|
|
265
|
+
"type": "object"
|
|
266
|
+
},
|
|
267
|
+
"note": {
|
|
268
|
+
"type": "string"
|
|
269
|
+
},
|
|
270
|
+
"matched": {
|
|
271
|
+
"type": "boolean",
|
|
272
|
+
"description": "true when the Reader checked the selector against the cited file inside the package and it matched; false when it did not match; absent when not checked. It says the quote is in the file, not that the claim is true."
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
"concepts": {
|
|
278
|
+
"type": "array",
|
|
279
|
+
"description": "Absolute concept IRIs the node is bound to, from the package structure (moca.concepts).",
|
|
280
|
+
"items": {
|
|
281
|
+
"type": "string",
|
|
282
|
+
"pattern": "^[A-Za-z][A-Za-z0-9+.-]*:[^\\t\\n\\v\\f\\r \u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+(?![\\s\\S])"
|
|
283
|
+
}
|
|
284
|
+
},
|
|
285
|
+
"audience": {
|
|
286
|
+
"type": "string"
|
|
287
|
+
},
|
|
288
|
+
"audienceInvalid": {
|
|
289
|
+
"const": true,
|
|
290
|
+
"description": "Present when the node's moca.audience is malformed: the record never matches an audience set (Reader contract §8)."
|
|
291
|
+
},
|
|
292
|
+
"profiles": {
|
|
293
|
+
"type": "array",
|
|
294
|
+
"items": {
|
|
295
|
+
"type": "string"
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
"score": {
|
|
299
|
+
"type": "number"
|
|
300
|
+
},
|
|
301
|
+
"retrieval": {
|
|
302
|
+
"type": "object",
|
|
303
|
+
"description": "How a search found this record (ADR-0010): through the backend, or added by a retrieval hook following the structure.",
|
|
304
|
+
"required": [
|
|
305
|
+
"via"
|
|
306
|
+
],
|
|
307
|
+
"properties": {
|
|
308
|
+
"via": {
|
|
309
|
+
"enum": [
|
|
310
|
+
"search",
|
|
311
|
+
"requires",
|
|
312
|
+
"parts",
|
|
313
|
+
"narrower",
|
|
314
|
+
"related"
|
|
315
|
+
]
|
|
316
|
+
},
|
|
317
|
+
"from": {
|
|
318
|
+
"type": "string",
|
|
319
|
+
"description": "The concept IRI the record was reached from."
|
|
320
|
+
}
|
|
321
|
+
},
|
|
322
|
+
"additionalProperties": false
|
|
323
|
+
}
|
|
324
|
+
},
|
|
325
|
+
"additionalProperties": false
|
|
326
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://w3id.org/moca/schemas/v1/manifest.schema.json",
|
|
4
|
+
"title": "MOCA package manifest (moca.json)",
|
|
5
|
+
"description": "Normative schema for moca.json. See spec/moca-package-spec.md section 4.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": [
|
|
8
|
+
"id",
|
|
9
|
+
"version",
|
|
10
|
+
"title"
|
|
11
|
+
],
|
|
12
|
+
"properties": {
|
|
13
|
+
"$schema": {
|
|
14
|
+
"type": "string"
|
|
15
|
+
},
|
|
16
|
+
"mocaVersion": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"pattern": "^[0-9]+\\.[0-9]+(?![\\s\\S])",
|
|
19
|
+
"description": "The MOCA specification version the package was written against, major.minor."
|
|
20
|
+
},
|
|
21
|
+
"id": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"pattern": "^[A-Za-z][A-Za-z0-9+.-]*:[^\\t\\n\\v\\f\\r -
]+(?![\\s\\S])",
|
|
24
|
+
"description": "Absolute URI naming the package across all its versions. https: or tag: URIs are recommended. It never contains #: a node identifier is the id, #, and the node path.",
|
|
25
|
+
"not": {
|
|
26
|
+
"pattern": "#"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"version": {
|
|
30
|
+
"type": "string",
|
|
31
|
+
"pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?(?![\\s\\S])",
|
|
32
|
+
"description": "Content version, following the content-versioning rules in spec section 4.3."
|
|
33
|
+
},
|
|
34
|
+
"title": {
|
|
35
|
+
"type": "string",
|
|
36
|
+
"minLength": 1
|
|
37
|
+
},
|
|
38
|
+
"description": {
|
|
39
|
+
"type": "string"
|
|
40
|
+
},
|
|
41
|
+
"language": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"pattern": "^[A-Za-z]{2,3}(-[A-Za-z0-9]{1,8})*(?![\\s\\S])",
|
|
44
|
+
"description": "BCP 47 tag of the default-language content."
|
|
45
|
+
},
|
|
46
|
+
"locales": {
|
|
47
|
+
"type": "array",
|
|
48
|
+
"items": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"pattern": "^[A-Za-z]{2,3}(-[A-Za-z0-9]{1,8})*(?![\\s\\S])"
|
|
51
|
+
},
|
|
52
|
+
"uniqueItems": true,
|
|
53
|
+
"description": "BCP 47 tags of additional locale variants, see spec section 5.4."
|
|
54
|
+
},
|
|
55
|
+
"license": {
|
|
56
|
+
"type": "string",
|
|
57
|
+
"description": "SPDX license expression."
|
|
58
|
+
},
|
|
59
|
+
"publisher": {
|
|
60
|
+
"type": "string"
|
|
61
|
+
},
|
|
62
|
+
"validFrom": {
|
|
63
|
+
"type": "string",
|
|
64
|
+
"anyOf": [
|
|
65
|
+
{
|
|
66
|
+
"format": "date-time"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"format": "date"
|
|
70
|
+
}
|
|
71
|
+
],
|
|
72
|
+
"description": "When the package's content comes into force."
|
|
73
|
+
},
|
|
74
|
+
"validUntil": {
|
|
75
|
+
"type": "string",
|
|
76
|
+
"anyOf": [
|
|
77
|
+
{
|
|
78
|
+
"format": "date-time"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"format": "date"
|
|
82
|
+
}
|
|
83
|
+
],
|
|
84
|
+
"description": "When the package's content stops being in force."
|
|
85
|
+
},
|
|
86
|
+
"members": {
|
|
87
|
+
"type": "array",
|
|
88
|
+
"items": {
|
|
89
|
+
"$ref": "#/$defs/member"
|
|
90
|
+
},
|
|
91
|
+
"description": "Ordered packages this package is composed of, each pinned by digest."
|
|
92
|
+
},
|
|
93
|
+
"relations": {
|
|
94
|
+
"type": "array",
|
|
95
|
+
"items": {
|
|
96
|
+
"$ref": "#/$defs/relation"
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
"profiles": {
|
|
100
|
+
"type": "object",
|
|
101
|
+
"propertyNames": {
|
|
102
|
+
"pattern": "^[A-Za-z][A-Za-z0-9+.-]*:[^\\t\\n\\v\\f\\r -
]+(?![\\s\\S])"
|
|
103
|
+
},
|
|
104
|
+
"additionalProperties": {
|
|
105
|
+
"type": "object"
|
|
106
|
+
},
|
|
107
|
+
"description": "Profile URI -> that profile's package-level data."
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
"additionalProperties": true,
|
|
111
|
+
"$defs": {
|
|
112
|
+
"member": {
|
|
113
|
+
"type": "object",
|
|
114
|
+
"required": [
|
|
115
|
+
"id",
|
|
116
|
+
"version",
|
|
117
|
+
"digest"
|
|
118
|
+
],
|
|
119
|
+
"properties": {
|
|
120
|
+
"id": {
|
|
121
|
+
"type": "string",
|
|
122
|
+
"pattern": "^[A-Za-z][A-Za-z0-9+.-]*:[^\\t\\n\\v\\f\\r -
]+(?![\\s\\S])",
|
|
123
|
+
"not": {
|
|
124
|
+
"pattern": "#"
|
|
125
|
+
},
|
|
126
|
+
"description": "A package id; never contains #."
|
|
127
|
+
},
|
|
128
|
+
"version": {
|
|
129
|
+
"type": "string",
|
|
130
|
+
"pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?(?![\\s\\S])"
|
|
131
|
+
},
|
|
132
|
+
"digest": {
|
|
133
|
+
"type": "string",
|
|
134
|
+
"pattern": "^sha256:[a-f0-9]{64}(?![\\s\\S])"
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
"additionalProperties": false
|
|
138
|
+
},
|
|
139
|
+
"relation": {
|
|
140
|
+
"type": "object",
|
|
141
|
+
"required": [
|
|
142
|
+
"type",
|
|
143
|
+
"target"
|
|
144
|
+
],
|
|
145
|
+
"properties": {
|
|
146
|
+
"type": {
|
|
147
|
+
"type": "string",
|
|
148
|
+
"minLength": 1,
|
|
149
|
+
"description": "supersedes | amends | conflictsWith | crossReferences, or a profile-defined type."
|
|
150
|
+
},
|
|
151
|
+
"target": {
|
|
152
|
+
"type": "string",
|
|
153
|
+
"pattern": "^[A-Za-z][A-Za-z0-9+.-]*:[^\\t\\n\\v\\f\\r -
]+(?![\\s\\S])",
|
|
154
|
+
"not": {
|
|
155
|
+
"pattern": "#"
|
|
156
|
+
},
|
|
157
|
+
"description": "A package id; never contains #."
|
|
158
|
+
},
|
|
159
|
+
"version": {
|
|
160
|
+
"type": "string",
|
|
161
|
+
"description": "Optional exact version of the target the relation applies to.",
|
|
162
|
+
"pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(?:-[0-9A-Za-z.-]+)?(?:\\+[0-9A-Za-z.-]+)?(?![\\s\\S])"
|
|
163
|
+
},
|
|
164
|
+
"note": {
|
|
165
|
+
"type": "string"
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
"additionalProperties": false
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|