lutaml-xsd 1.2.75 → 1.2.77

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b5c7e0ecfaa2daf7f64df61c25915f9911473cb62f66176973a1ca02a8a3ee35
4
- data.tar.gz: d7f95432a56b3ae1fc0fd9a360400f1360c2b81c839a950566a078a019a26ac4
3
+ metadata.gz: 9348b8456689993378705b9289ce593db195f7440d77aeb6aaf5d5dda095cc68
4
+ data.tar.gz: 958720fe60cf140d78ebe3891069d4e0f64ffa37f37290c24f236499ae8dc187
5
5
  SHA512:
6
- metadata.gz: 98717f00d2129690428b1c6fee6534313e5c6ecbf4dfdff4ccabdc1be5256883f8bbc5c8a88631743e4e04f6c7a3291720f1966288c1fc12fd7917970373ccb2
7
- data.tar.gz: 6bf49be2543a65c061bc095dabfeae59fdf38ddaee17be0bb33a44ca94b70050360b0083294d71a349d074fbe155967320486616088ead04e3f9da04eaf44a8b
6
+ metadata.gz: 9e883e13a5538b8d26493881aef3512513a12952fcc08f464f16ce77e2cde3142bfe082b85700a9b6545a6e2e4bf546d7449408a9d3e20af5175541622ab202b
7
+ data.tar.gz: 31990577df015678c7986199fda9ab5e751be44925b5bcf6a7eaa198e32eb884f6ad98920873070ed4f70d2b1f1a0d41084769911bc1f0f9c9e2450ce05e3e89
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- lutaml-xsd (1.2.75)
4
+ lutaml-xsd (1.2.77)
5
5
  liquid (>= 4.0, < 6.0)
6
6
  lutaml-model (~> 0.8.123)
7
7
  lutaml-store (~> 0.3)
@@ -46,23 +46,23 @@ GEM
46
46
  fiddle (1.1.8)
47
47
  json (3.1.0)
48
48
  language_server-protocol (3.17.0.6)
49
- leptris (1.9.399.0-aarch64-linux)
49
+ leptris (1.9.401.0-aarch64-linux)
50
50
  ffi (~> 1.15)
51
- leptris (1.9.399.0-aarch64-linux-musl)
51
+ leptris (1.9.401.0-aarch64-linux-musl)
52
52
  ffi (~> 1.15)
53
- leptris (1.9.399.0-arm-linux)
53
+ leptris (1.9.401.0-arm-linux)
54
54
  ffi (~> 1.15)
55
- leptris (1.9.399.0-arm-linux-musl)
55
+ leptris (1.9.401.0-arm-linux-musl)
56
56
  ffi (~> 1.15)
57
- leptris (1.9.399.0-arm64-darwin)
57
+ leptris (1.9.401.0-arm64-darwin)
58
58
  ffi (~> 1.15)
59
- leptris (1.9.399.0-x64-mingw-ucrt)
59
+ leptris (1.9.401.0-x64-mingw-ucrt)
60
60
  ffi (~> 1.15)
61
- leptris (1.9.399.0-x86_64-darwin)
61
+ leptris (1.9.401.0-x86_64-darwin)
62
62
  ffi (~> 1.15)
63
- leptris (1.9.399.0-x86_64-linux)
63
+ leptris (1.9.401.0-x86_64-linux)
64
64
  ffi (~> 1.15)
65
- leptris (1.9.399.0-x86_64-linux-musl)
65
+ leptris (1.9.401.0-x86_64-linux-musl)
66
66
  ffi (~> 1.15)
67
67
  lint_roller (1.1.0)
68
68
  liquid (5.14.0)
@@ -251,20 +251,20 @@ CHECKSUMS
251
251
  fiddle (1.1.8) sha256=7fa8ee3627271497f3add5503acdbc3f40b32f610fc1cf49634f083ef3f32eee
252
252
  json (3.1.0) sha256=3ce7ccf8fde58960177a3a756c31f292a4c1e1dedee884547096a5b0604e3bd8
253
253
  language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0
