atmospheric 0.4.5 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/README.adoc +197 -134
  3. data/lib/atmospheric/export/altitude_attrs.rb +131 -82
  4. data/lib/atmospheric/export/altitude_convertable_model.rb +22 -26
  5. data/lib/atmospheric/export/altitude_table.rb +0 -2
  6. data/lib/atmospheric/export/hypsometrical_table.rb +2 -4
  7. data/lib/atmospheric/export/iso_25331975/group_one.rb +0 -3
  8. data/lib/atmospheric/export/iso_25331975/group_one_attrs.rb +38 -27
  9. data/lib/atmospheric/export/iso_25331975/group_three.rb +0 -3
  10. data/lib/atmospheric/export/iso_25331975/group_three_attrs.rb +37 -25
  11. data/lib/atmospheric/export/iso_25331975/group_two.rb +0 -3
  12. data/lib/atmospheric/export/iso_25331975/group_two_attrs.rb +43 -27
  13. data/lib/atmospheric/export/iso_25331975.rb +7 -4
  14. data/lib/atmospheric/export/iso_25331985/pressure_attrs.rb +2 -5
  15. data/lib/atmospheric/export/iso_25331985/table_five_six_attrs.rb +2 -5
  16. data/lib/atmospheric/export/iso_25331985.rb +3 -5
  17. data/lib/atmospheric/export/iso_25331997.rb +0 -2
  18. data/lib/atmospheric/export/iso_25332025/altitude_attrs_group.rb +2 -4
  19. data/lib/atmospheric/export/iso_25332025/combined_altitude_attrs_group.rb +2 -5
  20. data/lib/atmospheric/export/iso_25332025.rb +3 -3
  21. data/lib/atmospheric/export/precision_value.rb +9 -0
  22. data/lib/atmospheric/export/pressure_attrs.rb +52 -58
  23. data/lib/atmospheric/export/utils.rb +3 -1
  24. data/lib/atmospheric/export.rb +11 -5
  25. data/lib/atmospheric/namespace.rb +8 -0
  26. data/lib/atmospheric/unit_value_float.rb +2 -3
  27. data/lib/atmospheric/unit_value_integer.rb +2 -3
  28. data/lib/atmospheric/version.rb +1 -1
  29. data/lib/atmospheric.rb +7 -4
  30. metadata +8 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9b084338a6346bc02e4440ef14304456ae2f2b3fa14a0a1bbd1d332683cdb0a9
4
- data.tar.gz: 8eebfa7a90b447d868eb1fe2bf689aa2a957799a884ef3899181cfe6e4b794d1
3
+ metadata.gz: 7b75d1aad150ee5c55d447906a6e68ece88cb6623521c4e1499ef5e707ba2af1
4
+ data.tar.gz: 304e5f27c1540413da0e50e8a9e52791aa114813d02509af78ea1d0c5caf8595
5
5
  SHA512:
6
- metadata.gz: 5162c59105d0eea75bae5f513d857aa0a0c245c7b857835e7f3a94c07b00e0ba6beaac986b44540c3c081d01ce44307b57be4dd5e7549ed8906254a61e6544f5
7
- data.tar.gz: 7792ae4d76eb57082bebafa2167844d3977805b964bcd2c3839ac9df180b1102bf2e38c08a07d45b62778fb545f815bc67f0127bdd5ae12c56a08771454ceb92
6
+ metadata.gz: 90321cfb4659bbfdaf0da2a75901d3a7b1f372ee2772e15b7b375b8c03bc97b33f4df8affdfe6987ebb41cf56f07946dfdc2eaf02af2530d57a7006150a313e7
7
+ data.tar.gz: b3d47bc889077add3c9a5a0bc4429c9fdbb7d510c850600b40e8502e2fc6855c582be90c5b6ae65a59bc36fcb7e9b2e02658041ac58c14ddfe264c22c04826a2
data/README.adoc CHANGED
@@ -1,4 +1,4 @@
1
- = Atmospheric for Ruby (International Standard Atmosphere / ICAO Standard Atmosphere (ISA))
1
+ = Atmospheric for Ruby (ISO Standard Atmosphere / ICAO Standard Atmosphere (ISA))
2
2
 
3
3
  == Purpose
