sts 0.6.5 → 0.6.7

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 (39) hide show
  1. checksums.yaml +4 -4
  2. data/TODO.roadmap/00-overview.md +80 -0
  3. data/TODO.roadmap/01-lutaml-model-namespace-scope-uri-matching.md +111 -0
  4. data/TODO.roadmap/02-lutaml-model-element-builder-dispatch.md +115 -0
  5. data/TODO.roadmap/03-issue-40-child-bearing-roots.md +57 -0
  6. data/TODO.roadmap/04-issue-40-recursive-roots.md +105 -0
  7. data/TODO.roadmap/05-content-mathml-unification.md +75 -0
  8. data/TODO.roadmap/06-mathml-namespace-deduplication.md +59 -0
  9. data/TODO.roadmap/07-tbxisotml-misclassification-audit.md +82 -0
  10. data/TODO.roadmap/08-register-versioning.md +95 -0
  11. data/TODO.roadmap/09-test-coverage-gaps.md +78 -0
  12. data/TODO.roadmap/10-iso-sts-common-attributes-module.md +115 -0
  13. data/TODO.roadmap/11-docs-and-readme-refresh.md +52 -0
  14. data/TODO.sts-refactor/00-overview.md +3 -3
  15. data/TODO.sts-refactor/03-namespace-coupling.md +24 -5
  16. data/TODO.sts-refactor/09-autoload-cleanup.md +48 -83
  17. data/TODO.sts-refactor/11-duplicate-models.md +32 -2
  18. data/lib/sts/iso_sts/array.rb +1 -1
  19. data/lib/sts/iso_sts/attrib.rb +72 -0
  20. data/lib/sts/iso_sts/boxed_text.rb +2 -0
  21. data/lib/sts/iso_sts/custom_meta.rb +37 -0
  22. data/lib/sts/iso_sts/custom_meta_group.rb +16 -0
  23. data/lib/sts/iso_sts/def_list.rb +1 -1
  24. data/lib/sts/iso_sts/disp_quote.rb +2 -0
  25. data/lib/sts/iso_sts/iso_meta.rb +1 -1
  26. data/lib/sts/iso_sts/license.rb +35 -0
  27. data/lib/sts/iso_sts/license_p.rb +96 -0
  28. data/lib/sts/iso_sts/meta_name.rb +14 -0
  29. data/lib/sts/iso_sts/meta_value.rb +41 -0
  30. data/lib/sts/iso_sts/nat_meta.rb +1 -1
  31. data/lib/sts/iso_sts/permissions.rb +1 -1
  32. data/lib/sts/iso_sts/reg_meta.rb +1 -1
  33. data/lib/sts/iso_sts/table_wrap_foot.rb +1 -1
  34. data/lib/sts/iso_sts/term_head.rb +74 -0
  35. data/lib/sts/iso_sts.rb +8 -3
  36. data/lib/sts/version.rb +1 -1
  37. metadata +22 -4
  38. data/lib/sts/iso_sts/mathml2/math.rb +0 -68
  39. data/lib/sts/iso_sts/mathml2.rb +0 -9
@@ -1,10 +1,40 @@
1
1
  # 11: Duplicate Model Resolution
2
2
 
3
- **Priority**: MEDIUM
3
+ **Status**: REJECTED (2026-07-26) — kept for historical context.
4
+ **Priority**: N/A
4
5
  **Category**: Architecture
5
- **Estimated Effort**: High
6
+ **Estimated Effort**: N/A
6
7
  **Files Affected**: `lib/sts/iso_sts/`, `lib/sts/niso_sts/`
7
8
 
9
+ ## Why rejected
10
+
11
+ The "Resolution Strategy" below proposes a `Sts::Base::*` three-tier class
12
+ hierarchy that both `IsoSts` and `NisoSts` inherit from. This contradicts:
13
+
14
+ - The 2026-05-07 ADR on namespace independence.
15
+ - `TODO.sts-refactor/03-namespace-coupling.md` "Rejected" section.
16
+ - The project-global memory `architecture-namespace-independence`:
17
+ "NEVER create shared `Sts::Base` classes that both namespaces inherit from".
18
+
19
+ The schemas genuinely diverge — `IsoSts::Fig` has `title`/`alternatives` that
20
+ `NisoSts::Figure` lacks; `IsoSts::Ref` has `nlm-citation`/`citation-alternatives`
21
+ that `NisoSts::Reference` lacks. A shared base would fight the schemas and
22
+ violate the Open/Closed Principle.
23
+
24
+ The "duplicate" classes between IsoSts and NisoSts are intentional: each
25
+ namespace must have its own complete, independent set of model classes
26
+ modelled from its own schema (ISOSTS.xsd vs NISO-STS-extended-1.xsd). The
27
+ correct way to reduce the duplication appearance is to finish TODO 03
28
+ (model IsoSts classes from ISOSTS.xsd, replacing NisoSts references),
29
+ not to share base types.
30
+
31
+ The rest of this document is preserved for reference only. **Do not implement
32
+ the proposals below.**
33
+
34
+ ---
35
+
36
+ ## Original problem statement (rejected)
37
+
8
38
  ## Problem