254
- leptris (1.9.399.0-aarch64-linux) sha256=f96125c2ceb69a48c9576dbba33d20466fd27b017ab7f54041f6bf37f0d3dc78
255
- leptris (1.9.399.0-aarch64-linux-musl) sha256=feede158d84c3a46ac11da49e99ba2108a0b85a3e7113e056fa33e88f1dc694f
256
- leptris (1.9.399.0-arm-linux) sha256=39046099c3d16e429966a79e5d509e120ad839bb41f3a1ed8183f0174f5a22fb
257
- leptris (1.9.399.0-arm-linux-musl) sha256=b7526a73a8b06843228010fc03c00c801241ca591b1504aaf09fae8a12bb7bdb
258
- leptris (1.9.399.0-arm64-darwin) sha256=f2c3e513cc31026307d4a28a92d97624fdb9dc1a67ef098a9586e0e76f250097
259
- leptris (1.9.399.0-x64-mingw-ucrt) sha256=b3aced983a662307e930eed3d408d844b82d947d63f80dc6e4c48fec962d6a7b
260
- leptris (1.9.399.0-x86_64-darwin) sha256=428c84f7c2e763bc2db614b1cafb49792852cd781d2c353e27206bf4aea3ce1c
261
- leptris (1.9.399.0-x86_64-linux) sha256=ae235c244456b8949920d10c21bf9d8f01cf05fb6900c41bc2ef2531e01e86a8
262
- leptris (1.9.399.0-x86_64-linux-musl) sha256=f7cf698c4858e132a19bf00667587ad96add7c35b3c629cbe97fdb20ef8099ce
254
+ leptris (1.9.401.0-aarch64-linux) sha256=47ec59d69cd7c496b8e680bc1710316eb7c3758f2773f694f8eae564b208e13c
255
+ leptris (1.9.401.0-aarch64-linux-musl) sha256=17ce4ab5f1764bfc0c9f6af2d2b58c6fad7e62efad6d0b6fcf9ac9afe9b6f4f2
256
+ leptris (1.9.401.0-arm-linux) sha256=9841eb6226141ed731df9ffdedd704e06805a2af197f68492423e492b26e7791
257
+ leptris (1.9.401.0-arm-linux-musl) sha256=00b805fc80caec46af58dd63d552e66b75b10f788451820b9fe6516c042f149b
258
+ leptris (1.9.401.0-arm64-darwin) sha256=998e27a93547fb91a0987fbcdf702ecfb0966547691ab621058bf69a5e27d295
259
+ leptris (1.9.401.0-x64-mingw-ucrt) sha256=7bfbdd1c74e06f8467491a6f981d6ad3d2a03905684c5763ab83f4dfde24fe28
260
+ leptris (1.9.401.0-x86_64-darwin) sha256=32de3947eced5a85fdbe4d6371ac525fba9c41b84b0f91e5a79e84deeaeef8ce
261
+ leptris (1.9.401.0-x86_64-linux) sha256=a6eb1c7107a659d8a5877f06d4fb398b3a7eb410a2c6c2ee9da72838f7c6bba9
262
+ leptris (1.9.401.0-x86_64-linux-musl) sha256=40c2222a670e80a7cdc0283ca48b4e7ce03b5a4690b60a0b1281d4afac5f3627
263
263
  lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87
264
264
  liquid (5.14.0) sha256=e1020c2b2ee58c7a4d3bfdc7a331537bd27a783353748bff0bf27c6ac0c17065
265
265
  lutaml-model (0.8.155) sha256=3d90f2fb4fdf41a42d4a05b62b3f6644b433070b82291a9371deaa8e68a1e02d
266
266
  lutaml-store (0.3.2) sha256=9c455dbab32b4c635c48a27213f6f56fda191731c4574eb6187184ba0588a672
267
- lutaml-xsd (1.2.75)
267
+ lutaml-xsd (1.2.77)
268
268
  memo_wise (1.13.0) sha256=30220c38c4cef410849bc73553c58664dc2c91c6379e4a1df22aea02358b716b
269
269
  moxml (0.6.1) sha256=5b7677258bbad372f0725a421f8adeae37b65d6f7871da2747e2c1906cdac7ea
270
270
  nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f
data/TODO.conformance.md CHANGED
@@ -120,20 +120,21 @@ pinned commit) is measured via `rake conformance:w3c`:
120
120
 
121
121
  | mode | pass-rate |
122
122
  |---|---|
123
- | pipeline | 4542/4696 (96.7%) |
123
+ | pipeline | 4557/4696 (97.0%) |
124
124
 
125
- (2026-11-01, bundled-stack measurement on main with the escape,
125
+ (2026-11-02, bundled-stack measurement on main with the escape,
126
126
  hint-following, pattern-alternative, identity-crash, engine-set,
127
127
  engine-refresh, IC value-space, IC field-resolution, facade-silence,
128
- regex-semantics, redefine-refresh, gmonth-refresh and digit-vintage
129
- rounds; moxml 0.6.1 (gemspec floor `~> 0.6.0` per the owner — the
130
- 0.6 line drops the Opal surface; measured conformance-neutral),
131
- lutaml-model 0.8.155, engine leptris
132
- 1.9.399.0.) Same-stack comparison: 1.2.43 baseline 3961 (84.3%) →
128
+ regex-semantics, redefine-refresh, gmonth-refresh, digit-vintage,
129
+ stgh-refresh and group-ref rounds; moxml 0.6.1 (gemspec floor
130
+ `~> 0.6.0` per the owner — the 0.6 line drops the Opal surface;
131
+ measured conformance-neutral), lutaml-model 0.8.155, engine leptris
132
+ 1.9.401.0.) Same-stack comparison: 1.2.43 baseline 3961 (84.3%) →
133
133
  4039 (86.0%) → 4090 (87.1%) → 4360 (92.8%, lockfile refresh) → 4411