4
4
 
@@ -40,7 +40,7 @@ To calculate atmospheric properties, either use the formulas directly or use the
40
40
  `Atmospheric::Export::AltitudeAttrs` class to bulk obtain the values needed.
41
41
 
42
42
 
43
- === Prerequsites
43
+ === Prerequisites
44
44
 
45
45
  Include the `atmospheric` gem in your Gemfile:
46
46
 
@@ -103,29 +103,29 @@ Depending on the type of the value, it is in one of the following classes:
103
103
 
104
104
  The `AltitudeAttrs` object provides the following attributes:
105
105
 
106
- `geometric_altitude_m`:: Geometric altitude in meters.
107
- `geometric_altitude_ft`:: Geometric altitude in feet.
108
- `geopotential_altitude_m`:: Geopotential altitude in meters.
109
- `geopotential_altitude_ft`:: Geopotential altitude in feet.
110
- `temperature_k`:: Temperature in Kelvin. This value is multiplied by 1000.
111
- `temperature_c`:: Temperature in Celsius. This value is multiplied by 1000.
112
- `pressure_mbar`:: Pressure in millibar.
113
- `pressure_mmhg`:: Pressure in mmHg.
114
- `density`:: Density in kg/m^3.
115
- `acceleration`:: Acceleration in m/s^2.
116
- `ppn`:: Ratio of pressure at altitude to pressure at sea level.
117
- `rhorhon`:: Ratio of density at altitude to density at sea level.
118
- `sqrt_rhorhon`:: Square root of the ratio of density at altitude to density at sea level.
119
- `speed_of_sound`:: Speed of sound in m/s.
120
- `dynamic_viscosity`:: Dynamic viscosity in kg/(m·s).
121
- `kinematic_viscosity`:: Kinematic viscosity in m^2/s.
122
- `thermal_conductivity`:: Thermal conductivity in W/(m·K).
123
- `pressure_scale_height`:: Pressure scale height in meters.
124
- `specific_weight`:: Specific weight in N/m^3.
125
- `air_number_density`:: Air number density in particles/m^3.
126
- `mean_speed`:: Mean speed of air particles in m/s.
127
- `frequency`:: Frequency of air particle collisions in 1/s.
128
- `mean_free_path`:: Mean free path of air particles in meters.
106
+ All attributes are represented as collections (arrays) to support multiple units:
107
+
108
+ `geometric_altitudes`:: Array of geometric altitude values. Units: m, ft.
109
+ `geopotential_altitudes`:: Array of geopotential altitude values. Units: m, ft.
110
+ `temperatures`:: Array of temperature values. Units: K, degC.
111
+ `pressures`:: Array of pressure values. Units: mbar, mm_Hg.
112
+ `densities`:: Array of density values. Units: kg*m^-3.
113
+ `accelerations`:: Array of acceleration values. Units: m*s^-2.
114
+ `ppns`:: Array of pressure ratio values (unitless).
115
+ `rhorhons`:: Array of density ratio values (unitless).
116
+ `sqrt_rhorhons`:: Array of sqrt of density ratio values (unitless).
117
+ `speeds_of_sound`:: Array of speed of sound values. Units: m*s^-1.
118
+ `dynamic_viscosities`:: Array of dynamic viscosity values. Units: Pa*s.
119
+ `kinematic_viscosities`:: Array of kinematic viscosity values. Units: m^2*s^-1.
120
+ `thermal_conductivities`:: Array of thermal conductivity values. Units: W*m^-1*K^-1.
121
+ `pressure_scale_heights`:: Array of pressure scale height values. Units: m.
122
+ `specific_weights`:: Array of specific weight values. Units: N*m^-3.
123
+ `air_number_densities`:: Array of air number density values. Units: m^-3.
124
+ `mean_speeds`:: Array of mean speed values. Units: m*s^-1.
125
+ `frequencies`:: Array of frequency values. Units: s^-1.
126
+ `mean_free_paths`:: Array of mean free path values. Units: m.
127
+
128
+ Each attribute value is wrapped in `UnitValueFloat` or `UnitValueInteger` with UnitsML unit metadata.
129
129
 
130
130
  [example]
131
131
  ====