9
39
 
10
40
  Many model classes exist in both `Sts::IsoSts` and `Sts::NisoSts` with the same XML element name but potentially different attributes. This creates:
@@ -11,7 +11,7 @@ module Sts
11
11
  attribute :originator, :string
12
12
  attribute :label, ::Sts::IsoSts::Label
13
13
  attribute :table, ::Sts::IsoSts::Table
14
- attribute :attrib, ::Sts::NisoSts::Attrib, collection: true
14
+ attribute :attrib, ::Sts::IsoSts::Attrib, collection: true
15
15
  attribute :permissions, ::Sts::IsoSts::Permissions, collection: true
16
16
 
17
17
  xml do
@@ -0,0 +1,72 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sts
4
+ module IsoSts
5
+ class Attrib < Lutaml::Model::Serializable
6
+ attribute :id, :string
7
+ attribute :specific_use, :string
8
+ attribute :xml_lang, :string
9
+ attribute :content, :string, collection: true
10
+ attribute :email, ::Sts::IsoSts::Email, collection: true
11
+ attribute :ext_link, ::Sts::IsoSts::ExtLink, collection: true
12
+ attribute :uri, ::Sts::IsoSts::Uri, collection: true
13
+ attribute :mixed_citation, ::Sts::IsoSts::MixedCitation, collection: true
14
+ attribute :std, ::Sts::IsoSts::Std, collection: true
15
+ attribute :bold, ::Sts::IsoSts::Bold, collection: true
16
+ attribute :italic, ::Sts::IsoSts::Italic, collection: true
17
+ attribute :monospace, ::Sts::IsoSts::Monospace, collection: true
18
+ attribute :num, ::Sts::IsoSts::Num, collection: true
19
+ attribute :sc, ::Sts::IsoSts::Sc, collection: true
20
+ attribute :strike, ::Sts::IsoSts::Strike, collection: true
21
+ attribute :underline, ::Sts::IsoSts::Underline, collection: true
22
+ attribute :inline_graphic, ::Sts::IsoSts::InlineGraphic, collection: true
23
+ attribute :inline_formula, ::Sts::IsoSts::InlineFormula, collection: true
24
+ attribute :abbrev, ::Sts::IsoSts::Abbrev, collection: true
25
+ attribute :milestone_end, ::Sts::IsoSts::MilestoneEnd, collection: true
26
+ attribute :milestone_start, ::Sts::IsoSts::MilestoneStart,
27
+ collection: true
28
+ attribute :named_content, ::Sts::IsoSts::NamedContent, collection: true
29
+ attribute :styled_content, ::Sts::IsoSts::StyledContent, collection: true
30
+ attribute :fn, ::Sts::IsoSts::Fn, collection: true
31
+ attribute :xref, ::Sts::IsoSts::Xref, collection: true
32
+ attribute :std_ref, ::Sts::IsoSts::StdRef, collection: true
33
+ attribute :sub, ::Sts::IsoSts::Sub, collection: true
34
+ attribute :sup, ::Sts::IsoSts::Sup, collection: true
35
+
36
+ xml do # rubocop:disable Metrics/BlockLength
37
+ element "attrib"
38
+ mixed_content
39
+
40
+ map_attribute "id", to: :id
41
+ map_attribute "specific-use", to: :specific_use
42
+ map_attribute "xml:lang", to: :xml_lang
43
+
44
+ map_content to: :content
45
+ map_element "email", to: :email
46
+ map_element "ext-link", to: :ext_link
47
+ map_element "uri", to: :uri
48
+ map_element "mixed-citation", to: :mixed_citation
49
+ map_element "std", to: :std
50
+ map_element "bold", to: :bold
51
+ map_element "italic", to: :italic
52
+ map_element "monospace", to: :monospace
53
+ map_element "num", to: :num
54
+ map_element "sc", to: :sc
55
+ map_element "strike", to: :strike
56
+ map_element "underline", to: :underline
57
+ map_element "inline-graphic", to: :inline_graphic
58
+ map_element "inline-formula", to: :inline_formula
59
+ map_element "abbrev", to: :abbrev
60
+ map_element "milestone-end", to: :milestone_end
61
+ map_element "milestone-start", to: :milestone_start
62
+ map_element "named-content", to: :named_content
63
+ map_element "styled-content", to: :styled_content
64
+ map_element "fn", to: :fn
65
+ map_element "xref", to: :xref
66
+ map_element "std-ref", to: :std_ref
67
+ map_element "sub", to: :sub
68
+ map_element "sup", to: :sup
69
+ end
70
+ end
71
+ end
72
+ end
@@ -30,6 +30,7 @@ module Sts
30
30
  attribute :term_sec, ::Sts::IsoSts::TermSec, collection: true
