draft-ietf-cellar-ebml-12.txt   draft-ietf-cellar-ebml-13.txt 
cellar S. Lhomme cellar S. Lhomme
Internet-Draft D. Rice Internet-Draft D. Rice
Intended status: Standards Track M. Bunkus Intended status: Standards Track M. Bunkus
Expires: 23 April 2020 21 October 2019 Expires: 24 April 2020 22 October 2019
Extensible Binary Meta Language Extensible Binary Meta Language
draft-ietf-cellar-ebml-12 draft-ietf-cellar-ebml-13
Abstract Abstract
This document defines the Extensible Binary Meta Language (EBML) This document defines the Extensible Binary Meta Language (EBML)
format as a generalized file format for any type of data in a format as a generalized file format for any type of data in a
hierarchical form. EBML is designed as a binary equivalent to XML hierarchical form. EBML is designed as a binary equivalent to XML
and uses a storage-efficient approach to build nested Elements with and uses a storage-efficient approach to build nested Elements with
identifiers, lengths, and values. Similar to how an XML Schema identifiers, lengths, and values. Similar to how an XML Schema
defines the structure and semantics of an XML Document, this document defines the structure and semantics of an XML Document, this document
defines how EBML Schemas are created to convey the semantics of an defines how EBML Schemas are created to convey the semantics of an
skipping to change at page 1, line 37 skipping to change at page 1, line 37
Internet-Drafts are working documents of the Internet Engineering Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet- working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/. Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress." material or to cite them other than as "work in progress."
This Internet-Draft will expire on 23 April 2020. This Internet-Draft will expire on 24 April 2020.
Copyright Notice Copyright Notice
Copyright (c) 2019 IETF Trust and the persons identified as the Copyright (c) 2019 IETF Trust and the persons identified as the
document authors. All rights reserved. document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/ Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document. license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights Please review these documents carefully, as they describe your rights
skipping to change at page 2, line 31 skipping to change at page 2, line 31
6.3. Data Size Values . . . . . . . . . . . . . . . . . . . . 14 6.3. Data Size Values . . . . . . . . . . . . . . . . . . . . 14
7. EBML Element Types . . . . . . . . . . . . . . . . . . . . . 15 7. EBML Element Types . . . . . . . . . . . . . . . . . . . . . 15
7.1. Signed Integer Element . . . . . . . . . . . . . . . . . 15 7.1. Signed Integer Element . . . . . . . . . . . . . . . . . 15
7.2. Unsigned Integer Element . . . . . . . . . . . . . . . . 16 7.2. Unsigned Integer Element . . . . . . . . . . . . . . . . 16
7.3. Float Element . . . . . . . . . . . . . . . . . . . . . . 16 7.3. Float Element . . . . . . . . . . . . . . . . . . . . . . 16
7.4. String Element . . . . . . . . . . . . . . . . . . . . . 16 7.4. String Element . . . . . . . . . . . . . . . . . . . . . 16
7.5. UTF-8 Element . . . . . . . . . . . . . . . . . . . . . . 16 7.5. UTF-8 Element . . . . . . . . . . . . . . . . . . . . . . 16
7.6. Date Element . . . . . . . . . . . . . . . . . . . . . . 17 7.6. Date Element . . . . . . . . . . . . . . . . . . . . . . 17
7.7. Master Element . . . . . . . . . . . . . . . . . . . . . 17 7.7. Master Element . . . . . . . . . . . . . . . . . . . . . 17
7.8. Binary Element . . . . . . . . . . . . . . . . . . . . . 17 7.8. Binary Element . . . . . . . . . . . . . . . . . . . . . 17
8. EBML Document . . . . . . . . . . . . . . . . . . . . . . . . 18 8. EBML Document . . . . . . . . . . . . . . . . . . . . . . . . 17
8.1. EBML Header . . . . . . . . . . . . . . . . . . . . . . . 18 8.1. EBML Header . . . . . . . . . . . . . . . . . . . . . . . 18
8.2. EBML Body . . . . . . . . . . . . . . . . . . . . . . . . 18 8.2. EBML Body . . . . . . . . . . . . . . . . . . . . . . . . 18
9. EBML Stream . . . . . . . . . . . . . . . . . . . . . . . . . 18 9. EBML Stream . . . . . . . . . . . . . . . . . . . . . . . . . 18
10. EBML Versioning . . . . . . . . . . . . . . . . . . . . . . . 19 10. EBML Versioning . . . . . . . . . . . . . . . . . . . . . . . 18
10.1. EBML Header Version . . . . . . . . . . . . . . . . . . 19 10.1. EBML Header Version . . . . . . . . . . . . . . . . . . 19
10.2. EBML Document Version . . . . . . . . . . . . . . . . . 19 10.2. EBML Document Version . . . . . . . . . . . . . . . . . 19
11. Elements semantic . . . . . . . . . . . . . . . . . . . . . . 19 11. Elements semantic . . . . . . . . . . . . . . . . . . . . . . 19
11.1. EBML Schema . . . . . . . . . . . . . . . . . . . . . . 19 11.1. EBML Schema . . . . . . . . . . . . . . . . . . . . . . 19
11.1.1. EBML Schema Example . . . . . . . . . . . . . . . . 20 11.1.1. EBML Schema Example . . . . . . . . . . . . . . . . 20
11.1.2. <EBMLSchema> Element . . . . . . . . . . . . . . . . 20 11.1.2. <EBMLSchema> Element . . . . . . . . . . . . . . . . 21
11.1.3. <EBMLSchema> Attributes . . . . . . . . . . . . . . 20 11.1.3. <EBMLSchema> Attributes . . . . . . . . . . . . . . 21
11.1.4. <element> Element . . . . . . . . . . . . . . . . . 21 11.1.4. <element> Element . . . . . . . . . . . . . . . . . 21
11.1.5. <element> Attributes . . . . . . . . . . . . . . . . 21 11.1.5. <element> Attributes . . . . . . . . . . . . . . . . 22
11.1.6. <documentation> Element . . . . . . . . . . . . . . 28 11.1.6. <documentation> Element . . . . . . . . . . . . . . 29
11.1.7. <documentation> Attributes . . . . . . . . . . . . . 28 11.1.7. <documentation> Attributes . . . . . . . . . . . . . 29
11.1.8. <implementation_note> Element . . . . . . . . . . . 28 11.1.8. <implementation_note> Element . . . . . . . . . . . 29
11.1.9. <implementation_note> Attributes . . . . . . . . . . 28 11.1.9. <implementation_note> Attributes . . . . . . . . . . 29
11.1.10. <restriction> Element . . . . . . . . . . . . . . . 29 11.1.10. <restriction> Element . . . . . . . . . . . . . . . 30
11.1.11. <enum> Element . . . . . . . . . . . . . . . . . . . 29 11.1.11. <enum> Element . . . . . . . . . . . . . . . . . . . 30
11.1.12. <enum> Attributes . . . . . . . . . . . . . . . . . 29 11.1.12. <enum> Attributes . . . . . . . . . . . . . . . . . 30
11.1.13. <extension> Element . . . . . . . . . . . . . . . . 29 11.1.13. <extension> Element . . . . . . . . . . . . . . . . 30
11.1.14. <extension> Attributes . . . . . . . . . . . . . . . 30 11.1.14. <extension> Attributes . . . . . . . . . . . . . . . 31
11.1.15. XML Schema for EBML Schema . . . . . . . . . . . . . 30 11.1.15. XML Schema for EBML Schema . . . . . . . . . . . . . 31
11.1.16. Identically Recurring Elements . . . . . . . . . . . 30 11.1.16. Identically Recurring Elements . . . . . . . . . . . 33
11.1.17. Textual expression of floats . . . . . . . . . . . . 31 11.1.17. Textual expression of floats . . . . . . . . . . . . 34
11.1.18. Note on the use of default attributes to define 11.1.18. Note on the use of default attributes to define
Mandatory EBML Elements . . . . . . . . . . . . . . . 31 Mandatory EBML Elements . . . . . . . . . . . . . . . 35
11.2. EBML Header Elements . . . . . . . . . . . . . . . . . . 32 11.2. EBML Header Elements . . . . . . . . . . . . . . . . . . 35
11.2.1. EBML Element . . . . . . . . . . . . . . . . . . . . 32 11.2.1. EBML Element . . . . . . . . . . . . . . . . . . . . 36
11.2.2. EBMLVersion Element . . . . . . . . . . . . . . . . 33 11.2.2. EBMLVersion Element . . . . . . . . . . . . . . . . 36
11.2.3. EBMLReadVersion Element . . . . . . . . . . . . . . 33 11.2.3. EBMLReadVersion Element . . . . . . . . . . . . . . 36
11.2.4. EBMLMaxIDLength Element . . . . . . . . . . . . . . 34 11.2.4. EBMLMaxIDLength Element . . . . . . . . . . . . . . 37
11.2.5. EBMLMaxSizeLength Element . . . . . . . . . . . . . 34 11.2.5. EBMLMaxSizeLength Element . . . . . . . . . . . . . 37
11.2.6. DocType Element . . . . . . . . . . . . . . . . . . 35 11.2.6. DocType Element . . . . . . . . . . . . . . . . . . 38
11.2.7. DocTypeVersion Element . . . . . . . . . . . . . . . 35 11.2.7. DocTypeVersion Element . . . . . . . . . . . . . . . 38
11.2.8. DocTypeReadVersion Element . . . . . . . . . . . . . 35 11.2.8. DocTypeReadVersion Element . . . . . . . . . . . . . 39
11.2.9. DocTypeExtension Element . . . . . . . . . . . . . . 36 11.2.9. DocTypeExtension Element . . . . . . . . . . . . . . 39
11.2.10. DocTypeExtensionName Element . . . . . . . . . . . . 36 11.2.10. DocTypeExtensionName Element . . . . . . . . . . . . 40
11.2.11. DocTypeExtensionVersion Element . . . . . . . . . . 37 11.2.11. DocTypeExtensionVersion Element . . . . . . . . . . 40
11.3. Global Elements . . . . . . . . . . . . . . . . . . . . 37 11.3. Global Elements . . . . . . . . . . . . . . . . . . . . 41
11.3.1. CRC-32 Element . . . . . . . . . . . . . . . . . . . 38 11.3.1. CRC-32 Element . . . . . . . . . . . . . . . . . . . 41
11.3.2. Void Element . . . . . . . . . . . . . . . . . . . . 38 11.3.2. Void Element . . . . . . . . . . . . . . . . . . . . 42
12. Considerations for Reading EBML Data . . . . . . . . . . . . 39 12. Considerations for Reading EBML Data . . . . . . . . . . . . 42
13. Terminating Elements . . . . . . . . . . . . . . . . . . . . 39 13. Terminating Elements . . . . . . . . . . . . . . . . . . . . 42
14. Guidelines for Updating Elements . . . . . . . . . . . . . . 40 14. Guidelines for Updating Elements . . . . . . . . . . . . . . 43
14.1. Reducing a Element Data in Size . . . . . . . . . . . . 40 14.1. Reducing a Element Data in Size . . . . . . . . . . . . 43
14.1.1. Adding a Void Element . . . . . . . . . . . . . . . 40 14.1.1. Adding a Void Element . . . . . . . . . . . . . . . 43
14.1.2. Extending the Element Data Size . . . . . . . . . . 40 14.1.2. Extending the Element Data Size . . . . . . . . . . 43
14.1.3. Terminating Element Data . . . . . . . . . . . . . . 41 14.1.3. Terminating Element Data . . . . . . . . . . . . . . 45
14.2. Considerations when Updating Elements with Cyclic 14.2. Considerations when Updating Elements with Cyclic
Redundancy Check (CRC) . . . . . . . . . . . . . . . . . 42 Redundancy Check (CRC) . . . . . . . . . . . . . . . . . 45
15. Backward and Forward Compatibility . . . . . . . . . . . . . 42 15. Backward and Forward Compatibility . . . . . . . . . . . . . 45
15.1. Backward Compatibility . . . . . . . . . . . . . . . . . 42 15.1. Backward Compatibility . . . . . . . . . . . . . . . . . 45
15.2. Forward Compatibility . . . . . . . . . . . . . . . . . 43 15.2. Forward Compatibility . . . . . . . . . . . . . . . . . 46
16. Security Considerations . . . . . . . . . . . . . . . . . . . 43 16. Security Considerations . . . . . . . . . . . . . . . . . . . 46
17. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 44 17. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 47
17.1. CELLAR EBML Element ID Registry . . . . . . . . . . . . 44 17.1. CELLAR EBML Element ID Registry . . . . . . . . . . . . 48
17.2. CELLAR EBML DocType Registry . . . . . . . . . . . . . . 48 17.2. CELLAR EBML DocType Registry . . . . . . . . . . . . . . 51
18. Normative References . . . . . . . . . . . . . . . . . . . . 48 18. Normative References . . . . . . . . . . . . . . . . . . . . 51
19. Informative References . . . . . . . . . . . . . . . . . . . 49 19. Informative References . . . . . . . . . . . . . . . . . . . 52
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 50 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 53
1. Introduction 1. Introduction
EBML, short for Extensible Binary Meta Language, specifies a binary EBML, short for Extensible Binary Meta Language, specifies a binary
and octet (byte) aligned format inspired by the principle of XML (a and octet (byte) aligned format inspired by the principle of XML (a
framework for structuring data). framework for structuring data).
The goal of this document is to define a generic, binary, space- The goal of this document is to define a generic, binary, space-
efficient format that can be used to define more complex formats efficient format that can be used to define more complex formats
using an EBML Schema. EBML is used by the multimedia container using an EBML Schema. EBML is used by the multimedia container
skipping to change at page 7, line 37 skipping to change at page 7, line 37
Variable Size Integer. For example, a Variable Size Integer that Variable Size Integer. For example, a Variable Size Integer that
starts with a VINT_WIDTH which contains zero consecutive zero-value starts with a VINT_WIDTH which contains zero consecutive zero-value
bits is one octet in length and a Variable Size Integer that starts bits is one octet in length and a Variable Size Integer that starts
with one consecutive zero-value bit is two octets in length. The with one consecutive zero-value bit is two octets in length. The
VINT_WIDTH MUST only contain zero-value bits or be empty. VINT_WIDTH MUST only contain zero-value bits or be empty.
Within the EBML Header the VINT_WIDTH of a VINT MUST NOT exceed three Within the EBML Header the VINT_WIDTH of a VINT MUST NOT exceed three
bits in length (meaning that the Variable Size Integer MUST NOT bits in length (meaning that the Variable Size Integer MUST NOT
exceed four octets in length) except if said VINT is used to express exceed four octets in length) except if said VINT is used to express
the Element Data Size of an EBML Element with Element Name EBML and the Element Data Size of an EBML Element with Element Name EBML and
Element ID "0x1A45DFA3" (see the definition of the EBML Element Element ID "0x1A45DFA3" (see Section 11.2.1) in which case the
(#ebml-element)) in which case the VINT_WIDTH MUST NOT exceed seven VINT_WIDTH MUST NOT exceed seven bits in length. Within the EBML
bits in length. Within the EBML Body, when a VINT is used to express Body, when a VINT is used to express an Element ID, the maximum
an Element ID, the maximum length allowed for the VINT_WIDTH is one length allowed for the VINT_WIDTH is one less than the value set in
less than the value set in the EBMLMaxIDLength Element. Within the the EBMLMaxIDLength Element. Within the EBML Body, when a VINT is
EBML Body, when a VINT is used to express an Element Data Size, the used to express an Element Data Size, the maximum length allowed for
maximum length allowed for the VINT_WIDTH is one less than the value the VINT_WIDTH is one less than the value set in the
set in the EBMLMaxSizeLength Element. EBMLMaxSizeLength Element.
4.2. VINT_MARKER 4.2. VINT_MARKER
The VINT_MARKER serves as a separator between the VINT_WIDTH and The VINT_MARKER serves as a separator between the VINT_WIDTH and
VINT_DATA. Each Variable Size Integer MUST contain exactly one VINT_DATA. Each Variable Size Integer MUST contain exactly one
VINT_MARKER. The VINT_MARKER is one bit in length and contain a bit VINT_MARKER. The VINT_MARKER is one bit in length and contain a bit
with a value of one. The first bit with a value of one within the with a value of one. The first bit with a value of one within the
Variable Size Integer is the VINT_MARKER. Variable Size Integer is the VINT_MARKER.
4.3. VINT_DATA 4.3. VINT_DATA
skipping to change at page 9, line 28 skipping to change at page 9, line 28
+--------------+--------------+-----------------------+ +--------------+--------------+-----------------------+
Table 2 Table 2
5. Element ID 5. Element ID
The Element ID is encoded as a Variable Size Integer. By default, The Element ID is encoded as a Variable Size Integer. By default,
Element IDs are encoded in lengths from one octet to four octets, Element IDs are encoded in lengths from one octet to four octets,
although Element IDs of greater lengths MAY be used if the although Element IDs of greater lengths MAY be used if the
EBMLMaxIDLength Element of the EBML Header is set to a value greater EBMLMaxIDLength Element of the EBML Header is set to a value greater
than four (see the section on the EBMLMaxIDLength Element than four (see Section 11.2.4). The VINT_DATA component of the
(#ebmlmaxidlength-element)). The VINT_DATA component of the Element Element ID MUST NOT be either defined or written as either all zero
ID MUST NOT be either defined or written as either all zero values or values or all one values. Any Element ID with the VINT_DATA
all one values. Any Element ID with the VINT_DATA component set as component set as all zero values or all one values MUST be ignored.
all zero values or all one values MUST be ignored. The VINT_DATA The VINT_DATA component of the Element ID MUST be encoded at the
component of the Element ID MUST be encoded at the shortest valid shortest valid length. For example, an Element ID with binary
length. For example, an Element ID with binary encoding of "1011 encoding of "1011 1111" is valid, whereas an Element ID with binary
1111" is valid, whereas an Element ID with binary encoding of "0100 encoding of "0100 0000 0011 1111" stores a semantically equal
0000 0011 1111" stores a semantically equal VINT_DATA but is invalid VINT_DATA but is invalid because a shorter VINT encoding is possible.
because a shorter VINT encoding is possible. Additionally, an Additionally, an Element ID with binary encoding of "1111 1111" is
Element ID with binary encoding of "1111 1111" is invalid since the invalid since the VINT_DATA section is set to all one values, whereas
VINT_DATA section is set to all one values, whereas an Element ID an Element ID with binary encoding of "0100 0000 0111 1111" stores a
with binary encoding of "0100 0000 0111 1111" stores a semantically semantically equal VINT_DATA and is the shortest possible VINT
equal VINT_DATA and is the shortest possible VINT encoding. encoding.
The following table details these specific examples further: The following table details these specific examples further:
+------------+-------------+----------------+--------------------+ +------------+-------------+----------------+--------------------+
| VINT_WIDTH | VINT_MARKER | VINT_DATA | Element ID Status | | VINT_WIDTH | VINT_MARKER | VINT_DATA | Element ID Status |
+============+=============+================+====================+ +============+=============+================+====================+
| | 1 | 0000000 | Invalid: VINT_DATA | | | 1 | 0000000 | Invalid: VINT_DATA |
| | | | MUST NOT be set to | | | | | MUST NOT be set to |
| | | | all 0 | | | | | all 0 |
+------------+-------------+----------------+--------------------+ +------------+-------------+----------------+--------------------+
skipping to change at page 11, line 15 skipping to change at page 11, line 15
6. Element Data Size 6. Element Data Size
6.1. Data Size Format 6.1. Data Size Format
The Element Data Size expresses the length in octets of Element Data. The Element Data Size expresses the length in octets of Element Data.
The Element Data Size itself is encoded as a Variable Size Integer. The Element Data Size itself is encoded as a Variable Size Integer.
By default, Element Data Sizes can be encoded in lengths from one By default, Element Data Sizes can be encoded in lengths from one
octet to eight octets, although Element Data Sizes of greater lengths octet to eight octets, although Element Data Sizes of greater lengths
MAY be used if the octet length of the longest Element Data Size of MAY be used if the octet length of the longest Element Data Size of
the EBML Document is declared in the EBMLMaxSizeLength Element of the the EBML Document is declared in the EBMLMaxSizeLength Element of the
EBML Header (see the section on the EBMLMaxSizeLength Element EBML Header (see Section 11.2.5). Unlike the VINT_DATA of the
(#ebmlmaxsizelength-element)). Unlike the VINT_DATA of the Element Element ID, the VINT_DATA component of the Element Data Size is not
ID, the VINT_DATA component of the Element Data Size is not mandated mandated to be encoded at the shortest valid length. For example, an
to be encoded at the shortest valid length. For example, an Element Element Data Size with binary encoding of 1011 1111 or a binary
Data Size with binary encoding of 1011 1111 or a binary encoding of encoding of 0100 0000 0011 1111 are both valid Element Data Sizes and
0100 0000 0011 1111 are both valid Element Data Sizes and both store both store a semantically equal value (both 0b00000000111111 and
a semantically equal value (both 0b00000000111111 and 0b0111111, the 0b0111111, the VINT_DATA sections of the examples, represent the
VINT_DATA sections of the examples, represent the integer 63). integer 63).
Although an Element ID with all VINT_DATA bits set to zero is Although an Element ID with all VINT_DATA bits set to zero is
invalid, an Element Data Size with all VINT_DATA bits set to zero is invalid, an Element Data Size with all VINT_DATA bits set to zero is
allowed for EBML Element Types which do not mandate a non-zero length allowed for EBML Element Types which do not mandate a non-zero length
(see the section on EBML Element Types (#ebml-element-types)). An (see Section 7). An Element Data Size with all VINT_DATA bits set to
Element Data Size with all VINT_DATA bits set to zero indicates that zero indicates that the Element Data is zero octets in length. Such
the Element Data is zero octets in length. Such an EBML Element is an EBML Element is referred to as an Empty Element. If an Empty
referred to as an Empty Element. If an Empty Element has a default Element has a default value declared then the EBML Reader MUST
value declared then the EBML Reader MUST interpret the value of the interpret the value of the Empty Element as the default value. If an
Empty Element as the default value. If an Empty Element has no Empty Element has no default value declared then the EBML Reader MUST
default value declared then the EBML Reader MUST use the value of the use the value of the Empty Element for the corresponding EBML Element
Empty Element for the corresponding EBML Element Type of the Element Type of the Element ID, 0 for numbers and an empty string for
ID, 0 for numbers and an empty string for strings. strings.
6.2. Unknown Data Size 6.2. Unknown Data Size
An Element Data Size with all VINT_DATA bits set to one is reserved An Element Data Size with all VINT_DATA bits set to one is reserved
as an indicator that the size of the EBML Element is unknown. The as an indicator that the size of the EBML Element is unknown. The
only reserved value for the VINT_DATA of Element Data Size is all only reserved value for the VINT_DATA of Element Data Size is all
bits set to one. An EBML Element with an unknown Element Data Size bits set to one. An EBML Element with an unknown Element Data Size
is referred to as an Unknown-Sized Element. A Master Element MAY be is referred to as an Unknown-Sized Element. A Master Element MAY be
an Unknown-Sized Element; however an EBML Element that is not a an Unknown-Sized Element; however an EBML Element that is not a
Master Element MUST NOT be an Unknown-Sized Element. Master Elements Master Element MUST NOT be an Unknown-Sized Element. Master Elements
MUST NOT use an unknown size unless the unknownsizeallowed attribute MUST NOT use an unknown size unless the unknownsizeallowed attribute
of their EBML Schema is set to true (see the section on the of their EBML Schema is set to true (see Section 11.1.5.10).
unknownsizeallowed attribute (#unknownsizeallowed)).
The use of Unknown-Sized Elements allows for an EBML Element to be The use of Unknown-Sized Elements allows for an EBML Element to be
written and read before the size of the EBML Element is known. written and read before the size of the EBML Element is known.
Unknown-Sized Element MUST NOT be used or defined unnecessarily; Unknown-Sized Element MUST NOT be used or defined unnecessarily;
however if the Element Data Size is not known before the Element Data however if the Element Data Size is not known before the Element Data
is written, such as in some cases of data streaming, then Unknown- is written, such as in some cases of data streaming, then Unknown-
Sized Elements MAY be used. The end of an Unknown-Sized Element is Sized Elements MAY be used. The end of an Unknown-Sized Element is
determined by whichever comes first: determined by whichever comes first:
* Any EBML Element that is a valid Parent Element of the Unknown- * Any EBML Element that is a valid Parent Element of the Unknown-
Sized Element according to the EBML Schema, Global Elements Sized Element according to the EBML Schema, Global Elements
(#global-elements) excluded. excluded.
* Any valid EBML Element according to the EBML Schema, Global * Any valid EBML Element according to the EBML Schema, Global
Elements (#global-elements) excluded, that is not a Descendant Elements excluded, that is not a Descendant Element of the
Element of the Unknown-Sized Element but share a common direct Unknown-Sized Element but share a common direct parent, such as a
parent, such as a Top-Level Element. Top-Level Element.
* Any EBML Element that is a valid Root Element according to the * Any EBML Element that is a valid Root Element according to the
EBML Schema, Global Elements (#global-elements) excluded. EBML Schema, Global Elements excluded.
* The end of the Parent Element with a known size has been reached. * The end of the Parent Element with a known size has been reached.
* The end of the EBML Document, either when reaching the end of the * The end of the EBML Document, either when reaching the end of the
file or because a new EBML Header started. file or because a new EBML Header started.
Consider an Unknown-Sized Element which EBML path is Consider an Unknown-Sized Element which EBML path is
"\root\level1\level2\elt". When reading a new Element ID, assuming "\root\level1\level2\elt". When reading a new Element ID, assuming
the EBML Path of that new Element is valid, here are some possible the EBML Path of that new Element is valid, here are some possible
and impossible ways that this new Element is ending "elt": and impossible ways that this new Element is ending "elt":
skipping to change at page 16, line 42 skipping to change at page 16, line 42
7.4. String Element 7.4. String Element
A String Element MUST declare a length in octets from zero to A String Element MUST declare a length in octets from zero to
VINTMAX. If the EBML Element is not defined to have a default value, VINTMAX. If the EBML Element is not defined to have a default value,
then a String Element with a zero-octet length represents an empty then a String Element with a zero-octet length represents an empty
string. string.
A String Element MUST either be empty (zero-length) or contain A String Element MUST either be empty (zero-length) or contain
printable ASCII characters [RFC0020] in the range of 0x20 to 0x7E, printable ASCII characters [RFC0020] in the range of 0x20 to 0x7E,
with an exception made for termination (see the section on the with an exception made for termination (see Section 13).
Terminating Elements (#terminating-elements)).
7.5. UTF-8 Element 7.5. UTF-8 Element
A UTF-8 Element MUST declare a length in octets from zero to VINTMAX. A UTF-8 Element MUST declare a length in octets from zero to VINTMAX.
If the EBML Element is not defined to have a default value, then a If the EBML Element is not defined to have a default value, then a
UTF-8 Element with a zero-octet length represents an empty string. UTF-8 Element with a zero-octet length represents an empty string.
A UTF-8 Element contains only a valid Unicode string as defined in A UTF-8 Element contains only a valid Unicode string as defined in
[RFC3629], with an exception made for termination (see the section on [RFC3629], with an exception made for termination (see Section 13).
the Terminating Elements (#terminating-elements)).
7.6. Date Element 7.6. Date Element
A Date Element MUST declare a length of either zero octets or eight A Date Element MUST declare a length of either zero octets or eight
octets. If the EBML Element is not defined to have a default value, octets. If the EBML Element is not defined to have a default value,
then a Date Element with a zero-octet length represents a timestamp then a Date Element with a zero-octet length represents a timestamp
of 2001-01-01T00:00:00.000000000 UTC [RFC3339]. of 2001-01-01T00:00:00.000000000 UTC [RFC3339].
The Date Element stores an integer in the same format as the Signed The Date Element stores an integer in the same format as the Signed
Integer Element that expresses a point in time referenced in Integer Element that expresses a point in time referenced in
nanoseconds from the precise beginning of the third millennium of the nanoseconds from the precise beginning of the third millennium of the
Gregorian Calendar in Coordinated Universal Time (also known as Gregorian Calendar in Coordinated Universal Time (also known as
2001-01-01T00:00:00.000000000 UTC). This provides a possible 2001-01-01T00:00:00.000000000 UTC). This provides a possible
expression of time from 1708-09-11T00:12:44.854775808 UTC to expression of time from 1708-09-11T00:12:44.854775808 UTC to
2293-04-11T11:47:16.854775807 UTC. 2293-04-11T11:47:16.854775807 UTC.
7.7. Master Element 7.7. Master Element
A Master Element MUST declare a length in octets from zero to A Master Element MUST declare a length in octets from zero to
VINTMAX. The Master Element MAY also use an unknown length. See the VINTMAX. The Master Element MAY also use an unknown length. See
section on Element Data Size (#element-data-size) for rules that Section 6 for rules that apply to elements of unknown length.
apply to elements of unknown length.
The Master Element contains zero, one, or many other elements. EBML The Master Element contains zero, one, or many other elements. EBML
Elements contained within a Master Element MUST have the Elements contained within a Master Element MUST have the
EBMLParentPath of their Element Path equal to the EBMLMasterPath of EBMLParentPath of their Element Path equal to the EBMLMasterPath of
the Master Element Element Path (see the section on the EBML Path the Master Element Element Path (see Section 11.1.5.2). Element Data
(#path)). Element Data stored within Master Elements SHOULD only stored within Master Elements SHOULD only consist of EBML Elements
consist of EBML Elements and SHOULD NOT contain any data that is not and SHOULD NOT contain any data that is not part of an EBML Element.
part of an EBML Element. The EBML Schema identifies what Element IDs The EBML Schema identifies what Element IDs are valid within the
are valid within the Master Elements for that version of the EBML Master Elements for that version of the EBML Document Type. Any data
Document Type. Any data contained within a Master Element that is contained within a Master Element that is not part of a Child Element
not part of a Child Element MUST be ignored. MUST be ignored.
7.8. Binary Element 7.8. Binary Element
A Binary Element MUST declare a length in octets from zero to A Binary Element MUST declare a length in octets from zero to
VINTMAX. VINTMAX.
The contents of a Binary Element should not be interpreted by the The contents of a Binary Element should not be interpreted by the
EBML Reader. EBML Reader.
8. EBML Document 8. EBML Document
skipping to change at page 18, line 28 skipping to change at page 18, line 20
Document. Document.
The EBML Header documents the EBML Schema (also known as the EBML The EBML Header documents the EBML Schema (also known as the EBML
DocType) that is used to semantically interpret the structure and DocType) that is used to semantically interpret the structure and
meaning of the EBML Document. Additionally the EBML Header documents meaning of the EBML Document. Additionally the EBML Header documents
the versions of both EBML and the EBML Schema that were used to write the versions of both EBML and the EBML Schema that were used to write
the EBML Document and the versions required to read the EBML the EBML Document and the versions required to read the EBML
Document. Document.
The EBML Header MUST contain a single Master Element with an Element The EBML Header MUST contain a single Master Element with an Element
Name of EBML and Element ID of 0x1A45DFA3 (see the definition of the Name of EBML and Element ID of 0x1A45DFA3 (see Section 11.2.1) and
EBML Element (#ebml-element)) and any number of additional EBML any number of additional EBML Elements within it. The EBML Header of
Elements within it. The EBML Header of an EBML Document that uses an an EBML Document that uses an EBMLVersion of 1 MUST only contain EBML
EBMLVersion of 1 MUST only contain EBML Elements that are defined as Elements that are defined as part of this document.
part of this document.
8.2. EBML Body 8.2. EBML Body
All data of an EBML Document following the EBML Header is the EBML All data of an EBML Document following the EBML Header is the EBML
Body. The end of the EBML Body, as well as the end of the EBML Body. The end of the EBML Body, as well as the end of the EBML
Document that contains the EBML Body, is reached at whichever comes Document that contains the EBML Body, is reached at whichever comes
first: the beginning of a new EBML Header at the Root Level or the first: the beginning of a new EBML Header at the Root Level or the
end of the file. The EBML Body MUST NOT contain any data that is not end of the file. The EBML Body MUST NOT contain any data that is not
part of an EBML Element. This document defines precisely which EBML part of an EBML Element. This document defines precisely which EBML
Elements are to be used within the EBML Header, but does not name or Elements are to be used within the EBML Header, but does not name or
skipping to change at page 19, line 38 skipping to change at page 19, line 32
11.1. EBML Schema 11.1. EBML Schema
An EBML Schema is a well-formed XML Document [W3C.REC-xml-20081126] An EBML Schema is a well-formed XML Document [W3C.REC-xml-20081126]
that defines the properties, arrangement, and usage of EBML Elements that defines the properties, arrangement, and usage of EBML Elements
that compose a specific EBML Document Type. The relationship of an that compose a specific EBML Document Type. The relationship of an
EBML Schema to an EBML Document is analogous to the relationship of EBML Schema to an EBML Document is analogous to the relationship of
an XML Schema [W3C.REC-xmlschema-0-20041028] to an XML Document an XML Schema [W3C.REC-xmlschema-0-20041028] to an XML Document
[W3C.REC-xml-20081126]. An EBML Schema MUST be clearly associated [W3C.REC-xml-20081126]. An EBML Schema MUST be clearly associated
with one or more EBML Document Types. An EBML Document Type is with one or more EBML Document Types. An EBML Document Type is
identified by a string stored within the EBML Header in the DocType identified by a string stored within the EBML Header in the DocType
Element; for example matroska or webm (see the definition of the Element; for example matroska or webm (see Section 11.2.6). The
DocType Element (#doctype-element)). The DocType value for an EBML DocType value for an EBML Document Type MUST be unique and
Document Type MUST be unique and persistent. persistent.
An EBML Schema MUST declare exactly one EBML Element at Root Level An EBML Schema MUST declare exactly one EBML Element at Root Level
(referred to as the Root Element) that occurs exactly once within an (referred to as the Root Element) that occurs exactly once within an
EBML Document. The Void Element MAY also occur at Root Level but is EBML Document. The Void Element MAY also occur at Root Level but is
not a Root Element (see the definition of the Void Element (#void- not a Root Element (see Section 11.3.2).
element)).
The EBML Schema MUST document all Elements of the EBML Body. The The EBML Schema MUST document all Elements of the EBML Body. The
EBML Schema does not document Global Elements (#global-elements) that EBML Schema does not document Global Elements that are defined by
are defined by this document (namely the Void Element and the CRC-32 this document (namely the Void Element and the CRC-32 Element).
Element).
The EBML Schema MUST NOT use the Element ID "0x1A45DFA3" which is The EBML Schema MUST NOT use the Element ID "0x1A45DFA3" which is
reserved for the EBML Header for resynchronization purpose. reserved for the EBML Header for resynchronization purpose.
An EBML Schema MAY constrain the use of EBML Header Elements (see An EBML Schema MAY constrain the use of EBML Header Elements (see
EBML Header Elements (#ebml-header-elements)) by adding or Section 11.2) by adding or constraining that Element's "range"
constraining that Element's "range" attribute. For example, an EBML attribute. For example, an EBML Schema MAY constrain the
Schema MAY constrain the EBMLMaxSizeLength to a maximum value of "8" EBMLMaxSizeLength to a maximum value of "8" or MAY constrain the
or MAY constrain the EBMLVersion to only support a value of "1". If EBMLVersion to only support a value of "1". If an EBML Schema adopts
an EBML Schema adopts the EBML Header Element as-is, then it is not the EBML Header Element as-is, then it is not required to document
required to document that Element within the EBML Schema. If an EBML that Element within the EBML Schema. If an EBML Schema constrains
Schema constrains the range of an EBML Header Element, then that the range of an EBML Header Element, then that Element MUST be
Element MUST be documented within an "<element>" node of the EBML documented within an "<element>" node of the EBML Schema. This
Schema. This document provides an example of an EBML Schema, see document provides an example of an EBML Schema, see Section 11.1.1.
EBML Schema Example (#ebml-schema-example).
11.1.1. EBML Schema Example 11.1.1. EBML Schema Example
<?xml version="1.0" encoding="utf-8"?> <EBMLSchema xmlns="https://ietf.org/cellar/ebml" docType="files-in-ebml-demo" version="1"> <!-- constraints to the range of two EBML Header Elements --> <element name="EBMLReadVersion" path="1*1(\EBML\EBMLReadVersion)" id="0x42F7" minOccurs="1" maxOccurs="1" range="1" default="1" type="uinteger"/> <element name="EBMLMaxSizeLength" path="1*1(\EBML\EBMLMaxSizeLength)" id="0x42F3" minOccurs="1" maxOccurs="1" range="8" default="8" type="uinteger"/> <!-- Root Element--> <element name="Files" path="*1(\Files)" id="0x1946696C" type="master"> <documentation lang="en" purpose="definition">Container of data and attributes representing one or many files.</documentation> </element> <element name="File" path="1*(\Files\File)" id="0x6146" type="master" minOccurs="1"> <documentation lang="en" purpose="definition"> An attached file. </documentation> </element> <element name="FileName" path="1*1(\Files\File\FileName)" id="0x614E" type="utf-8" minOccurs="1"> <documentation lang="en" purpose="definition"> Filename of the attached file. </documentation> </element> <element name="MimeType" path="1*1(\Files\File\MimeType)" id="0x464D" type="string" minOccurs="1"> <documentation lang="en" purpose="definition"> MIME type of the file. </documentation> </element> <element name="ModificationTimestamp" path="1*1(\Files\File\ModificationTimestamp)" id="0x4654" type="date" minOccurs="1"> <documentation lang="en" purpose="definition"> Modification timestamp of the file. </documentation> </element> <element name="Data" path="1*1(\Files\File\Data)" id="0x4664" type="binary" minOccurs="1"> <documentation lang="en" purpose="definition"> The data of the file. </documentation> </element> </EBMLSchema> <?xml version="1.0" encoding="utf-8"?>
<EBMLSchema xmlns="https://ietf.org/cellar/ebml"
docType="files-in-ebml-demo" version="1">
<!-- constraints to the range of two EBML Header Elements -->
<element name="EBMLReadVersion" path="1*1(\EBML\EBMLReadVersion)"
id="0x42F7" minOccurs="1" maxOccurs="1" range="1" default="1"
type="uinteger"/>
<element name="EBMLMaxSizeLength"
path="1*1(\EBML\EBMLMaxSizeLength)" id="0x42F3" minOccurs="1"
maxOccurs="1" range="8" default="8" type="uinteger"/>
<!-- Root Element-->
<element name="Files" path="*1(\Files)" id="0x1946696C"
type="master">
<documentation lang="en" purpose="definition">Container of data and
attributes representing one or many files.</documentation>
</element>
<element name="File" path="1*(\Files\File)" id="0x6146"
type="master" minOccurs="1">
<documentation lang="en" purpose="definition">
An attached file.
</documentation>
</element>
<element name="FileName" path="1*1(\Files\File\FileName)"
id="0x614E" type="utf-8"
minOccurs="1">
<documentation lang="en" purpose="definition">
Filename of the attached file.
</documentation>
</element>
<element name="MimeType" path="1*1(\Files\File\MimeType)"
id="0x464D" type="string"
minOccurs="1">
<documentation lang="en" purpose="definition">
MIME type of the file.
</documentation>
</element>
<element name="ModificationTimestamp"
path="1*1(\Files\File\ModificationTimestamp)" id="0x4654"
type="date" minOccurs="1">
<documentation lang="en" purpose="definition">
Modification timestamp of the file.
</documentation>
</element>
<element name="Data" path="1*1(\Files\File\Data)" id="0x4664"
type="binary" minOccurs="1">
<documentation lang="en" purpose="definition">
The data of the file.
</documentation>
</element>
</EBMLSchema>
11.1.2. <EBMLSchema> Element 11.1.2. <EBMLSchema> Element
As an XML Document, the EBML Schema MUST use "<EBMLSchema>" as the As an XML Document, the EBML Schema MUST use "<EBMLSchema>" as the
top level element. The "<EBMLSchema>" element can contain top level element. The "<EBMLSchema>" element can contain
"<element>" sub-elements. "<element>" sub-elements.
11.1.3. <EBMLSchema> Attributes 11.1.3. <EBMLSchema> Attributes
Within an EBML Schema the "<EBMLSchema>" element uses the following Within an EBML Schema the "<EBMLSchema>" element uses the following
skipping to change at page 21, line 8 skipping to change at page 21, line 48
EBML Schema documents all versions of a docType's definition rather EBML Schema documents all versions of a docType's definition rather
than using separate EBML Schemas for each version of a docType. EBML than using separate EBML Schemas for each version of a docType. EBML
Elements may be introduced and deprecated by using the minver and Elements may be introduced and deprecated by using the minver and
maxver attributes of "<element>". maxver attributes of "<element>".
The version attribute is REQUIRED within the "<EBMLSchema>" Element. The version attribute is REQUIRED within the "<EBMLSchema>" Element.
11.1.4. <element> Element 11.1.4. <element> Element
Each "<element>" defines one EBML Element through the use of several Each "<element>" defines one EBML Element through the use of several
attributes that are defined in EBML Schema Element Attributes attributes that are defined in Section 11.1.3. EBML Schemas MAY
(#ebmlschema-attributes). EBML Schemas MAY contain additional contain additional attributes to extend the semantics but MUST NOT
attributes to extend the semantics but MUST NOT conflict with the conflict with the definitions of the "<element>" attributes defined
definitions of the "<element>" attributes defined within this within this document.
document.
The "<element>" nodes contain a description of the meaning and use of The "<element>" nodes contain a description of the meaning and use of
the EBML Element stored within one or more "<documentation>" sub- the EBML Element stored within one or more "<documentation>" sub-
elements, followed by optional "<implementation_note>" sub-elements, elements, followed by optional "<implementation_note>" sub-elements,
followed by zero or one "<restriction>" sub-element, followed by followed by zero or one "<restriction>" sub-element, followed by
optional "<extension>" sub-elements. All "<element>" nodes MUST be optional "<extension>" sub-elements. All "<element>" nodes MUST be
sub-elements of the "<EBMLSchema>". sub-elements of the "<EBMLSchema>".
11.1.5. <element> Attributes 11.1.5. <element> Attributes
skipping to change at page 22, line 5 skipping to change at page 23, line 5
The path defines the allowed storage locations of the EBML Element The path defines the allowed storage locations of the EBML Element
within an EBML Document. This path MUST be defined with the full within an EBML Document. This path MUST be defined with the full
hierarchy of EBML Elements separated with a "\". The top EBML hierarchy of EBML Elements separated with a "\". The top EBML
Element in the path hierarchy being the first in the value. The Element in the path hierarchy being the first in the value. The
syntax of the path attribute is defined using this Augmented Backus- syntax of the path attribute is defined using this Augmented Backus-
Naur Form (ABNF) [RFC5234] with the case sensitive update [RFC7405] Naur Form (ABNF) [RFC5234] with the case sensitive update [RFC7405]
notation: notation:
The path attribute is REQUIRED. The path attribute is REQUIRED.
EBMLFullPath = EBMLEltOccurrence "(" EBMLMasterPath ")" EBMLFullPath = EBMLEltOccurrence "(" EBMLMasterPath ")"
EBMLMasterPath = [EBMLParentPath] EBMLElementPath EBMLMasterPath = [EBMLParentPath] EBMLElementPath
EBMLParentPath = EBMLFixedParent EBMLLastParent EBMLParentPath = EBMLFixedParent EBMLLastParent
EBMLFixedParent = *(EBMLPathAtom) EBMLFixedParent = *(EBMLPathAtom)
EBMLElementPath = EBMLPathAtom / EBMLPathAtomRecursive EBMLElementPath = EBMLPathAtom / EBMLPathAtomRecursive
EBMLPathAtom = PathDelimiter EBMLAtomName EBMLPathAtom = PathDelimiter EBMLAtomName
EBMLPathAtomRecursive = "(1*(" EBMLPathAtom "))" EBMLPathAtomRecursive = "(1*(" EBMLPathAtom "))"
EBMLLastParent = EBMLPathAtom / EBMLGlobalParent EBMLLastParent = EBMLPathAtom / EBMLGlobalParent
EBMLGlobalParent = "(" GlobalParentOccurence "\)" EBMLGlobalParent = "(" GlobalParentOccurence "\)"
EBMLAtomName = 1*(EBMLNameChar) EBMLAtomName = 1*(EBMLNameChar)
EBMLNameChar = ALPHA / DIGIT / "-" / "." EBMLNameChar = ALPHA / DIGIT / "-" / "."
PathDelimiter = "\" PathDelimiter = "\"
EBMLEltOccurrence = [EBMLMinOccurrence] "*" [EBMLMaxOccurrence] EBMLEltOccurrence = [EBMLMinOccurrence] "*" [EBMLMaxOccurrence]
EBMLMinOccurrence = 1*DIGIT ; no upper limit EBMLMinOccurrence = 1*DIGIT ; no upper limit
EBMLMaxOccurrence = 1*DIGIT ; no upper limit EBMLMaxOccurrence = 1*DIGIT ; no upper limit
GlobalParentOccurence = [PathMinOccurrence] "*" [PathMaxOccurrence] GlobalParentOccurence = [PathMinOccurrence] "*" [PathMaxOccurrence]
PathMinOccurrence = 1*DIGIT ; no upper limit PathMinOccurrence = 1*DIGIT ; no upper limit
PathMaxOccurrence = 1*DIGIT ; no upper limit PathMaxOccurrence = 1*DIGIT ; no upper limit
The "*", "(" and ")" symbols are interpreted as defined in [RFC5234]. The "*", "(" and ")" symbols are interpreted as defined in [RFC5234].
The EBMLPathAtom part of the EBMLElementPath MUST be equal to the The EBMLPathAtom part of the EBMLElementPath MUST be equal to the
name attribute of the EBML Schema. name attribute of the EBML Schema.
The starting PathDelimiter of the path corresponds to the root of the The starting PathDelimiter of the path corresponds to the root of the
EBML Document. EBML Document.
The EBMLEltOccurrence part is interpreted as an ABNF Variable The EBMLEltOccurrence part is interpreted as an ABNF Variable
skipping to change at page 22, line 47 skipping to change at page 23, line 47
occurrences of this EBML Element within its Parent Element. Each occurrences of this EBML Element within its Parent Element. Each
instance of the Parent Element MUST contain at least this many instance of the Parent Element MUST contain at least this many
instances of this EBML Element. If the EBML Element has an empty instances of this EBML Element. If the EBML Element has an empty
EBMLParentPath then EBMLMinOccurrence refers to constraints on the EBMLParentPath then EBMLMinOccurrence refers to constraints on the
occurrence of the EBML Element within the EBML Document. If occurrence of the EBML Element within the EBML Document. If
EBMLMinOccurrence is not present then that EBML Element has an EBMLMinOccurrence is not present then that EBML Element has an
EBMLMinOccurrence value of 0. The semantic meaning of EBMLMinOccurrence value of 0. The semantic meaning of
EBMLMinOccurrence within an EBML Schema is analogous to the meaning EBMLMinOccurrence within an EBML Schema is analogous to the meaning
of minOccurs within an XML Schema. EBML Elements with of minOccurs within an XML Schema. EBML Elements with
EBMLMinOccurrence set to "1" that also have a default value (see EBMLMinOccurrence set to "1" that also have a default value (see
default (#default)) declared are not REQUIRED to be stored but are Section 11.1.5.8) declared are not REQUIRED to be stored but are
REQUIRED to be interpreted, see Note on the Use of default attributes REQUIRED to be interpreted, see Section 11.1.18. An EBML Element
to define Mandatory EBML Elements (#note-on-the-use-of-default-
attributes-to-define-mandatory-ebml-elements). An EBML Element
defined with a EBMLMinOccurrence value greater than zero is called a defined with a EBMLMinOccurrence value greater than zero is called a
Mandatory EBML Element. Mandatory EBML Element.
The EBMLMaxOccurrence represents the maximum permitted number of The EBMLMaxOccurrence represents the maximum permitted number of
occurrences of this EBML Element within its Parent Element. Each occurrences of this EBML Element within its Parent Element. Each
instance of the Parent Element MUST contain at most this many instance of the Parent Element MUST contain at most this many
instances of this EBML Element. If the EBML Element has an empty instances of this EBML Element. If the EBML Element has an empty
EBMLParentPath then EBMLMaxOccurrence refers to constraints on the EBMLParentPath then EBMLMaxOccurrence refers to constraints on the
occurrence of the EBML Element within the EBML Document. If occurrence of the EBML Element within the EBML Document. If
EBMLMaxOccurrence is not present then there is no upper bound for the EBMLMaxOccurrence is not present then there is no upper bound for the
permitted number of occurrences of this EBML Element within its permitted number of occurrences of this EBML Element within its
Parent Element resp. within the EBML Document depending on whether Parent Element resp. within the EBML Document depending on whether
the EBMLParentPath of the EBML Element is empty or not. The semantic the EBMLParentPath of the EBML Element is empty or not. The semantic
meaning of EBMLMaxOccurrence within an EBML Schema path is analogous meaning of EBMLMaxOccurrence within an EBML Schema path is analogous
to the meaning of maxOccurs within an XML Schema. to the meaning of maxOccurs within an XML Schema.
In some cases the EBMLLastParent part of the path is an In some cases the EBMLLastParent part of the path is an
EBMLGlobalParent. A path with a EBMLGlobalParent defines a Global EBMLGlobalParent. A path with a EBMLGlobalParent defines a
Element (#global-elements). Any path that starts with the Section 11.3. Any path that starts with the EBMLFixedParent of the
EBMLFixedParent of the Global Element and matches the occurrences Global Element and matches the occurrences found in the
found in the GlobalParentOccurence is a valid path for the Global GlobalParentOccurence is a valid path for the Global Element.
Element.
The GlobalParentOccurence part is interpreted as an ABNF Variable The GlobalParentOccurence part is interpreted as an ABNF Variable
Repetition. The repetition amounts correspond to the amount of Repetition. The repetition amounts correspond to the amount of
unspecified Parent Element levels there can be between the unspecified Parent Element levels there can be between the
EBMLFixedParent and the actual EBMLElementPath. EBMLFixedParent and the actual EBMLElementPath.
PathMinOccurrence represents the minimum number of element path PathMinOccurrence represents the minimum number of element path
required between the EBMLFixedParent and the Global Element required between the EBMLFixedParent and the Global Element
EBMLElementPath. For example 0 means the EBMLElementPath can be EBMLElementPath. For example 0 means the EBMLElementPath can be
right after the EBMLFixedParent, 1 means there has to be at least an right after the EBMLFixedParent, 1 means there has to be at least an
skipping to change at page 23, line 48 skipping to change at page 24, line 47
PathMaxOccurrence represents the maximum number of element path PathMaxOccurrence represents the maximum number of element path
possible between the EBMLFixedParent and the Global Element possible between the EBMLFixedParent and the Global Element
EBMLElementPath. It cannot have the value 0 as it would be the EBMLElementPath. It cannot have the value 0 as it would be the
Global Element can only be found right after the EBMLFixedParent, in Global Element can only be found right after the EBMLFixedParent, in
which case it's not a Global Element anymore. If PathMaxOccurrence which case it's not a Global Element anymore. If PathMaxOccurrence
is not present then there is no upper bound for the permitted number is not present then there is no upper bound for the permitted number
of occurrences of element path possible between the EBMLFixedParent of occurrences of element path possible between the EBMLFixedParent
and the Global Element EBMLElementPath. and the Global Element EBMLElementPath.
If the path contains an EBMLPathAtomRecursive part, the EBML Element If the path contains an EBMLPathAtomRecursive part, the EBML Element
can occur within itself recursively (see the recursive attribute can occur within itself recursively (see Section 11.1.5.11).
(#recursive)).
As an example, a "path" of "1*(\Segment\Info)" means the element Info As an example, a "path" of "1*(\Segment\Info)" means the element Info
is found inside the Segment elements at least once and with no is found inside the Segment elements at least once and with no
maximum iteration. An element SeekHead with path maximum iteration. An element SeekHead with path
"0*2(\Segment\SeekHead)" may not be found at all in its Segment "0*2(\Segment\SeekHead)" may not be found at all in its Segment
parent, once or twice but no more than that. parent, once or twice but no more than that.
11.1.5.3. id 11.1.5.3. id
The Element ID encoded as a Variable Size Integer expressed in The Element ID encoded as a Variable Size Integer expressed in
skipping to change at page 24, line 47 skipping to change at page 25, line 46
The maxOccurs attribute is OPTIONAL. If the maxOccurs attribute is The maxOccurs attribute is OPTIONAL. If the maxOccurs attribute is
not present then that EBML Element has no maximum occurrence, similar not present then that EBML Element has no maximum occurrence, similar
to unbounded in the XML world. to unbounded in the XML world.
11.1.5.6. range 11.1.5.6. range
A numerical range for EBML Elements which are of numerical types A numerical range for EBML Elements which are of numerical types
(Unsigned Integer, Signed Integer, Float, and Date). If specified (Unsigned Integer, Signed Integer, Float, and Date). If specified
the value of the EBML Element MUST be within the defined range. See the value of the EBML Element MUST be within the defined range. See
section of Expressions of range (#expression-of-range) for rules Section 11.1.5.6.1 for rules applied to expression of range values.
applied to expression of range values.
The range attribute is OPTIONAL. If the range attribute is not The range attribute is OPTIONAL. If the range attribute is not
present then any value legal for the type attribute is valid. present then any value legal for the type attribute is valid.
11.1.5.6.1. Expression of range 11.1.5.6.1. Expression of range
The range attribute MUST only be used with EBML Elements that are The range attribute MUST only be used with EBML Elements that are
either signed integer, unsigned integer, float, or date. The either signed integer, unsigned integer, float, or date. The
expression defines the upper, lower, exact or excluded value of the expression defines the upper, lower, exact or excluded value of the
EBML Element and optionally an upper boundary value combined with a EBML Element and optionally an upper boundary value combined with a
skipping to change at page 25, line 26 skipping to change at page 26, line 26
attribute value. For example "1234" means the EBML element always attribute value. For example "1234" means the EBML element always
has the value 1234. The value can be prefixed with "not" to indicate has the value 1234. The value can be prefixed with "not" to indicate
that the fixed value MUST NOT be used for that Element. For example that the fixed value MUST NOT be used for that Element. For example
"not 1234" means the Element can use all values of its type except "not 1234" means the Element can use all values of its type except
1234. 1234.
For an exclusive lower boundary the ">" sign is used and the ">=" For an exclusive lower boundary the ">" sign is used and the ">="
sign is used for an inclusive lower boundary. For example ">3" sign is used for an inclusive lower boundary. For example ">3"
meaning the Element value MUST be greater than 3 or ">=0x1p+0" meaning the Element value MUST be greater than 3 or ">=0x1p+0"
meaning the Element value MUST be greater than or equal to the meaning the Element value MUST be greater than or equal to the
floating value 1.0, see textual expression of floats (#textual- floating value 1.0, see Section 11.1.17.
expression-of-floats).
For an exclusive upper boundary the "<" sign is used and the "<=" For an exclusive upper boundary the "<" sign is used and the "<="
sign is used for an inclusive upper boundary. For example "<-2" sign is used for an inclusive upper boundary. For example "<-2"
meaning the Element value MUST be less than -2 or "<=10" meaning the meaning the Element value MUST be less than -2 or "<=10" meaning the
Element value MUST be less than or equal to the 10. Element value MUST be less than or equal to the 10.
The lower and upper bounds can be combined into an expression to form The lower and upper bounds can be combined into an expression to form
a closed boundary. The lower boundary coming first followed by the a closed boundary. The lower boundary coming first followed by the
upper boundary, separated by a comma. For example ">3,<= 20" means upper boundary, separated by a comma. For example ">3,<= 20" means
the Element value MUST be greater than 3 and less than or equal to the Element value MUST be greater than 3 and less than or equal to
skipping to change at page 26, line 11 skipping to change at page 26, line 51
first value and MUST be less than or equal to the second value. For first value and MUST be less than or equal to the second value. For
example "1-10" is equivalent to ">=1,<=10". If the upper boundary is example "1-10" is equivalent to ">=1,<=10". If the upper boundary is
negative, only the latter form MUST be used. negative, only the latter form MUST be used.
11.1.5.7. length 11.1.5.7. length
A value to express the valid length of the Element Data as written A value to express the valid length of the Element Data as written
measured in octets. The length provides a constraint in addition to measured in octets. The length provides a constraint in addition to
the Length value of the definition of the corresponding EBML Element the Length value of the definition of the corresponding EBML Element
Type. This length MUST be expressed as either a non-negative integer Type. This length MUST be expressed as either a non-negative integer
or a range (see expression of range (#expression-of-range)) that or a range (see Section 11.1.5.6.1) that consists of only non-
consists of only non-negative integers and valid operators. negative integers and valid operators.
The length attribute is OPTIONAL. If the length attribute is not The length attribute is OPTIONAL. If the length attribute is not
present for that EBML Element then that EBML Element is only limited present for that EBML Element then that EBML Element is only limited
in length by the definition of the associated EBML Element Type. in length by the definition of the associated EBML Element Type.
11.1.5.8. default 11.1.5.8. default
If an Element is mandatory (has a EBMLMinOccurrence value greater If an Element is mandatory (has a EBMLMinOccurrence value greater
than zero) but not written within its Parent Element or stored as an than zero) but not written within its Parent Element or stored as an
Empty Element, then the EBML Reader of the EBML Document MUST Empty Element, then the EBML Reader of the EBML Document MUST
semantically interpret the EBML Element as present with this semantically interpret the EBML Element as present with this
specified default value for the EBML Element. EBML Elements that are specified default value for the EBML Element. An unwritten mandatory
Master Elements MUST NOT declare a default value. EBML Elements with Element with a declared default value is semantically to that Element
a minOccurs value greater than 1 MUST NOT declare a default value. if written with the default value stored as the Element Data. EBML
Elements that are Master Elements MUST NOT declare a default value.
EBML Elements with a minOccurs value greater than 1 MUST NOT declare
a default value.
The default attribute is OPTIONAL. The default attribute is OPTIONAL.
11.1.5.9. type 11.1.5.9. type
The type MUST be set to one of the following values: "integer" The type MUST be set to one of the following values: "integer"
(signed integer), "uinteger" (unsigned integer), "float", "string", (signed integer), "uinteger" (unsigned integer), "float", "string",
"date", "utf-8", "master", or "binary". The content of each type is "date", "utf-8", "master", or "binary". The content of each type is
defined within section on EBML Element Types (#ebml-element-types). defined within Section 7.
The type attribute is REQUIRED. The type attribute is REQUIRED.
11.1.5.10. unknownsizeallowed 11.1.5.10. unknownsizeallowed
A boolean to express if an EBML Element is permitted to be Unknown- A boolean to express if an EBML Element is permitted to be Unknown-
Sized Element (having all VINT_DATA bits of Element Data Size set to Sized Element (having all VINT_DATA bits of Element Data Size set to
1). EBML Elements that are not Master Elements MUST NOT set 1). EBML Elements that are not Master Elements MUST NOT set
unknownsizeallowed to true. An EBML Element that is defined with an unknownsizeallowed to true. An EBML Element that is defined with an
unknownsizeallowed attribute set to 1 MUST also have the unknownsizeallowed attribute set to 1 MUST also have the
skipping to change at page 30, line 21 skipping to change at page 31, line 21
"<extension>" element. "<extension>" element.
The type attribute is REQUIRED. The type attribute is REQUIRED.
11.1.15. XML Schema for EBML Schema 11.1.15. XML Schema for EBML Schema
This following provides an XML Schema [W3C.REC-xmlschema-0-20041028] This following provides an XML Schema [W3C.REC-xmlschema-0-20041028]
for facilitating verification of an EBML Schema to the definition for facilitating verification of an EBML Schema to the definition
described in Section 8.1. described in Section 8.1.
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns="https://ietf.org/cellar/ebml" targetNamespace="https://ietf.org/cellar/ebml" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xhtml="http://www.w3.org/1999/xhtml" elementFormDefault="qualified" version="01"> <!-- for HTML in comments --> <xs:import namespace="http://www.w3.org/1999/xhtml" schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd"/> <xs:element name="EBMLSchema" type="EBMLSchemaType"/> <xs:complexType name="EBMLSchemaType"> <xs:sequence> <xs:element name="element" type="elementType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="docType" use="required"/> <xs:attribute name="version" use="required"/> </xs:complexType> <xs:complexType name="elementType"> <xs:sequence> <xs:element name="documentation" type="documentationType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="implementation_note" type="noteType" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="restriction" type="restrictionType" minOccurs="0" maxOccurs="1"/> <xs:element name="extension" type="extensionType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="name" use="required"/> <xs:attribute name="path" use="required"/> <xs:attribute name="id" use="required"/> <xs:attribute name="minOccurs" default="0"/> <xs:attribute name="maxOccurs" default="1"/> <xs:attribute name="range"/> <xs:attribute name="length"/> <xs:attribute name="default"/> <xs:attribute name="type" use="required"/> <xs:attribute name="unknownsizeallowed"/> <xs:attribute name="recurring"/> <xs:attribute name="minver" default="1"/> <xs:attribute name="maxver"/> </xs:complexType> <xs:complexType name="restrictionType"> <xs:sequence> <xs:element name="enum" type="enumType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:complexType name="extensionType"> <xs:sequence> <xs:any processContents="skip" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="type" use="required"/> <xs:anyAttribute processContents="skip"/> </xs:complexType> <xs:complexType name="enumType"> <xs:sequence> <xs:element name="documentation" type="documentationType" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="label"/> <xs:attribute name="value" use="required"/> </xs:complexType> <xs:complexType name="documentationType" mixed="true"> <xs:sequence> <xs:element name="a" type="xhtml:xhtml.a.type" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="br" type="xhtml:xhtml.br.type" minOccurs="0" maxOccurs="unbounded"/> <xs:element name="strong" type="xhtml:xhtml.strong.type" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> <xs:attribute name="lang"/> <xs:attribute name="purpose" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="definition"/> <xs:enumeration value="rationale"/> <xs:enumeration value="references"/> <xs:enumeration value="usage notes"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:complexType> <xs:complexType name="noteType"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="note_attribute" use="required"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="minOccurs"/> <xs:enumeration value="maxOccurs"/> <xs:enumeration value="range"/> <xs:enumeration value="length"/> <xs:enumeration value="default"/> <xs:enumeration value="minver"/> <xs:enumeration value="maxver"/> </xs:restriction> </xs:simpleType> </xs:attribute> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:schema> <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="https://ietf.org/cellar/ebml"
targetNamespace="https://ietf.org/cellar/ebml"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
elementFormDefault="qualified" version="01">
<!-- for HTML in comments -->
<xs:import namespace="http://www.w3.org/1999/xhtml"
schemaLocation="http://www.w3.org/MarkUp/SCHEMA/xhtml11.xsd"/>
<xs:element name="EBMLSchema" type="EBMLSchemaType"/>
<xs:complexType name="EBMLSchemaType">
<xs:sequence>
<xs:element name="element" type="elementType"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="docType" use="required"/>
<xs:attribute name="version" use="required"/>
</xs:complexType>
<xs:complexType name="elementType">
<xs:sequence>
<xs:element name="documentation" type="documentationType"
minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="implementation_note" type="noteType"
minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="restriction" type="restrictionType"
minOccurs="0" maxOccurs="1"/>
<xs:element name="extension" type="extensionType"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" use="required"/>
<xs:attribute name="path" use="required"/>
<xs:attribute name="id" use="required"/>
<xs:attribute name="minOccurs" default="0"/>
<xs:attribute name="maxOccurs" default="1"/>
<xs:attribute name="range"/>
<xs:attribute name="length"/>
<xs:attribute name="default"/>
<xs:attribute name="type" use="required"/>
<xs:attribute name="unknownsizeallowed"/>
<xs:attribute name="recurring"/>
<xs:attribute name="minver" default="1"/>
<xs:attribute name="maxver"/>
</xs:complexType>
<xs:complexType name="restrictionType">
<xs:sequence>
<xs:element name="enum" type="enumType"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="extensionType">
<xs:sequence>
<xs:any processContents="skip"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="type" use="required"/>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
<xs:complexType name="enumType">
<xs:sequence>
<xs:element name="documentation" type="documentationType"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="label"/>
<xs:attribute name="value" use="required"/>
</xs:complexType>
<xs:complexType name="documentationType" mixed="true">
<xs:sequence>
<xs:element name="a" type="xhtml:xhtml.a.type"
minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="br" type="xhtml:xhtml.br.type"
minOccurs="0" maxOccurs="unbounded"/>
<xs:element name="strong" type="xhtml:xhtml.strong.type"
minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="lang"/>
<xs:attribute name="purpose" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="definition"/>
<xs:enumeration value="rationale"/>
<xs:enumeration value="references"/>
<xs:enumeration value="usage notes"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<xs:complexType name="noteType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="note_attribute" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="minOccurs"/>
<xs:enumeration value="maxOccurs"/>
<xs:enumeration value="range"/>
<xs:enumeration value="length"/>
<xs:enumeration value="default"/>
<xs:enumeration value="minver"/>
<xs:enumeration value="maxver"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
11.1.16. Identically Recurring Elements 11.1.16. Identically Recurring Elements
An Identically Recurring Element is an EBML Element that MAY occur An Identically Recurring Element is an EBML Element that MAY occur
within its Parent Element more than once but that each recurrence within its Parent Element more than once but that each recurrence
within that Parent Element MUST be identical both in storage and within that Parent Element MUST be identical both in storage and
semantics. Identically Recurring Elements are permitted to be stored semantics. Identically Recurring Elements are permitted to be stored
multiple times within the same Parent Element in order to increase multiple times within the same Parent Element in order to increase
data resilience and optimize the use of EBML in transmission. For data resilience and optimize the use of EBML in transmission. For
instance a pertinent Top-Level Element could be periodically resent instance a pertinent Top-Level Element could be periodically resent
skipping to change at page 41, line 46 skipping to change at page 45, line 9
+--------+------------+-------------------+--------------+---------+ +--------+------------+-------------------+--------------+---------+
| After | 0x3B4040 | 0x82 | 0x6869 | 0xEC80 | | After | 0x3B4040 | 0x82 | 0x6869 | 0xEC80 |
+--------+------------+-------------------+--------------+---------+ +--------+------------+-------------------+--------------+---------+
Table 12 Table 12
14.1.3. Terminating Element Data 14.1.3. Terminating Element Data
For String Elements and UTF-8 Elements the length of Element Data MAY For String Elements and UTF-8 Elements the length of Element Data MAY
be reduced by adding Null Octets to terminate the Element Data (see be reduced by adding Null Octets to terminate the Element Data (see
the section on Terminating Elements (#terminating-elements)). Section 13).
In the following table, a four octets long Element Data is changed to In the following table, a four octets long Element Data is changed to
a three octet long value followed by a Null Octet; the Element Data a three octet long value followed by a Null Octet; the Element Data
Size includes any Null Octets used to terminate Element Data so Size includes any Null Octets used to terminate Element Data so
remains unchanged. remains unchanged.
+-------------+------------+-------------------+--------------+ +-------------+------------+-------------------+--------------+
| Status | Element ID | Element Data Size | Element Data | | Status | Element ID | Element Data Size | Element Data |
+=============+============+===================+==============+ +=============+============+===================+==============+
| Before edit | 0x3B4040 | 0x84 | 0x65626D6C | | Before edit | 0x3B4040 | 0x84 | 0x65626D6C |
skipping to change at page 45, line 11 skipping to change at page 48, line 15
This document creates a new IANA Registry called "CELLAR EBML Element This document creates a new IANA Registry called "CELLAR EBML Element
ID Registry". ID Registry".
Element IDs are described in section Element ID. Element IDs are Element IDs are described in section Element ID. Element IDs are
encoded using the VINT mechanism described in section Section 4 can encoded using the VINT mechanism described in section Section 4 can
be between one and five octets long. Five octet long Element IDs are be between one and five octets long. Five octet long Element IDs are
possible only if declared in the header. possible only if declared in the header.
This IANA Registry only applies to Elements that can be contained in This IANA Registry only applies to Elements that can be contained in
the EBML Header, thus including Global Elements (#global-elements). the EBML Header, thus including Global Elements. Elements only found
Elements only found in the EBML Body have their own set of in the EBML Body have their own set of independent Element IDs and
independent Element IDs and are not part of this IANA Registry. are not part of this IANA Registry.
The VINT Data value of one-octet Element IDs MUST be between 0x01 and The VINT Data value of one-octet Element IDs MUST be between 0x01 and
0x7E. These items are valuable because they are short, and need to 0x7E. These items are valuable because they are short, and need to
be used for commonly repeated elements. Values from 1 to 126 are to be used for commonly repeated elements. Values from 1 to 126 are to
be allocated according to the "RFC Required" policy [RFC8126]. be allocated according to the "RFC Required" policy [RFC8126].
The VINT Data value of two-octet Element IDs MUST be between 0x007F The VINT Data value of two-octet Element IDs MUST be between 0x007F
and 0x3FFE. Numbers are to be allocated within this range according and 0x3FFE. Numbers are to be allocated within this range according
to the "Specification Required" policy [RFC8126]. to the "Specification Required" policy [RFC8126].
skipping to change at page 48, line 15 skipping to change at page 51, line 15
17.2. CELLAR EBML DocType Registry 17.2. CELLAR EBML DocType Registry
This document creates a new IANA Registry called "CELLAR EBML DocType This document creates a new IANA Registry called "CELLAR EBML DocType
Registry". Registry".
To register a new DocType in this registry one needs a DocType name, To register a new DocType in this registry one needs a DocType name,
a Description of the DocType, a Change Controller (IESG or email of a Description of the DocType, a Change Controller (IESG or email of
registrant) and an optional Reference to a document describing the registrant) and an optional Reference to a document describing the
DocType. DocType.
DocType values are described in this section (#doctype). DocTypes DocType values are described in Section 11.1.3.1. DocTypes are ASCII
are ASCII strings, defined in the String Element section (#string- strings, defined in Section 7.4, which label the official name of the
element), which label the official name of the EBML Document Type. EBML Document Type. The strings may be allocated according to the
The strings may be allocated according to the "First Come First "First Come First Served" policy.
Served" policy.
The use of ASCII corresponds to the types and code already in use, The use of ASCII corresponds to the types and code already in use,
the value is not meant to be visible to the user. the value is not meant to be visible to the user.
DocType string values of "matroska" and "webm" are RESERVED to the DocType string values of "matroska" and "webm" are RESERVED to the
IETF for future use. These can be assigned via the "IESG Approval" IETF for future use. These can be assigned via the "IESG Approval"
or "RFC Required" policies [RFC8126]. or "RFC Required" policies [RFC8126].
18. Normative References 18. Normative References
 End of changes. 41 change blocks. 
192 lines changed or deleted 343 lines changed or added

This html diff was produced by rfcdiff 1.47. The latest version is available from http://tools.ietf.org/tools/rfcdiff/