134
134
  (93.9%) → 4430 (94.3%) → 4435 (94.4%) → 4436 (94.5%) → 4439 (94.5%)
135
135
  → 4454 (94.9%) → 4495 (95.7%) → 4524 (96.3%) → 4534 (96.6%) → 4540
136
- (96.7%) → 4542 (96.7%), +581 net over the 1.2.43 baseline. The escapes round (PR #197 — \d→\p{Nd},
136
+ (96.7%) → 4542 (96.7%) → 4546 (96.8%) → 4557 (97.0%), +596 net over
137
+ the 1.2.43 baseline. The escapes round (PR #197 — \d→\p{Nd},
137
138
  \w/\W/\s to their XSD value spaces) collapses Regex 120→69;
138
139
  same-step pattern facets now behave as alternatives and
139
140
  whitespace-only text reaches the facets intact (PR #200), Regex
@@ -225,7 +226,7 @@ corners.
225
226
  |---|---|---|
226
227
  | Facade strict re-check on composed schemas — remaining shapes (ctE019 attribute re-check, addB116 substitution admission) | ~8 | moxml#510 (+2 follow-up comments) |
227
228
  | Redefine self-extension drops the extension content model | 0 — FIXED in leptris 1.9.396 | leptris#1926 (closed) |
228
- | Built-in lexical tables reject valid forms (Unicode-3.1 digits, list/union members, char-reference shapes; gMonth spellings FIXED in 1.9.398) | ~12 | leptris#1936 |
229
+ | Built-in lexical tables reject valid forms (char-reference shapes; gMonth FIXED 1.9.398, \d legacy-Nd FIXED 1.9.399, stG/stH list lexicals FIXED 1.9.400/401) | ~5 | leptris#1936 |
229
230
  | Automaton size cap surfaces as an instance error instead of engine-inert silence | 0 — FIXED in leptris 1.9.398 | moxml#514 (follow-up to #473) |
230
231
  | Regex dialect remainder (engine `\d` vintage, `\p{Is...}` blocks, char-reference shapes) | ~30 | engine-side of leptris#1936 |
231
232
  | Strict wildcard/attribute admission on further compositions | ~5 | moxml#510 thread |
@@ -241,7 +242,8 @@ moxml 0.5.170 + lutaml-model 0.8.147) → 93.9% (escape + hint rounds)
241
242
  4439) → 94.9% (IC field-resolution round PR #206, 4454) → 95.7%
242
243
  (facade-silence dep refresh, moxml 0.5.177, 4495) → 96.3% (regex
243
244
  semantics round PR #208, 4524) → 96.6% (redefine refresh, leptris
244
- 1.9.396/1.9.397, 4534). Failure
245
+ 1.9.396/1.9.397, 4534) → 96.8% (stG/stH refresh, leptris 1.9.401,
246
+ 4546) → 97.0% (group-ref round PR #217, 4557). Failure
245
247
  concentration (the work queue, largest first):
246
248
 
247
249
  - `Regex_w3c` (131) — decomposed by error source (2026-10-25): the
@@ -296,7 +298,9 @@ tuple keys, node-set field violations and absent-field rows handled, cross-eleme
296
298
  addB116-class substitution admission + schA1-class same-root
297
299
  multi-document crosstalk; the ctE019 attribute re-check FIXED in
298
300
  leptris 1.9.395), DataTypes (17), Particles (18), Group (19),