31
31
  attribute :fn_group, ::Sts::IsoSts::FnGroup, collection: true
32
32
  attribute :ref_list, ::Sts::IsoSts::RefList, collection: true
33
+ attribute :attrib, ::Sts::IsoSts::Attrib, collection: true
33
34
  attribute :permissions, ::Sts::IsoSts::Permissions, collection: true
34
35
 
35
36
  xml do # rubocop:disable Metrics/BlockLength
@@ -62,6 +63,7 @@ module Sts
62
63
  map_element "term-sec", to: :term_sec
63
64
  map_element "fn-group", to: :fn_group
64
65
  map_element "ref-list", to: :ref_list
66
+ map_element "attrib", to: :attrib
65
67
  map_element "permissions", to: :permissions
66
68
  end
67
69
  end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sts
4
+ module IsoSts
5
+ class CustomMeta < Lutaml::Model::Serializable
6
+ attribute :id, :string
7
+ attribute :specific_use, :string
8
+ attribute :xml_lang, :string
9
+ attribute :xlink_type, :string
10
+ attribute :xlink_href, :string
11
+ attribute :xlink_role, :string
12
+ attribute :xlink_title, :string
13
+ attribute :xlink_show, :string
14
+ attribute :xlink_actuate, :string
15
+ attribute :meta_name, ::Sts::IsoSts::MetaName
16
+ attribute :meta_value, ::Sts::IsoSts::MetaValue
17
+
18
+ xml do
19
+ element "custom-meta"
20
+ ordered
21
+
22
+ map_attribute "id", to: :id
23
+ map_attribute "specific-use", to: :specific_use
24
+ map_attribute "xml:lang", to: :xml_lang
25
+ map_attribute "xlink:type", to: :xlink_type
26
+ map_attribute "xlink:href", to: :xlink_href
27
+ map_attribute "xlink:role", to: :xlink_role
28
+ map_attribute "xlink:title", to: :xlink_title
29
+ map_attribute "xlink:show", to: :xlink_show
30
+ map_attribute "xlink:actuate", to: :xlink_actuate
31
+
32
+ map_element "meta-name", to: :meta_name
33
+ map_element "meta-value", to: :meta_value
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sts
4
+ module IsoSts
5
+ class CustomMetaGroup < Lutaml::Model::Serializable
6
+ attribute :custom_meta, ::Sts::IsoSts::CustomMeta, collection: true
7
+
8
+ xml do
9
+ element "custom-meta-group"
10
+ ordered
11
+
12
+ map_element "custom-meta", to: :custom_meta
13
+ end
14
+ end
15
+ end
16
+ end
@@ -13,7 +13,7 @@ module Sts
13
13
  attribute :originator, :string
14
14
  attribute :label, ::Sts::IsoSts::Label
15
15
  attribute :title, ::Sts::IsoSts::Title
16
- attribute :term_head, ::Sts::NisoSts::TermHead
16
+ attribute :term_head, ::Sts::IsoSts::TermHead
17
17
  attribute :def_head, ::Sts::TbxIsoTml::Definition
18
18
  attribute :def_item, ::Sts::IsoSts::DefItem, collection: true
19
19
  attribute :def_list, ::Sts::IsoSts::DefList, collection: true
@@ -22,6 +22,7 @@ module Sts
22
22
  attribute :graphic, ::Sts::IsoSts::Graphic, collection: true
23
23
  attribute :disp_formula, ::Sts::IsoSts::DispFormula, collection: true
24
24
  attribute :disp_quote, ::Sts::IsoSts::DispQuote, collection: true
25
+ attribute :attrib, ::Sts::IsoSts::Attrib, collection: true
25
26
  attribute :permissions, ::Sts::IsoSts::Permissions, collection: true
26
27
 
27
28
  xml do