@@ -138,10 +138,15 @@ attrs = Atmospheric::Export::AltitudeAttrs.new.set_altitude(
138
138
  unit: :meters
139
139
  )
140
140
 
141
- attrs.geopotential_altitude_m #=> -2000
142
- attrs.geopotential_altitude_ft #=> -6561.68
143
- attrs.geometric_altitude_m #=> -1999
144
- attrs.geometric_altitude_ft #=> -6560
141
+ # Access collection values
142
+ attrs.geometric_altitudes[0].value #=> -1999 (meters)
143
+ attrs.geometric_altitudes[1].value #=> -6560 (feet)
144
+ attrs.geopotential_altitudes[0].value #=> -2000 (meters)
145
+ attrs.geopotential_altitudes[1].value #=> -6562 (feet)
146
+ attrs.temperatures[0].value #=> 301.15 (Kelvin)
147
+ attrs.temperatures[1].value #=> 28.0 (Celsius)
148
+ attrs.pressures[0].value #=> 1277.74 (mbar)
149
+ attrs.pressures[1].value #=> 958.382 (mm_Hg)
145
150
  ----
146
151
  ====
147
152
 
@@ -163,95 +168,92 @@ attrs.to_yaml
163
168
 
164
169
  [source,yaml]
165
170
  ----
166
- geometric-altitude-m:
167
- value: -1999
171
+ geometric-altitude:
172
+ - value: -1999
168
173
  unitsml: m
169
174
  type: integer
170
- geometric-altitude-ft:
171
- value: -6560
175
+ - value: -6560
172
176
  unitsml: ft
173
177
  type: integer
174
- geopotential-altitude-m:
175
- value: -2000
178
+ geopotential-altitude:
179
+ - value: -2000
176
180
  unitsml: m
177
181
  type: integer
178
- geopotential-altitude-ft:
179
- value: -6562
182
+ - value: -6562
180
183
  unitsml: ft
181
184
  type: integer
182
- temperature-k:
183
- value: 301150
185
+ temperature:
186
+ - value: 301.15
184
187
  unitsml: K
185
- type: integer
186
- temperature-c:
187
- value: 28000
188
+ type: float
189
+ - value: 28.0
188
190
  unitsml: degC
189
- type: integer
190
- pressure-mbar:
191
- value: 1277.74
191
+ type: float
192
+ pressure:
193
+ - value: 1277.74
192
194
  unitsml: mbar
193
195
  type: float
194
- pressure-mmhg:
195
- value: 958.382
196
- unitsml: u:mm_Hg
196
+ - value: 958.382
197
+ unitsml: mm_Hg
197
198
  type: float
198
199
  density:
199
- value: 1.47808
200
+ - value: 1.47808
200
201
  unitsml: kg*m^-3
201
202
  type: float
202
203
  acceleration:
203
- value: 9.8128
204
+ - value: 9.8128
204
205
  unitsml: m*s^-2
205
206
  type: float
206
207
  ppn:
207
- value: 1.26103
208
+ - value: 1.26103
208
209
  type: float
209
210
  rhorhon:
210
- value: 1.20659
211
+ - value: 1.20659
211
212
  type: float
212
213
  sqrt-rhorhon:
213
- value: 1.09845
214
+ - value: 1.09845
214
215
  type: float
215
216
  speed-of-sound:
216
- value: 347886
217
+ - value: 347.886
217
218
  unitsml: m*s^-1
218
- type: integer
219
+ type: float
219
220
  dynamic-viscosity:
220
- value: 1.8514e-05
221
+ - value: 1.8514e-05
221
222
  unitsml: Pa*s
222
223
  type: float
223
224
  kinematic-viscosity:
224
- value: 1.2526e-05
225
+ - value: 1.2526e-05
225
226
  unitsml: m^2*s^-1
226
227
  type: float
227
228
  thermal-conductivity:
228
- value: 0.026359
229
+ - value: 0.026359
229
230
  unitsml: W*m^-1*K^-1
230
231
  type: float
231
232
  pressure-scale-height:
232
- value: 8809.5
233
+ - value: 8809.5
233
234
  unitsml: m
234
235
  type: float
235
236
  specific-weight:
236
- value: 14.504
237
+ - value: 14.504
237
238
  unitsml: N*m^-3
