Last modified by Helena on 2025/09/10 11:19

From version 3.1
edited by Helena
on 2025/05/16 10:56
Change comment: There is no comment for this version
To version 2.2
edited by Helena
on 2025/05/15 15:48
Change comment: Changed document title to [14 ANNEX Semantic Versioning].

Summary

Details

Page properties
Content
... ... @@ -1,6 +1,4 @@
1 -{{box title="**Contents**"}}
2 -{{toc/}}
3 -{{/box}}
1 += 14 ANNEX Semantic Versioning =
4 4  
5 5  == 14.1 Introduction to Semantic Versioning ==
6 6  
... ... @@ -8,9 +8,9 @@
8 8  
9 9  In systems with many dependencies, releasing new artefact versions can quickly become a nightmare. If the dependency specifications are too tight, you are in danger of version lock (the inability to upgrade an artefact without having to release new versions of every dependent artefact). If dependencies are specified too loosely, you will inevitably be bitten by version promiscuity (assuming compatibility with more future versions than is reasonable). Dependency hell is where you are when version lock and/or version promiscuity prevent you from easily and safely moving your data modelling forward.
10 10  
11 -As a very successful solution to the similar problem in software development, "Semantic Versioning" [[__semver.org__>>https://semver.org/]] proposes a simple set of rules and requirements that dictate how version numbers are assigned and incremented. These rules make also perfect sense in the world of versioned data modelling and help to solve the "dependency hell" encountered with previous versions of SDMX. SDMX 3.0 applies thus the Semantic Versioning rules on all versioned SDMX artefacts. Once you release a versioned SDMX artefact, you communicate changes to it with specific increments to your version number.
9 +As a very successful solution to the similar problem in software development, "Semantic Versioning" [[__semver.org__>>url:http://semver.org/]][[ >>url:http://semver.org/]]proposes a simple set of rules and requirements that dictate how version numbers are assigned and incremented. These rules make also perfect sense in the world of versioned data modelling and help to solve the "dependency hell" encountered with previous versions of SDMX. SDMX 3.0 applies thus the Semantic Versioning rules on all versioned SDMX artefacts. Once you release a versioned SDMX artefact, you communicate changes to it with specific increments to your version number.
12 12  
13 -**This SDMX 3.0(.0) specification inherits the original **[[__**semver.org**__>>https://xwiki:semver.org]]** 2.0.0 wording (license: [[__Creative Commons - CC BY 3.0__>>https://creativecommons.org/licenses/by/3.0/]]) and applies it to versioned SDMX structural artefacts.** Under this scheme, version numbers and the way they change convey meaning about the underlying data structures and what has been modified from one version to the next.
11 +**This SDMX 3.0(.0) specification inherits the original **[[__**semver.org**__>>url:https://semver.org/]]**[[ >>url:https://semver.org/]]2.0.0 wording (license: __[[Creative Commons >>url:http://creativecommons.org/licenses/by/3.0/]][[- >>url:http://creativecommons.org/licenses/by/3.0/]][[CC BY 3.0>>url:http://creativecommons.org/licenses/by/3.0/]]__[[)>>url:http://creativecommons.org/licenses/by/3.0/]] and applies it to versioned SDMX structural artefacts.** Under this scheme, version numbers and the way they change convey meaning about the underlying data structures and what has been modified from one version to the next.
14 14  
15 15  == 14.2 Semantic Versioning Specification for SDMX 3.0(.0) ==
16 16  
... ... @@ -45,7 +45,78 @@
45 45  
46 46  == 14.3 Backus–Naur Form Grammar for Valid SDMX 3.0(.0) Semantic Versions ==
47 47  
46 +|(((
47 +**<valid semver> ::= <version core>**
48 48  
49 +**| <version core> "-" <extension>**
50 +
51 +**<version core> ::= <major> "." <minor> "." <patch>**
52 +
53 +**<major> ::= <numeric identifier>**
54 +
55 +**<minor> ::= <numeric identifier>**
56 +
57 +**<patch> ::= <numeric identifier>**
58 +
59 +**<extension> ::= <dot-separated extension identifiers>**
60 +
61 +**<dot-separated extension identifiers> ::= <extension identifier>**
62 +
63 +**| <extension identifier> "." <dotseparated extension identifiers>**
64 +
65 +**<extension identifier> ::= <alphanumeric identifier>**
66 +
67 +**| <numeric identifier>**
68 +
69 +**<alphanumeric identifier> ::= <non-digit>**
70 +
71 +**| <non-digit> <identifier characters>**
72 +
73 +**| <identifier characters> <non-digit>**
74 +
75 +**| <identifier characters> <non-digit> <identifier characters>**
76 +
77 +**<numeric identifier> ::= "0"**
78 +
79 +**| <positive digit>**
80 +
81 +**| <positive digit> <digits>**
82 +
83 +**<identifier characters> ::= <identifier character>**
84 +
85 +**| <identifier character> <identifier characters>**
86 +)))
87 +
88 +**<identifier character> ::= <digit>**
89 +
90 +**| <non-digit>**
91 +
92 +**<non-digit> ::= <letter>**
93 +
94 +**| "-"**
95 +
96 +**<digits> ::= <digit>**
97 +
98 +**| <digit> <digits>**
99 +
100 +**<digit> ::= "0"**
101 +
102 +**| <positive digit>**
103 +
104 +**<positive digit> ::= "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"**
105 +
106 +**<letter> ::= "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J"**
107 +
108 +**| "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T"**
109 +
110 +**| "U" | "V" | "W" | "X" | "Y" | "Z" | "a" | "b" | "c" | "d"**
111 +
112 +**| "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n"**
113 +
114 +**| "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x"**
115 +
116 +**| "y" | "z"**
117 +
49 49  == 14.4 Dependency Management in SDMX 3.0(.0): ==
50 50  
51 51  MAJOR, MINOR or PATCH version parts in SDMX 3.0 artefact references CAN be wildcarded using "+" as extension:
... ... @@ -157,16 +157,24 @@
157 157  
158 158  One with named groups for those systems that support them (PCRE [Perl Compatible Regular Expressions, i.e. Perl, PHP and R], Python and Go).
159 159  
160 -Reduced version (without original SemVer "build metadata") from: [[__https:~~/~~/regex101.com/r/Ly7O1x/3/__https:~~/~~/regex101.com/r/Ly7O1x/3/>>https://https:regex101.comrLy7O1x3https:regex101.comrLy7O1x3]]
229 +Reduced version (without original SemVer "build metadata") from: [[__https:~~/~~/regex101.com/r/Ly7O1x/3/__>>url:https://regex101.com/r/Ly7O1x/3/]][[url:https://regex101.com/r/Ly7O1x/3/]]
161 161  
162 -^(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)(?:-(?P<extension>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?$
231 +^(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-
163 163  
233 +9]\d*)(?:-(?P<extension>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-
234 +
235 +]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?$
236 +
164 164  And one with numbered capture groups instead (so cg1 = major, cg2 = minor, cg3 = patch and cg4 = extension) that is compatible with ECMA Script (JavaScript), PCRE (Perl Compatible Regular Expressions, i.e. Perl, PHP and R), Python and Go.
165 165  
166 -Reduced version (without original SemVer "build metadata") from: [[__https:~~/~~/regex101.com/r/vkijKf/1/__https:~~/~~/regex101.com/r/vkijKf/1/>>https://https:regex101.comrvkijKf1https:regex101.comrvkijKf1]]
239 +Reduced version (without original SemVer "build metadata") from: [[__https:~~/~~/regex101.com/r/vkijKf/1/__>>url:https://regex101.com/r/vkijKf/1/]][[url:https://regex101.com/r/vkijKf/1/]]
167 167  
168 -^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?$
241 +^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-
169 169  
243 +9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-
244 +
245 +][0-9a-zA-Z-]*))*))?$
246 +
170 170  **Must I adopt semantic versioning rules when switching to SDMX 3.0?**
171 171  
172 172  No. If backwards compatibility with pre-existing tools and processes is required, then it is possible to continue using the previous versioning scheme (with up to two version parts MAJOR.MINOR). Semantic versioning is indicated only for those use cases where a proper artefact versioning is required. If versioning does not apply to some or all of your artefacts, then rather migrate to non-versioned SDMX 3.0 artefacts.
... ... @@ -193,7 +193,7 @@
193 193  
194 194  In practice, the migration approach will often mirror the way in which organisations have migrated between earlier SDMX versions. Rarely, the new data models used mixed SDMX standard versions in their dependencies, and if they did then standard conversions were put in place. A typical method is to first migrate the re-used artefacts from the previous SDMX version to SDMX 3.0 and while doing so to apply the appropriate new semantic version string. From that point onwards, you can enjoy the advantages of the new SDMX versioning features for all those artefacts that require appropriate versioning.
195 195  
196 -[[1>>path:#sdfootnote1anc||name="sdfootnote1sym"]] Regular expressions, as specified in __W3C XML Schema Definition Language (XSD)__ __1.1 Part 2: Datatypes__.
273 +[[1>>path:#sdfootnote1anc||name="sdfootnote1sym"]] Regular expressions, as specified in [[__W3C XML Schema Definition Language (XSD)__>>url:https://www.w3.org/TR/xmlschema11-2/]][[ >>url:https://www.w3.org/TR/xmlschema11-2/]][[__1.1 Part 2: Datatypes__>>url:https://www.w3.org/TR/xmlschema11-2/]][[.>>url:https://www.w3.org/TR/xmlschema11-2/]]
197 197  
198 198  [[2>>path:#sdfootnote2anc||name="sdfootnote2sym"]] The seconds can be reported fractionally
199 199