@@ -46,6 +47,7 @@ module Sts
46
47
  map_element "graphic", to: :graphic
47
48
  map_element "disp-formula", to: :disp_formula
48
49
  map_element "disp-quote", to: :disp_quote
50
+ map_element "attrib", to: :attrib
49
51
  map_element "permissions", to: :permissions
50
52
  end
51
53
  end
@@ -19,7 +19,7 @@ module Sts
19
19
  attribute :permissions, ::Sts::IsoSts::Permissions, collection: true
20
20
  attribute :std_xref, ::Sts::IsoSts::StandardCrossReference,
21
21
  collection: true
22
- attribute :custom_meta_group, ::Sts::NisoSts::CustomMetaGroup,
22
+ attribute :custom_meta_group, ::Sts::IsoSts::CustomMetaGroup,
23
23
  collection: true
24
24
  attribute :meta_date, ::Sts::IsoSts::MetaDate, collection: true
25
25
  attribute :pub_date, ::Sts::IsoSts::PubDate
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sts
4
+ module IsoSts
5
+ class License < Lutaml::Model::Serializable
6
+ attribute :license_type, :string
7
+ attribute :specific_use, :string
8
+ attribute :xml_lang, :string
9
+ attribute :xlink_type, :string
10
+ attribute :xlink_href, :string
11
+ attribute :xlink_role, :string
12
+ attribute :xlink_title, :string
13
+ attribute :xlink_show, :string
14
+ attribute :xlink_actuate, :string
15
+ attribute :license_p, ::Sts::IsoSts::LicenseP, collection: true
16
+
17
+ xml do
18
+ element "license"
19
+ ordered
20
+
21
+ map_attribute "license-type", to: :license_type
22
+ map_attribute "specific-use", to: :specific_use
23
+ map_attribute "xml:lang", to: :xml_lang
24
+ map_attribute "xlink:type", to: :xlink_type
25
+ map_attribute "xlink:href", to: :xlink_href
26
+ map_attribute "xlink:role", to: :xlink_role
27
+ map_attribute "xlink:title", to: :xlink_title
28
+ map_attribute "xlink:show", to: :xlink_show
29
+ map_attribute "xlink:actuate", to: :xlink_actuate
30
+
31
+ map_element "license-p", to: :license_p
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,96 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sts
4
+ module IsoSts
5
+ class LicenseP < Lutaml::Model::Serializable
6
+ attribute :id, :string
7
+ attribute :specific_use, :string
8
+ attribute :xml_lang, :string
9
+ attribute :content_type, :string
10
+ attribute :content, :string, collection: true
11
+ attribute :email, ::Sts::IsoSts::Email, collection: true
12
+ attribute :ext_link, ::Sts::IsoSts::ExtLink, collection: true
13
+ attribute :uri, ::Sts::IsoSts::Uri, collection: true
14
+ attribute :mixed_citation, ::Sts::IsoSts::MixedCitation, collection: true
15
+ attribute :std, ::Sts::IsoSts::Std, collection: true
16
+ attribute :bold, ::Sts::IsoSts::Bold, collection: true
17
+ attribute :italic, ::Sts::IsoSts::Italic, collection: true
18
+ attribute :monospace, ::Sts::IsoSts::Monospace, collection: true
19
+ attribute :num, ::Sts::IsoSts::Num, collection: true
20
+ attribute :sc, ::Sts::IsoSts::Sc, collection: true
21
+ attribute :strike, ::Sts::IsoSts::Strike, collection: true
22
+ attribute :underline, ::Sts::IsoSts::Underline, collection: true
23
+ attribute :inline_graphic, ::Sts::IsoSts::InlineGraphic, collection: true
24
+ attribute :inline_formula, ::Sts::IsoSts::InlineFormula, collection: true
25
+ attribute :abbrev, ::Sts::IsoSts::Abbrev, collection: true
26
+ attribute :milestone_end, ::Sts::IsoSts::MilestoneEnd, collection: true
27
+ attribute :milestone_start, ::Sts::IsoSts::MilestoneStart,
28
+ collection: true
29
+ attribute :named_content, ::Sts::IsoSts::NamedContent, collection: true
30
+ attribute :styled_content, ::Sts::IsoSts::StyledContent, collection: true
31
+ attribute :list, ::Sts::IsoSts::List, collection: true
32
+ attribute :def_list, ::Sts::IsoSts::DefList, collection: true
33
+ attribute :non_normative_note, ::Sts::IsoSts::NonNormativeNote,
34
+ collection: true
35
+ attribute :non_normative_example, ::Sts::IsoSts::NonNormativeExample,
36
+ collection: true
37
+ attribute :preformat, ::Sts::IsoSts::Preformat, collection: true
38
+ attribute :fig, ::Sts::IsoSts::Fig, collection: true
39
+ attribute :graphic, ::Sts::IsoSts::Graphic, collection: true
40
+ attribute :disp_formula, ::Sts::IsoSts::DispFormula, collection: true
41
+ attribute :disp_quote, ::Sts::IsoSts::DispQuote, collection: true
42
+ attribute :boxed_text, ::Sts::IsoSts::BoxedText, collection: true
43
+ attribute :fn, ::Sts::IsoSts::Fn, collection: true
44
+ attribute :xref, ::Sts::IsoSts::Xref, collection: true
45
+ attribute :std_ref, ::Sts::IsoSts::StdRef, collection: true
46
+ attribute :sub, ::Sts::IsoSts::Sub, collection: true
47
+ attribute :sup, ::Sts::IsoSts::Sup, collection: true
48
+
49
+ xml do # rubocop:disable Metrics/BlockLength
50
+ element "license-p"
51
+ mixed_content
52
+
53
+ map_attribute "id", to: :id
54
+ map_attribute "specific-use", to: :specific_use
55
+ map_attribute "xml:lang", to: :xml_lang
56
+ map_attribute "content-type", to: :content_type
57
+
58
+ map_content to: :content
59
+ map_element "email", to: :email
60
+ map_element "ext-link", to: :ext_link
61
+ map_element "uri", to: :uri
62
+ map_element "mixed-citation", to: :mixed_citation
63
+ map_element "std", to: :std
64
+ map_element "bold", to: :bold
65
+ map_element "italic", to: :italic
66
+ map_element "monospace", to: :monospace
67
+ map_element "num", to: :num
68
+ map_element "sc", to: :sc
69
+ map_element "strike", to: :strike
70
+ map_element "underline", to: :underline
71
+ map_element "inline-graphic", to: :inline_graphic
72
+ map_element "inline-formula", to: :inline_formula
73
+ map_element "abbrev", to: :abbrev
74
+ map_element "milestone-end", to: :milestone_end
75
+ map_element "milestone-start", to: :milestone_start
76
+ map_element "named-content", to: :named_content
77
+ map_element "styled-content", to: :styled_content
78
+ map_element "list", to: :list
79
+ map_element "def-list", to: :def_list
80
+ map_element "non-normative-note", to: :non_normative_note
81
+ map_element "non-normative-example", to: :non_normative_example
82
+ map_element "preformat", to: :preformat
83
+ map_element "fig", to: :fig
84
+ map_element "graphic", to: :graphic
85
+ map_element "disp-formula", to: :disp_formula
86
+ map_element "disp-quote", to: :disp_quote
87
+ map_element "boxed-text", to: :boxed_text
88
+ map_element "fn", to: :fn
89
+ map_element "xref", to: :xref
90
+ map_element "std-ref", to: :std_ref
91
+ map_element "sub", to: :sub
92
+ map_element "sup", to: :sup
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sts
4
+ module IsoSts
5
+ class MetaName < Lutaml::Model::Serializable
6
+ attribute :content, :string
7
+
8
+ xml do
9
+ element "meta-name"
10
+ map_content to: :content
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sts
4
+ module IsoSts
5
+ class MetaValue < Lutaml::Model::Serializable
6
+ attribute :id, :string
7
+ attribute :specific_use, :string
8
+ attribute :xml_lang, :string
9
+ attribute :content, :string, collection: true
10
+ attribute :bold, ::Sts::IsoSts::Bold, collection: true
11
+ attribute :italic, ::Sts::IsoSts::Italic, collection: true
12
+ attribute :monospace, ::Sts::IsoSts::Monospace, collection: true
13
+ attribute :num, ::Sts::IsoSts::Num, collection: true
14
+ attribute :sc, ::Sts::IsoSts::Sc, collection: true
15
+ attribute :strike, ::Sts::IsoSts::Strike, collection: true
16
+ attribute :underline, ::Sts::IsoSts::Underline, collection: true
17
+ attribute :sub, ::Sts::IsoSts::Sub, collection: true
18
+ attribute :sup, ::Sts::IsoSts::Sup, collection: true
19
+
20
+ xml do
21
+ element "meta-value"
22
+ mixed_content
23
+
24
+ map_attribute "id", to: :id
25
+ map_attribute "specific-use", to: :specific_use
26
+ map_attribute "xml:lang", to: :xml_lang
27
+
28
+ map_content to: :content
29
+ map_element "bold", to: :bold
30
+ map_element "italic", to: :italic
31
+ map_element "monospace", to: :monospace
32
+ map_element "num", to: :num
33
+ map_element "sc", to: :sc
34
+ map_element "strike", to: :strike
35
+ map_element "underline", to: :underline
36
+ map_element "sub", to: :sub
37
+ map_element "sup", to: :sup
38
+ end
39
+ end
40
+ end
41
+ end
@@ -20,7 +20,7 @@ module Sts
20
20
  attribute :permissions, ::Sts::IsoSts::Permissions, collection: true