238
239
  type: float
239
240
  air-number-density:
240
- value: 3.0734e+25
241
+ - value: 3.0734e+25
241
242
  unitsml: m^-3
242
243
  type: float
243
244
  mean-speed:
244
- value: 469.18
245
+ - value: 469.18
245
246
  unitsml: m*s^-1
246
247
  type: float
247
248
  frequency:
248
- value: 8535100000.0
249
+ - value: 8535100000.0
249
250
  unitsml: s^-1
250
251
  type: float
251
252
  mean-free-path:
252
- value: 5.4971e-08
253
+ - value: 5.4971e-08
253
254
  unitsml: m
254
255
  type: float
256
+ precision: reduced
255
257
  ----
256
258
  ====
257
259
 
@@ -263,7 +265,8 @@ mean-free-path:
263
265
  attrs = Atmospheric::Export::AltitudeAttrs.new.set_altitude(
264
266
  value: -2000,
265
267
  type: :geopotential,
266
- unit: :meters
268
+ unit: :meters,
269
+ precision: :normal
267
270
  )
268
271
 
269
272
  attrs.to_xml
@@ -271,21 +274,21 @@ attrs.to_xml
271
274
 
272
275
  [source,xml]
273
276
  ----
274
- <atmosphere-attributes>
275
- <geometric-altitude-m unitsml="m" type="integer">-1999</geometric-altitude-m>
276
- <geometric-altitude-ft unitsml="ft" type="integer">-6560</geometric-altitude-ft>
277
- <geopotential-altitude-m unitsml="m" type="integer">-2000</geopotential-altitude-m>
278
- <geopotential-altitude-ft unitsml="ft" type="integer">-6562</geopotential-altitude-ft>
279
- <temperature-k unitsml="K" type="integer">301150</temperature-k>
280
- <temperature-c unitsml="degC" type="integer">28000</temperature-c>
281
- <pressure-mbar unitsml="mbar" type="float">1277.74</pressure-mbar>
282
- <pressure-mmhg unitsml="u:mm_Hg" type="float">958.382</pressure-mmhg>
277
+ <atmosphere-attributes xmlns="urn:iso:std:iso:2533:tech:xsd">
278
+ <geometric-altitude unitsml="m" type="integer">-1999</geometric-altitude>
279
+ <geometric-altitude unitsml="ft" type="integer">-6560</geometric-altitude>
280
+ <geopotential-altitude unitsml="m" type="integer">-2000</geopotential-altitude>
281
+ <geopotential-altitude unitsml="ft" type="integer">-6562</geopotential-altitude>
282
+ <temperature unitsml="K" type="float">301.15</temperature>
283
+ <temperature unitsml="degC" type="float">28.0</temperature>
284
+ <pressure unitsml="mbar" type="float">1277.74</pressure>
285
+ <pressure unitsml="mm_Hg" type="float">958.38</pressure>
283
286
  <density unitsml="kg*m^-3" type="float">1.47808</density>
284
- <acceleration unitsml="m*s^-2" type="float">9.8128</acceleration>
287
+ <acceleration unitsml="m*s^-2" type="float">9.81282</acceleration>
285
288
  <ppn type="float">1.26103</ppn>
286
289
  <rhorhon type="float">1.20659</rhorhon>
287
290
  <sqrt-rhorhon type="float">1.09845</sqrt-rhorhon>
288
- <speed-of-sound unitsml="m*s^-1" type="integer">347886</speed-of-sound>
291
+ <speed-of-sound unitsml="m*s^-1" type="float">347.886</speed-of-sound>
289
292
  <dynamic-viscosity unitsml="Pa*s" type="float">1.8514e-05</dynamic-viscosity>
290
293
  <kinematic-viscosity unitsml="m^2*s^-1" type="float">1.2526e-05</kinematic-viscosity>
291
294
  <thermal-conductivity unitsml="W*m^-1*K^-1" type="float">0.026359</thermal-conductivity>
@@ -295,6 +298,7 @@ attrs.to_xml
295
298
  <mean-speed unitsml="m*s^-1" type="float">469.18</mean-speed>
296
299
  <frequency unitsml="s^-1" type="float">8535100000.0</frequency>