299
- AttributeGroup (17), SimpleType (10), Attribute (10), Additional
301
+ AttributeGroup (17), SimpleType (6 — the stG/stH list-lexical
302
+ class FIXED in leptris 1.9.400/1.9.401; remainder is reZ-adjacent),
303
+ Attribute (10), Additional
300
304
  (7), IdentityConstraint (6 — idK012/idZ008/010/011/012/015
301
305
  singleton corners: cross-namespace keyrefs, IDREF defaults,
302
306
  complexContent constraint location — the redefine class FIXED in
@@ -332,6 +336,28 @@ tuple keys, node-set field violations and absent-field rows handled, cross-eleme
332
336
  #208. Regex 30→28; suite 4542/4696 (96.7%). Still open on #1936:
333
337
  the reZ char-reference shapes and the stG/stH list-union member
334
338
  lexicals; plus the moxml#510 addB116 straggler.
339
+ - STGH REFRESH ROUND (2026-11-02): lockfile leptris 1.9.399.0 →
340
+ 1.9.401.0 (1.9.400 landed late on rubygems; 1.9.401 adds list
341
+ value-space whitespace collapse before facets) — the train
342
+ carried the stG/stH legs of OUR leptris#1936: inline anonymous
343
+ restriction bases drive list-item length and list lexicals are
344
+ collapsed before pattern/enumeration. All four cases flip
345
+ (stG010/012, stH005/007); SimpleType 10→6; suite 4546/4696
346
+ (96.8%), zero regressions. #1936 remainder: reZ char-reference
347
+ shapes, reT51 \D vintage; plus moxml#510 addB116 straggler.
348
+ - GROUP-REF ROUND (2026-11-02, PR #217): +11 Group cases (19→8,
349
+ suite 4557/4696 = 97.0%). TWO Ruby defects: (a) `particle_for_type`
350
+ read sequence/choice/all from extension and restriction bodies but
351
+ NOT `group` — a derivation body that is a bare group reference
352
+ compiled to NO content model and the walk enforced nothing
353
+ (groupG/groupH class); (b) `composite_capacity` decided sum-vs-max
354
+ from the PARTICLE's class — for a Group ref it always took the max
355
+ branch even when the group's declaration is a SEQUENCE whose
356
+ members' capacities must ADD (groupH002: one branch of x1+x2 was
357
+ counted as two choice occurrences). Neighbors verified identical;
358
+ zero regressions. Group remainder: groupB009/010 + groupO004
359
+ (false-reject class), groupH008/J003/006/008/L008 under-detections
360
+ (choice-of-group capacity depth).
335
361
  - REGEX SEMANTICS ROUND (2026-10-31, PR #208): \w/\W now carry their
336
362
  Appendix F complements (\w = [^\p{P}\p{Z}\p{C}], class interiors
337
363
  via the exact positive partition L/M/N/S), \I/\C complements added
@@ -501,24 +501,36 @@ module Lutaml
501
501
  end
502
502
 
503
503
  def composite_capacity(particle, repository, depth)
504
- children = if particle.is_a?(Lutaml::Xml::Schema::Xsd::Group)
505
- container = expand_group_container(particle,
506
- repository).first
507
- container ? choice_alternatives(container) : []
508
- else
509
- # sequence: capacities add; choice: the largest
510
- choice_alternatives(particle)
511
- end
504
+ # The CONTAINER's kind decides aggregation: a group whose
505
+ # declaration is a sequence ADDS its members' capacities, a
506
+ # choice takes the largest — deciding from the ref particle
507
+ # itself always maxed (groupH class).
508
+ children, aggregate =
509
+ if particle.is_a?(Lutaml::Xml::Schema::Xsd::Group)
510
+ container = expand_group_container(particle,
511
+ repository).first
512
+ if container
513
+ [choice_alternatives(container),
514
+ container_choice?(container) ? :max : :sum]
515
+ else
516
+ [[], :max]
517
+ end
518
+ else
519
+ [choice_alternatives(particle),
520
+ particle.is_a?(Lutaml::Xsd::Sequence) ? :sum : :max]
521
+ end
512
522
  caps = children.map do |child|
513
523
  branch_capacity(child, repository, depth + 1)
514
524
  end
515
525
  return :unbounded if caps.include?(:unbounded)
516
526
 
517
- if particle.is_a?(Lutaml::Xsd::Sequence)
518
- caps.sum
519
- else
520
- caps.max || 0
521
- end
527
+ aggregate == :sum ? caps.sum : (caps.max || 0)
528
+ end
529
+
530
+ # @return [Boolean]
531
+ def container_choice?(container)
532
+ container.is_a?(Lutaml::Xsd::Choice) ||
533
+ container.is_a?(Lutaml::Xml::Schema::Xsd::Choice)
522
534
  end
523
535
 
524
536
  # Choice alternatives are particles of any kind.
@@ -428,8 +428,12 @@ module Lutaml
428
428
  nil
429
429
  when Lutaml::Xml::Schema::Xsd::ExtensionComplexContent,
430
430
  Lutaml::Xml::Schema::Xsd::RestrictionComplexContent
431
+ # A derivation body may be a bare group reference — the
432
+ # ref's own minOccurs/maxOccurs govern the expanded model
433
+ # (groupG/groupH class).
431
434
  Array(type.sequence).first ||
432
- Array(type.choice).first || Array(type.all).first
435
+ Array(type.choice).first || Array(type.all).first ||
436
+ Array(type.group).first
433
437
  end
434
438
  end
435
439
 
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Lutaml
4
4
  module Xsd
5
- VERSION = "1.2.75"
5
+ VERSION = "1.2.77"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lutaml-xsd
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.75
4
+ version: 1.2.77
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-11-01 00:00:00.000000000 Z
11
+ date: 2026-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: liquid