21
21
  attribute :std_xref, ::Sts::IsoSts::StandardCrossReference,
22
22
  collection: true
23
- attribute :custom_meta_group, ::Sts::NisoSts::CustomMetaGroup,
23
+ attribute :custom_meta_group, ::Sts::IsoSts::CustomMetaGroup,
24
24
  collection: true
25
25
  attribute :meta_date, ::Sts::IsoSts::MetaDate, collection: true
26
26
  attribute :pub_date, ::Sts::IsoSts::PubDate
@@ -9,7 +9,7 @@ module Sts
9
9
  attribute :copyright_year, ::Sts::IsoSts::CopyrightYear, collection: true
10
10
  attribute :copyright_holder, ::Sts::IsoSts::CopyrightHolder,
11
11
  collection: true
12
- attribute :license, ::Sts::NisoSts::License, collection: true
12
+ attribute :license, ::Sts::IsoSts::License, collection: true
13
13
 
14
14
  xml do
15
15
  element "permissions"
@@ -20,7 +20,7 @@ module Sts
20
20
  attribute :permissions, ::Sts::IsoSts::Permissions, collection: true
21
21
  attribute :std_xref, ::Sts::IsoSts::StandardCrossReference,
22
22
  collection: true
23
- attribute :custom_meta_group, ::Sts::NisoSts::CustomMetaGroup,
23
+ attribute :custom_meta_group, ::Sts::IsoSts::CustomMetaGroup,
24
24
  collection: true