297
300
  <mean-free-path unitsml="m" type="float">5.4971e-08</mean-free-path>
301
+ <precision>normal</precision>
298
302
  </atmosphere-attributes>
299
303
  ----
300
304
  ====
@@ -341,12 +345,11 @@ Depending on the type of the value, it is in one of the following classes:
341
345
 
342
346
  The `PressureAttrs` object provides the following attributes:
343
347
 
344
- `pressure_mbar`:: Pressure in millibar.
345
- `pressure_mmhg`:: Pressure in mmHg.
346
- `geometric_altitude_m`:: Geometric altitude in meters.
347
- `geometric_altitude_ft`:: Geometric altitude in feet.
348
- `geopotential_altitude_m`:: Geopotential altitude in meters.
349
- `geopotential_altitude_ft`:: Geopotential altitude in feet.
348
+ All attributes are represented as collections (arrays) to support multiple units:
349
+
350
+ `pressures`:: Array of pressure values. Units: mbar, mm_Hg.
351
+ `geometric_altitudes`:: Array of geometric altitude values. Units: m, ft.
352
+ `geopotential_altitudes`:: Array of geopotential altitude values. Units: m, ft.
350
353
 
351
354
  [example]
352
355
  ====
@@ -357,12 +360,13 @@ attrs = Atmospheric::Export::PressureAttrs.new.set_pressure(
357
360
  unit: :mbar
358
361
  )
359
362
 
360
- attrs.pressure_mbar #=> 5.0
361
- attrs.pressure_mmhg #=> 3.7503084135
362
- attrs.geopotential_altitude_m #=> 35776
363
- attrs.geopotential_altitude_ft #=> 117377
364
- attrs.geometric_altitude_m #=> 35979
365
- attrs.geometric_altitude_ft #=> 118041
363
+ # Access collection values
364
+ attrs.pressures[0].value #=> 5.0 (mbar)
365
+ attrs.pressures[1].value #=> 3.7503084135 (mm_Hg)
366
+ attrs.geopotential_altitudes[0].value #=> 35776.5 (meters)
367
+ attrs.geopotential_altitudes[1].value #=> 117377.0 (feet)
368
+ attrs.geometric_altitudes[0].value #=> 35979.0 (meters)
369
+ attrs.geometric_altitudes[1].value #=> 118041.0 (feet)
366
370
  ----
367
371
  ====
368
372
 
@@ -383,30 +387,27 @@ attrs.to_yaml
383
387
 
384
388
  [source,yaml]
385
389
  ----
386
- pressure-mbar:
387
- value: 5.0
390
+ pressure:
391
+ - value: 5.0
388
392
  unitsml: mbar
389
393
  type: float
390
- pressure-mmhg:
391
- value: 3.7503084135
392
- unitsml: mmhg
394
+ - value: 3.7503084135
395
+ unitsml: mm_Hg
393
396
  type: float
394
- geopotential-altitude-m:
395
- value: 35776
397
+ geopotential-altitude:
398
+ - value: 35776.5
396
399
  unitsml: m
397
- type: integer
398
- geopotential-altitude-ft:
399
- value: 117377
400
+ type: float
401
+ - value: 117377.0
400
402
  unitsml: ft
401
- type: integer
402
- geometric-altitude-m:
403
- value: 35979
403
+ type: float
404
+ geometric-altitude:
405
+ - value: 35979.0
404
406
  unitsml: m
405
- type: integer
406
- geometric-altitude-ft:
407
- value: 118041
407
+ type: float
408
+ - value: 118041.0
408
409
  unitsml: ft
409
- type: integer
410
+ type: float
410
411
  ----
411
412
  ====
412
413
 
@@ -425,13 +426,13 @@ attrs.to_xml
425
426
 
426
427
  [source,xml]
427
428
  ----
