1
+ <!DOCTYPE html lang="en">
2
+ < html >
3
+
4
+ < head itemscope ="itemscope " itemtype ="http://smpte.org/standards/documents ">
5
+ < meta charset ="utf-8 " />
6
+ < meta http-equiv ="x-ua-compatible " content ="ie=edge " />
7
+ < meta name ="viewport " content ="width=device-width, initial-scale=1 " />
8
+ < script src ="tooling/smpte.js "> </ script >
9
+ < link rel ="stylesheet " href ="tooling/smpte.css " />
10
+ < meta itemprop ="pubType " content ="AG " />
11
+ < meta itemprop ="pubNumber " content ="25 " />
12
+ < meta itemprop ="pubState " content ="published " />
13
+ < meta itemprop ="pubDateTime " content ="2022-07-05 " />
14
+ < title > Use of JSON in Engineering Documents</ title >
15
+ </ head >
16
+
17
+ < body >
18
+
19
+ < section id ="sec-foreword " class ="unnumbered "> </ section >
20
+
21
+ < section id ="sec-toc " class ="unnumbered "> </ section >
22
+
23
+ < section id ="sec-scope ">
24
+ < h2 > Scope</ h2 >
25
+ < p > This Administrative Guideline specifies selected uses of the JavaScript Object Notation (JSON) in SMPTE
26
+ Engineering Documents.</ p >
27
+ </ section >
28
+
29
+ < section id ="sec-conformance "> </ section >
30
+
31
+ < section id ="sec-normative-references ">
32
+ < ul >
33
+ < li > < cite id ="bib-ietf-rfc-3986 "> IETF RFC 3986</ cite > , Uniform Resource
34
+ Identifiers (URI): Generic Syntax, T. Berners-Lee, et al., January 2005. < a > http://www.ietf.org/rfc/rfc3986.txt</ a > </ li >
35
+ < li > < cite id ="bib-ietf-rfc-5234 "> IETF RFC 5234</ cite > , “Augmented BNF for
36
+ Syntax Specifications: ABNF”, D. Crocker, January 2008. < a > https://www.rfc-editor.org/rfc/rfc5234.txt</ a > </ li >
37
+ < li > < cite id ="bib-ietf-rfc-7405 "> IETF RFC 7405</ cite > , “Case-Sensitive
38
+ String Support in ABNF”, P. Kyzivat, December 2014. < a > https://datatracker.ietf.org/doc/html/rfc7405.txt</ a > </ li >
39
+ < li > < cite id ="bib-ietf-rfc-8259 "> IETF RFC 8259</ cite > , The JavaScript
40
+ Object Notation (JSON) Data Interchange Format, T. Bray, < a > http://www.ietf.org/rfc/rfc8259.txt</ a > </ li >
41
+ </ ul >
42
+ </ section >
43
+
44
+ < section id ="sec-smpte-json-structures ">
45
+ < h2 > SMPTE JSON structures</ h2 >
46
+ < section id ="sec-overview ">
47
+ < h3 > Overview (informative)</ h3 >
48
+ The JSON Schema resource applicable to a JSON structure can specify constraints to which the structure is expected to conform.
49
+ </ section >
50
+
51
+ < section id ="sec-json-structures ">
52
+ < h3 > JSON Structures</ h3 >
53
+
54
+ < p >
55
+ A < dfn > SMPTE JSON structure</ dfn > is any data structure that (a) is specified by an
56
+ Engineering Document and (b) conforms to < a
57
+ href ="#bib-ietf-rfc-8259 "> </ a > (i.e., a JSON document), whether within
58
+ the prose or as an Additional Element.
59
+ </ p >
60
+
61
+ < p >
62
+ The structure of each < a > SMPTE JSON structure</ a > shall be normatively specified
63
+ the Engineering Document.
64
+ </ p >
65
+ < p >
66
+ Each SMPTE JSON structure should be informatively specified by a JSON Schema
67
+ resource, which may be a SMPTE JSON Schema resource (see section 5), using
68
+ the JSON Schema language as specified in < a href ="#bib-draft-bhutton-json-schema-00 "> </ a > .
69
+ </ p >
70
+ </ section >
71
+
72
+ </ section >
73
+
74
+ < section id ="sec-smpte-json-schema-resources ">
75
+ < h2 > SMPTE JSON Schema resources</ h2 >
76
+
77
+ < section id ="sec-introduction ">
78
+ < h3 > Introduction (informative)</ h3 >
79
+
80
+ < p > Using the formal language of JSON Schema, descriptions of conformance
81
+ requirements for JSON structures can avoid some of the ambiguity inherent with
82
+ using English prose alone, while allowing the use of existing commercial tools
83
+ to facilitate testing and validation. It can also represent a significant
84
+ convenience to implementers, for example by supporting the ability to
85
+ automatically validate structures.</ p >
86
+
87
+ < p > Sample relative link to a < a href ="sample.png "> picture</ a > .</ p >
88
+
89
+ </ section >
90
+
91
+ < section id ="sec-canonical-uri ">
92
+ < h3 > Canonical URI</ h3 >
93
+
94
+ < section id ="sec-id-keyword ">
95
+ < h4 > < code > $id</ code > Keyword</ h4 >
96
+
97
+ < p > A SMPTE JSON Schema resource shall use the < code > $id</ code > keyword in the root schema
98
+ object, thereby providing the canonical URI for the JSON root schema.</ p >
99
+ </ section >
100
+
101
+ < section id ="sec-canonical-uri-syntax ">
102
+ < h4 > Canonical URI Syntax</ h4 >
103
+
104
+ The canonical URI shall conform to the < code > SCHEMAID</ code > syntax below,
105
+ specified using < a href ="#bib-ietf-rfc-5234 "> </ a > and < a
106
+ href ="#bib-ietf-rfc-7405 "> </ a > and conforming to < a
107
+ href ="#bib-ietf-rfc-3986 "> </ a > .
108
+
109
+ < pre >
110
+ SCHEMAID = %s"https://www.smpte-ra.org/json-schema/" PUBNUM "/" REVISION [ "/" SHORTNAME]
111
+ SHORTNAME = 1*4("/" 1*(ALPHA / DIGIT / "-" / "_" / ".") )
112
+ PUBNUM = 1*(DIGIT) ["-" 1*(DIGIT)]
113
+ REVISION = STABLEREV
114
+ STABLEREV = 4(DIGIT) [2(DIGIT)]
115
+ </ pre >
116
+
117
+ < p > < code > PUBNUM</ code > shall represent the official publication number of the
118
+ Engineering Document, without leading zeroes and including a part number, if
119
+ any, separated by a hyphen, e.g., 456-1.</ p >
120
+
121
+ < p class ="note "> The < code > REVISION</ code > component of a stable SMPTE JSON
122
+ Schema canonical URI does not necessarily correspond to the publication
123
+ date of its defining Engineering Document. For instance, the defining
124
+ Engineering Document can be revised in such a way that the contents of the
125
+ JSON Schema remain unchanged.</ p >
126
+
127
+ < p class ="note ">
128
+ No changes to SMPTE JSON Schema canonical URI are necessary following a Draft
129
+ Publication ballot since SMPTE JSON Schema canonical URI are constructed
130
+ independently of the publication date of the Engineering Document.
131
+ </ p >
132
+ </ section >
133
+
134
+ < section id ="sec-examples ">
135
+ < h4 > Examples (informative)</ h4 >
136
+ The following is an example SMPTE JSON Schema resource canonical URI:
137
+
138
+ < pre > https://www.smpte-ra.org/json-schema/456/2021/foo</ pre >
139
+
140
+ < p > < a href ="#table-examples "> </ a > lists examples.</ p >
141
+
142
+ < table id ="table-examples ">
143
+ < caption > Examples</ caption >
144
+ < thead >
145
+ < tr >
146
+ < th > Name</ th >
147
+ < th > URI</ th >
148
+ </ tr >
149
+ </ thead >
150
+ < tbody >
151
+ < tr >
152
+ < td > Hello</ td >
153
+ < td > https://www.smpte-ra.org/json-schema/456/2021/foo</ td >
154
+ </ tr >
155
+ </ tbody >
156
+ </ table >
157
+ </ section >
158
+
159
+ < section id ="sec-registration ">
160
+ < h4 > Registration (informative)</ h4 >
161
+
162
+ < p >
163
+ The SMPTE JSON Schema resource canonical URI syntax ensures uniqueness across
164
+ Engineering Documents, and thus no specific registration steps are required.
165
+ </ p >
166
+
167
+ < p > < a href ="#figure-process-flowchart "> </ a > shows an example of the process.</ p >
168
+
169
+ < figure id ="figure-process-flowchart ">
170
+ < figcaption > Example of the Process</ figcaption >
171
+ < img class ="figure " src ="sample.png ">
172
+ </ figure >
173
+
174
+ </ section >
175
+ </ section >
176
+
177
+ < section id ="sec-using-a-smpte-json-schema-resource ">
178
+ < h3 > Using a SMPTE JSON Schema Resource</ h3 >
179
+
180
+ < p > A SMPTE JSON Schema resource can be used informatively by an Engineering
181
+ Document, either by inclusion or by reference.</ p >
182
+
183
+ < p class ="note "> The current specification of JSON Schema, though well-supported, is not a
184
+ normatively referenceable document per the Standards Operations Manual (section
185
+ 10 Normative References) and AG-03. Thus, provision of SMPTE JSON Schema
186
+ resources, at this time, is strictly informative.</ p >
187
+ </ section >
188
+
189
+ < section id ="sec-version ">
190
+ < h3 > Version</ h3 >
191
+
192
+ < p >
193
+ Whenever a SMPTE JSON Schema resource is provided, the Engineering Document
194
+ shall provide an informative reference to the JSON Schema language specification
195
+ to which it conforms (e.g., JSON Schema, as shown in the Bibliography).
196
+ </ p >
197
+
198
+ < p >
199
+ A SMPTE JSON Schema resource shall use the < code > $schema</ code > keyword in the root schema
200
+ object.
201
+ </ p >
202
+
203
+ < p class ="note ">
204
+ the < code > $schema</ code > keyword is both used as JSON Schema dialect identifier and
205
+ as the identifier of a resource which is itself a JSON Schema resource to
206
+ evaluate conformance to that dialect.
207
+ </ p >
208
+
209
+ < p class ="note ">
210
+ JSON Schema resources can comprise subschemas, where portions of a root
211
+ schema document are separately identifiable by a URI-reference that are not
212
+ absolute and/or contain non-empty fragments. For example,
213
+ < code > https://smpte-ra.org/schemas/2120-2/2021/smpte-tlx-items/definitions/rationalType</ code >
214
+ is a reference to a subschema within the SMPTE JSON Schema resource
215
+ < code > https://smpte-ra.org/schemas/2120-2/2021/smpte-tlx-items</ code >
216
+ where the subschema represents the constraints for a JSON structure
217
+ representing a rational value.
218
+ </ p >
219
+
220
+ </ section >
221
+
222
+ < section id ="sec-keyword-order ">
223
+ < h3 > Keyword Order</ h3 >
224
+
225
+ < p > The following keywords should appear as the first keywords in any SMPTE JSON Schema resource in this order:</ p >
226
+
227
+ < ul >
228
+ < li > < code > $schema,</ code > as specified in < a href ="#sec-version "> </ a > </ li >
229
+ < li > < code > $id,</ code > as specified in < a href ="#sec-id-keyword "> </ a > ; and,</ li >
230
+ < li > < code > $comment,</ code > as specified in < a
231
+ href ="#sec-cc-license-schema-resources "> </ a > .</ li >
232
+ </ ul >
233
+
234
+ </ section >
235
+ </ section >
236
+
237
+ < section id ="sec-copyright-and-license ">
238
+ < h2 > Copyright and License</ h2 >
239
+
240
+ < section id ="sec-license ">
241
+ < h3 > License</ h3 >
242
+
243
+ < p >
244
+ Any SMPTE JSON structure or SMPTE JSON Schema resource, whether provided within
245
+ the prose or as an Additional Element of an Engineering Document, shall be
246
+ licensed according to < a href ="#sec-json-document-license "> </ a > .
247
+ </ p >
248
+
249
+ < p class ="note ">
250
+ The license portion of Annex A is verbatim the BSD-3-Clause license
251
+ available at < a > https://spdx.org/licenses/BSD-3-Clause.html</ a > .
252
+ </ p >
253
+ </ section >
254
+
255
+ < section id ="sec-cc-license-schema-resources ">
256
+ < h3 > Copyright and License in SMPTE JSON Schema resources</ h3 >
257
+
258
+ Any SMPTE JSON Schema resource shall include the copyright and license
259
+ provided in < a href ="#sec-json-document-license "> </ a > in the form of the
260
+ < code > $comment</ code > element specified in < a href ="#sec-license-element "> </ a > .
261
+ </ section >
262
+ </ section >
263
+
264
+ < section class ="annex " id ="sec-json-document-license ">
265
+ < h2 > JSON Document License</ h2 >
266
+
267
+ < section id ="sec-copyright-element ">
268
+ < h3 > Copyright Element</ h3 >
269
+ < pre >
270
+ Copyright (c), Society of Motion Pictures and Television Engineers.
271
+
272
+ Redistribution and use in source and binary forms, with or without modification,
273
+ are permitted provided that the following conditions are met:
274
+ </ pre >
275
+ < p > < a href ="#table-copyright-forms "> </ a > lists copyright forms.</ p >
276
+ < table id ="table-copyright-forms ">
277
+ < caption > Copyright Forms</ caption >
278
+ < thead >
279
+ < tr >
280
+ < th > Name</ th >
281
+ </ tr >
282
+ </ thead >
283
+ < tbody >
284
+ < tr >
285
+ < td > (c)</ td >
286
+ </ tr >
287
+ < tr >
288
+ < td > ©</ td >
289
+ </ tr >
290
+ </ tbody >
291
+ </ table >
292
+ </ section >
293
+
294
+ < section id ="sec-license-element ">
295
+ < h3 > License Element</ h3 >
296
+
297
+ < p > The following example JSON Schema incorporates the above element in
298
+ accordance with < a href ="#sec-cc-license-schema-resources "> </ a > , with the initial
299
+ keyword order recommended in < a href ="#sec-keyword-order "> </ a > .</ p >
300
+
301
+ < pre >
302
+ {
303
+ "$schema": "https://json-schema.org/draft/2020-12/meta/core",
304
+ "$id": "https://smpte-ra.org/json-schema/2199-1/2022/foo",
305
+ "$comment": "Copyright (c), Society of Motion Pictures and Television Engineers. Licensed under BSD-3-Clause (https://spdx.org/licenses/BSD-3-Clause.html).",
306
+ "title": "foo",
307
+ "type": "object",
308
+ "description": "This is an example schema for a fictitious foo object.",
309
+ "examples": [
310
+ {
311
+ "bar": "zyzx"
312
+ }
313
+ }
314
+ </ pre >
315
+
316
+ </ section >
317
+ </ section >
318
+
319
+ < section id ="sec-bibliographic-references ">
320
+ < ul >
321
+ < li > < cite id ="bib-draft-bhutton-json-schema-00 "> IETF
322
+ draft-bhutton-json-schema-00</ cite > , Wright, A., H. Andrews; B. Hutton, G.
323
+ Dennis, "JSON Schema: A Media Type for Describing JSON Documents", Work in
324
+ Progress, December 8, 2020.
325
+ < a > https://datatracker.ietf.org/doc/html/draft-bhutton-json-schema-00</ a >
326
+ </ li >
327
+ </ ul >
328
+ </ section >
329
+
330
+ </ body >
331
+
332
+ </ html >
0 commit comments