25
25
  attribute :meta_date, ::Sts::IsoSts::MetaDate, collection: true
26
26
  attribute :pub_date, ::Sts::IsoSts::PubDate
@@ -10,7 +10,7 @@ module Sts
10
10
  attribute :non_normative_example, ::Sts::IsoSts::NonNormativeExample
11
11
  attribute :fn_group, ::Sts::IsoSts::FnGroup
12
12
  attribute :fn, ::Sts::IsoSts::Fn
13
- attribute :attrib, ::Sts::NisoSts::Attrib
13
+ attribute :attrib, ::Sts::IsoSts::Attrib
14
14
  attribute :permissions, ::Sts::IsoSts::Permissions
15
15
 
16
16
  xml do
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sts
4
+ module IsoSts
5
+ class TermHead < Lutaml::Model::Serializable
6
+ attribute :id, :string
7
+ attribute :content_type, :string
8
+ attribute :specific_use, :string
9
+ attribute :xml_lang, :string
10
+ attribute :content, :string, collection: true
11
+ attribute :email, ::Sts::IsoSts::Email, collection: true
12
+ attribute :ext_link, ::Sts::IsoSts::ExtLink, collection: true
13
+ attribute :uri, ::Sts::IsoSts::Uri, collection: true
14
+ attribute :mixed_citation, ::Sts::IsoSts::MixedCitation, collection: true
15
+ attribute :std, ::Sts::IsoSts::Std, collection: true
16
+ attribute :bold, ::Sts::IsoSts::Bold, collection: true
17
+ attribute :italic, ::Sts::IsoSts::Italic, collection: true
18
+ attribute :monospace, ::Sts::IsoSts::Monospace, collection: true
19
+ attribute :num, ::Sts::IsoSts::Num, collection: true
20
+ attribute :sc, ::Sts::IsoSts::Sc, collection: true
21
+ attribute :strike, ::Sts::IsoSts::Strike, collection: true
22
+ attribute :underline, ::Sts::IsoSts::Underline, collection: true
23
+ attribute :inline_graphic, ::Sts::IsoSts::InlineGraphic, collection: true
24
+ attribute :inline_formula, ::Sts::IsoSts::InlineFormula, collection: true
25
+ attribute :abbrev, ::Sts::IsoSts::Abbrev, collection: true
26
+ attribute :milestone_end, ::Sts::IsoSts::MilestoneEnd, collection: true
27
+ attribute :milestone_start, ::Sts::IsoSts::MilestoneStart,
28
+ collection: true
29
+ attribute :named_content, ::Sts::IsoSts::NamedContent, collection: true
30
+ attribute :styled_content, ::Sts::IsoSts::StyledContent, collection: true
31
+ attribute :fn, ::Sts::IsoSts::Fn, collection: true
32
+ attribute :xref, ::Sts::IsoSts::Xref, collection: true
33
+ attribute :std_ref, ::Sts::IsoSts::StdRef, collection: true
34
+ attribute :sub, ::Sts::IsoSts::Sub, collection: true
35
+ attribute :sup, ::Sts::IsoSts::Sup, collection: true
36
+
37
+ xml do # rubocop:disable Metrics/BlockLength
38
+ element "term-head"
39
+ mixed_content
40
+
41
+ map_attribute "id", to: :id
42
+ map_attribute "content-type", to: :content_type
43
+ map_attribute "specific-use", to: :specific_use
44
+ map_attribute "xml:lang", to: :xml_lang
45
+
46
+ map_content to: :content
47
+ map_element "email", to: :email
48
+ map_element "ext-link", to: :ext_link
49
+ map_element "uri", to: :uri
50
+ map_element "mixed-citation", to: :mixed_citation
51
+ map_element "std", to: :std
52
+ map_element "bold", to: :bold
53
+ map_element "italic", to: :italic
54
+ map_element "monospace", to: :monospace
55
+ map_element "num", to: :num
56
+ map_element "sc", to: :sc
57
+ map_element "strike", to: :strike
58
+ map_element "underline", to: :underline
59
+ map_element "inline-graphic", to: :inline_graphic
60
+ map_element "inline-formula", to: :inline_formula
61
+ map_element "abbrev", to: :abbrev
62
+ map_element "milestone-end", to: :milestone_end
63
+ map_element "milestone-start", to: :milestone_start
64
+ map_element "named-content", to: :named_content
65
+ map_element "styled-content", to: :styled_content
66
+ map_element "fn", to: :fn
67
+ map_element "xref", to: :xref
68
+ map_element "std-ref", to: :std_ref
69
+ map_element "sub", to: :sub
70
+ map_element "sup", to: :sup
71
+ end
72
+ end
73
+ end
74
+ end
data/lib/sts/iso_sts.rb CHANGED
@@ -101,12 +101,19 @@ module Sts
101
101
  # Shared model foundations