428
- <hypsometrical-attributes>
429
- <pressure-mbar unitsml="mbar" type="float">5.0</pressure-mbar>
430
- <pressure-mmhg unitsml="mmhg" type="float">3.7503084135</pressure-mmhg>
431
- <geometric-altitude-m unitsml="m" type="integer">35979</geometric-altitude-m>
432
- <geometric-altitude-ft unitsml="ft" type="integer">118041</geometric-altitude-ft>
433
- <geopotential-altitude-m unitsml="m" type="integer">35776</geopotential-altitude-m>
434
- <geopotential-altitude-ft unitsml="ft" type="integer">117377</geopotential-altitude-ft>
429
+ <hypsometrical-attributes xmlns="urn:iso:std:iso:2533:tech:xsd">
430
+ <pressure unitsml="mbar" type="float">5.0</pressure>
431
+ <pressure unitsml="mm_Hg" type="float">3.7503084135</pressure>
432
+ <geometric-altitude unitsml="m" type="float">35979.0</geometric-altitude>
433
+ <geometric-altitude unitsml="ft" type="float">118041.0</geometric-altitude>
434
+ <geopotential-altitude unitsml="m" type="float">35776.5</geopotential-altitude>
435
+ <geopotential-altitude unitsml="ft" type="float">117377.0</geopotential-altitude>
435
436
  </hypsometrical-attributes>
436
437
  ----
437
438
  ====
@@ -591,12 +592,11 @@ All tables in the 1975 edition are arranged in these steps in meters:
591
592
  (51000..80000).step(200)
592
593
  ----
593
594
 
594
- Tables 5 to 7 all have height information of the following keys in the hash:
595
+ Tables 5 to 7 all have height information as collections (arrays) with
596
+ UnitsML unit metadata:
595
597
 
596
- * `geopotential-altitude-m`
597
- * `geopotential-altitude-ft`
598
- * `geometric-altitude-m`
599
- * `geometric-altitude-ft`
598
+ * `geometric-altitude` (collection: m, ft)
599
+ * `geopotential-altitude` (collection: m, ft)
600
600
 
601
601
  All YAML tables generated contain these two keys which group altitude values
602
602
  as the ISO 2533 tables are rendered in both types of altitudes:
@@ -612,10 +612,8 @@ Title:
612
612
 
613
613
  Provides the following values in addition to geopotential and geometric height:
614
614
 
615
- * `temperature-k`
616
- * `temperature-c`
617
- * `pressure-mbar`
618
- * `pressure-mmhg`
615
+ * `temperature` (collection: K, degC)
616
+ * `pressure` (collection: mbar, mm_Hg)
619
617
  * `density`
620
618
  * `acceleration`
621
619
 
@@ -684,7 +682,7 @@ For the range of `(5.0..19.99).step(0.01)` in hPa.
684
682
 
685
683
  Provides:
686
684
 
687
- * `pressure-mbar`
685
+ * `pressure` (collection: mbar, mm_Hg)
688
686
  * `geopotential-altitude`
689
687
 
690
688
  [source,ruby]
@@ -717,7 +715,7 @@ Same as Table 1 but for the range of `(4.0..9.99).step(0.01)` and results in mmh
717
715
 
718
716
  Provides:
719
717
 
720
- * `pressure-mmhg`
718
+ * `pressure` (collection: mbar, mm_Hg)
721
719
  * `geopotential-altitude`
722
720
 
723
721
  [source,ruby]
@@ -751,8 +749,7 @@ for -1000 <= H < +4600 m at intervals of 1m_"
751
749
  Provides:
752
750
 
753
751
  * `geopotential-altitude`
754
- * `pressure-mbar`
755
- * `pressure-mmhg`
752
+ * `pressure` (collection: mbar, mm_Hg)
756
753
 
757
754
  Range of `(-1000..4599).step(1)`.
758
755
 
@@ -1084,12 +1081,9 @@ For the range of `(5.0..19.99).step(0.01) + (20.0..1199.9).step(0.1)` in hPa.
1084
1081
 
1085
1082
  Provides:
1086
1083
 
1087
- * `pressure-mbar`
1088
- * `pressure-mmhg`
1089
- * `geopotential-altitude-m`
1090
- * `geopotential-altitude-ft`
1091
- * `geometric-altitude-m`
1092
- * `geometric-altitude-ft`
1084
+ * `pressure` (collection: mbar, mm_Hg)
1085
+ * `geopotential-altitude` (collection: m, ft)
1086
+ * `geometric-altitude` (collection: m, ft)
1093
1087
 
1094
1088
  [source,ruby]
1095
1089
  ----
