lutaml-xsd 1.2.76 → 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: 9c49965da4c942d79c67fd51902349ca702ed0f60a35bb44aef6a2f47f4745bc
4
- data.tar.gz: d9bfe229ec7147df509f0b8f01ea18e3b263df232b041d76d12c7c3f86362286
3
+ metadata.gz: 9348b8456689993378705b9289ce593db195f7440d77aeb6aaf5d5dda095cc68
4
+ data.tar.gz: 958720fe60cf140d78ebe3891069d4e0f64ffa37f37290c24f236499ae8dc187
5
5
  SHA512:
6
- metadata.gz: 559fe20193f7575c8893b5e25fc656b3cface817c7aa7190b97ab8d2e7ae226330281e02e6eeae3e02b38965ba77f3e958d94688aa788b015f7736692ba7d403
7
- data.tar.gz: 638b9280631242c2ada79b449bbc19f30cd1d706b502d7db9bce4d012dc3e421ed35312eacd0b9b64ef373bf283436105eb98a7abcf70e54ba0665d67fa8a73c
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.76)
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)
@@ -264,7 +264,7 @@ CHECKSUMS
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.76)
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,21 +120,21 @@ pinned commit) is measured via `rake conformance:w3c`:
120
120
 
121
121
  | mode | pass-rate |
122
122
  |---|---|
123
- | pipeline | 4546/4696 (96.8%) |
123
+ | pipeline | 4557/4696 (97.0%) |
124
124
 
125
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, digit-vintage and
129
- stgh-refresh rounds; moxml 0.6.1 (gemspec floor `~> 0.6.0` per the
130
- owner — the 0.6 line drops the Opal surface; measured
131
- conformance-neutral), lutaml-model 0.8.155, engine leptris
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
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%) → 4546 (96.8%), +585 net over the 1.2.43
137
- 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},
138
138
  \w/\W/\s to their XSD value spaces) collapses Regex 120→69;
139
139
  same-step pattern facets now behave as alternatives and
140
140
  whitespace-only text reaches the facets intact (PR #200), Regex
@@ -242,7 +242,8 @@ moxml 0.5.170 + lutaml-model 0.8.147) → 93.9% (escape + hint rounds)
242
242
  4439) → 94.9% (IC field-resolution round PR #206, 4454) → 95.7%
243
243
  (facade-silence dep refresh, moxml 0.5.177, 4495) → 96.3% (regex
244
244
  semantics round PR #208, 4524) → 96.6% (redefine refresh, leptris
245
- 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
246
247
  concentration (the work queue, largest first):
247
248
 
248
249
  - `Regex_w3c` (131) — decomposed by error source (2026-10-25): the
@@ -344,6 +345,19 @@ tuple keys, node-set field violations and absent-field rows handled, cross-eleme
344
345
  (stG010/012, stH005/007); SimpleType 10→6; suite 4546/4696
345
346
  (96.8%), zero regressions. #1936 remainder: reZ char-reference
346
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).
347
361
  - REGEX SEMANTICS ROUND (2026-10-31, PR #208): \w/\W now carry their
348
362
  Appendix F complements (\w = [^\p{P}\p{Z}\p{C}], class interiors
349
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.76"
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.76
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