102
102
  autoload :Abbrev, "#{__dir__}/iso_sts/abbrev"
103
103
  autoload :Annotation, "#{__dir__}/iso_sts/annotation"
104
+ autoload :Attrib, "#{__dir__}/iso_sts/attrib"
104
105
  autoload :Country, "#{__dir__}/iso_sts/country"
106
+ autoload :CustomMeta, "#{__dir__}/iso_sts/custom_meta"
107
+ autoload :CustomMetaGroup, "#{__dir__}/iso_sts/custom_meta_group"
105
108
  autoload :Day, "#{__dir__}/iso_sts/day"
106
109
  autoload :Etal, "#{__dir__}/iso_sts/etal"
107
110
  autoload :Fax, "#{__dir__}/iso_sts/fax"
108
111
  autoload :InlineGraphic, "#{__dir__}/iso_sts/inline_graphic"
109
112
  autoload :Institution, "#{__dir__}/iso_sts/institution"
113
+ autoload :License, "#{__dir__}/iso_sts/license"
114
+ autoload :LicenseP, "#{__dir__}/iso_sts/license_p"
115
+ autoload :MetaName, "#{__dir__}/iso_sts/meta_name"
116
+ autoload :MetaValue, "#{__dir__}/iso_sts/meta_value"
110
117
  autoload :MilestoneEnd, "#{__dir__}/iso_sts/milestone_end"
111
118
  autoload :MilestoneStart, "#{__dir__}/iso_sts/milestone_start"
112
119
  autoload :Month, "#{__dir__}/iso_sts/month"
@@ -114,6 +121,7 @@ module Sts
114
121
  autoload :ObjectId, "#{__dir__}/iso_sts/object_id"
115
122
  autoload :Phone, "#{__dir__}/iso_sts/phone"
116
123
  autoload :Season, "#{__dir__}/iso_sts/season"
124
+ autoload :TermHead, "#{__dir__}/iso_sts/term_head"
117
125
 
118
126
  # List elements
119
127
  autoload :List, "#{__dir__}/iso_sts/list"
@@ -157,8 +165,5 @@ module Sts
157
165
  autoload :AnnexType, "#{__dir__}/iso_sts/annex_type"