@@ -1124,6 +1118,76 @@ for -1000 <= H < +4600 m at intervals of 1m_"
1124
1118
 
1125
1119
  This table is a subset of the `table_atmosphere_meters` method.
1126
1120
 
1121
+ == XML Schema
1122
+
1123
+ An XSD schema for the XML serialization format is provided at
1124
+ `schema/atmospheric.xsd`.
1125
+
1126
+ The schema uses the XML namespace `urn:iso:std:iso:2533:tech:xsd` following
1127
+ the RFC 5141 pattern for ISO technical XML schema resources. All elements
1128
+ are namespace-qualified (`elementFormDefault="qualified"`).
1129
+
1130
+ The schema defines the following root elements:
1131
+
1132
+ `atmospheric`:: Polymorphic root element. Two variants:
1133
+ +
1134
+ --
1135
+ * **Hypsometrical table**: contains `<hypsometrical-attributes>` records
1136
+ (pressure → altitude lookup).
1137
+ * **ISO 2533:2025 table**: contains `<by-geometric-altitude>` and
1138
+ `<by-geopotential-altitude>` sections, each with
1139
+ `<atmospheric-attributes>` records.
1140
+ --
1141
+ +
1142
+ [example]
1143
+ ====
1144
+ [source,xml]
1145
+ ----
1146
+ <!-- Hypsometrical table variant -->
1147
+ <atmospheric xmlns="urn:iso:std:iso:2533:tech:xsd">
1148
+ <hypsometrical-attributes>
1149
+ <pressure unitsml="mbar" type="float">1013.25</pressure>
1150
+ <pressure unitsml="mm_Hg" type="float">760.0</pressure>
1151
+ <geometric-altitude unitsml="m" type="float">0.0</geometric-altitude>
1152
+ <geometric-altitude unitsml="ft" type="float">0.0</geometric-altitude>
1153
+ <geopotential-altitude unitsml="m" type="float">0.0</geopotential-altitude>
1154
+ <geopotential-altitude unitsml="ft" type="float">0.0</geopotential-altitude>
1155
+ </hypsometrical-attributes>
1156
+ </atmospheric>
1157
+
1158
+ <!-- ISO 2533:2025 table variant -->
1159
+ <atmospheric xmlns="urn:iso:std:iso:2533:tech:xsd">
1160
+ <by-geometric-altitude>
1161
+ <atmospheric-attributes>...</atmospheric-attributes>
1162
+ </by-geometric-altitude>
1163
+ <by-geopotential-altitude>
1164
+ <atmospheric-attributes>...</atmospheric-attributes>
1165
+ </by-geopotential-altitude>
1166
+ </atmospheric>
1167
+ ----
1168
+ ====
1169
+
1170
+ `atmosphere-attributes`:: Full atmospheric property record (ISO 2533:2025).
1171
+ Contains all altitude, temperature, pressure, density, and derived properties.
1172
+
1173
+ `hypsometrical-attributes`:: Pressure-to-altitude record. Contains pressure
1174
+ and altitude values.
1175
+
1176
+ `attributes-group`:: Wrapper for a collection of `<atmospheric-attributes>`.
1177
+
1178
+ All value elements share a common pattern:
1179
+
1180
+ * Text content: the numeric value
1181
+ * `unitsml` attribute (optional): the UnitsML unit identifier (e.g., `m`,
1182
+ `ft`, `K`, `mbar`)
1183
+ * `type` attribute (required): either `"float"` or `"integer"`
1184
+
1185
+ [source,xml]
1186
+ ----
1187
+ <temperature unitsml="K" type="float">288.15</temperature>
1188
+ <geometric-altitude unitsml="m" type="integer">5000</geometric-altitude>
1189
+ <ppn type="float">0.53338</ppn> <!-- dimensionless, no unitsml -->
1190
+ ----
1127
1191
 
1128
1192
 
1129
1193
  == Testing
@@ -1185,7 +1249,6 @@ The only defining value in a tests is `H` (geopotential altitude).
1185
1249
  It is used to generate all the other values.
1186
1250
 
1187
1251
 
1188
- == License
1189
-
1190
- Copyright Ribose.
1252
+ == Copyright and license
1191
1253
 
1254
+ Copyright Ribose. Licensed under the 3-clause BSD license.