158
166
  autoload :FnGroup, "#{__dir__}/iso_sts/fn_group"
159
167
  autoload :Fn, "#{__dir__}/iso_sts/fn"
160
-
161
- # MathML2 wrapper
162
- autoload :Mathml2, "#{__dir__}/iso_sts/mathml2"
163
168
  end
164
169
  end
data/lib/sts/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Sts
4
- VERSION = "0.6.5"
4
+ VERSION = "0.6.7"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sts
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.5
4
+ version: 0.6.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-07-25 00:00:00.000000000 Z
11
+ date: 2026-07-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bigdecimal
@@ -106,6 +106,18 @@ files:
106
106
  - TODO.finalize/09-lutaml-model-pr.md
107
107
  - TODO.finalize/10-audit-other-duplicates.md
108
108
  - TODO.finalize/11-strengthen-anti-patterns-spec.md
109
+ - TODO.roadmap/00-overview.md
110
+ - TODO.roadmap/01-lutaml-model-namespace-scope-uri-matching.md
111
+ - TODO.roadmap/02-lutaml-model-element-builder-dispatch.md
112
+ - TODO.roadmap/03-issue-40-child-bearing-roots.md
113
+ - TODO.roadmap/04-issue-40-recursive-roots.md
114
+ - TODO.roadmap/05-content-mathml-unification.md
115
+ - TODO.roadmap/06-mathml-namespace-deduplication.md
116
+ - TODO.roadmap/07-tbxisotml-misclassification-audit.md
117
+ - TODO.roadmap/08-register-versioning.md
118
+ - TODO.roadmap/09-test-coverage-gaps.md
119
+ - TODO.roadmap/10-iso-sts-common-attributes-module.md
120
+ - TODO.roadmap/11-docs-and-readme-refresh.md
109
121
  - TODO.sts-refactor/00-overview.md
110
122
  - TODO.sts-refactor/01-mathml-delegation.md
111
123
  - TODO.sts-refactor/02-type-resolution.md
@@ -127,6 +139,7 @@ files:
127
139
  - lib/sts/iso_sts/app.rb
128
140
  - lib/sts/iso_sts/app_group.rb
129
141
  - lib/sts/iso_sts/array.rb
142
+ - lib/sts/iso_sts/attrib.rb
130
143
  - lib/sts/iso_sts/back.rb
131
144
  - lib/sts/iso_sts/body.rb
132
145
  - lib/sts/iso_sts/bold.rb
@@ -141,6 +154,8 @@ files:
141
154
  - lib/sts/iso_sts/copyright_statement.rb
142
155
  - lib/sts/iso_sts/copyright_year.rb
143
156
  - lib/sts/iso_sts/country.rb
157
+ - lib/sts/iso_sts/custom_meta.rb
158
+ - lib/sts/iso_sts/custom_meta_group.rb
144
159
  - lib/sts/iso_sts/day.rb
145
160
  - lib/sts/iso_sts/def.rb
146
161
  - lib/sts/iso_sts/def_item.rb
@@ -172,13 +187,15 @@ files:
172
187
  - lib/sts/iso_sts/italic.rb
173
188
  - lib/sts/iso_sts/label.rb
174
189
  - lib/sts/iso_sts/language.rb
190
+ - lib/sts/iso_sts/license.rb
191
+ - lib/sts/iso_sts/license_p.rb
175
192
  - lib/sts/iso_sts/list.rb
176
193
  - lib/sts/iso_sts/list_item.rb
177
194
  - lib/sts/iso_sts/long_desc.rb
178
195
  - lib/sts/iso_sts/lpage.rb
179
- - lib/sts/iso_sts/mathml2.rb
180
- - lib/sts/iso_sts/mathml2/math.rb
181
196
  - lib/sts/iso_sts/meta_date.rb
197
+ - lib/sts/iso_sts/meta_name.rb
198
+ - lib/sts/iso_sts/meta_value.rb
182
199
  - lib/sts/iso_sts/milestone_end.rb
183
200
  - lib/sts/iso_sts/milestone_start.rb
184
201
  - lib/sts/iso_sts/mixed_citation.rb
@@ -234,6 +251,7 @@ files:
234
251
  - lib/sts/iso_sts/tbody.rb
235
252
  - lib/sts/iso_sts/td.rb
236
253
  - lib/sts/iso_sts/term.rb
254
+ - lib/sts/iso_sts/term_head.rb
237
255
  - lib/sts/iso_sts/term_sec.rb
238
256
  - lib/sts/iso_sts/tex_math.rb
239
257
  - lib/sts/iso_sts/tfoot.rb