sts 0.5.2 → 0.5.4

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 (446) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +3 -0
  3. data/.rubocop.yml +3 -0
  4. data/.rubocop_todo.yml +17 -3
  5. data/CLAUDE.md +72 -0
  6. data/GAPS.guidelines.iso-sts-ed2.1/01-maintenance.md +19 -0
  7. data/GAPS.guidelines.iso-sts-ed2.1/03-general.md +75 -0
  8. data/GAPS.guidelines.iso-sts-ed2.1/04-structure.md +75 -0
  9. data/GAPS.guidelines.iso-sts-ed2.1/05-content.md +63 -0
  10. data/GAPS.guidelines.iso-sts-ed2.1/06-tables.md +53 -0
  11. data/GAPS.guidelines.iso-sts-ed2.1/07-formulae.md +41 -0
  12. data/GAPS.guidelines.iso-sts-ed2.1/08-figures.md +45 -0
  13. data/GAPS.guidelines.iso-sts-ed2.1/09-terms.md +56 -0
  14. data/GAPS.guidelines.iso-sts-ed2.1/10-references.md +56 -0
  15. data/GAPS.guidelines.iso-sts-ed2.1/annex-a-multilingual.md +79 -0
  16. data/GAPS.guidelines.niso-sts-v1.0/01-introduction-scope.md +27 -0
  17. data/GAPS.guidelines.niso-sts-v1.0/02-document-structure.md +100 -0
  18. data/GAPS.guidelines.niso-sts-v1.0/03-front-matter.md +149 -0
  19. data/GAPS.guidelines.niso-sts-v1.0/04-body-content.md +209 -0
  20. data/GAPS.guidelines.niso-sts-v1.0/05-tables-figures.md +152 -0
  21. data/GAPS.guidelines.niso-sts-v1.0/06-math-formulae.md +128 -0
  22. data/GAPS.guidelines.niso-sts-v1.0/07-references.md +113 -0
  23. data/GAPS.guidelines.niso-sts-v1.0/08-terminology.md +127 -0
  24. data/GAPS.guidelines.niso-sts-v1.0/09-metadata.md +113 -0
  25. data/GAPS.guidelines.niso-sts-v1.0/10-iso-iec-variant.md +141 -0
  26. data/GAPS.guidelines.niso-sts-v1.0/SUMMARY.md +96 -0
  27. data/GAPS.guidelines.schema-xref.md +101 -0
  28. data/Gemfile +2 -1
  29. data/TODO.sts-refactor/00-overview.md +172 -0
  30. data/TODO.sts-refactor/01-mathml-delegation.md +153 -0
  31. data/TODO.sts-refactor/02-type-resolution.md +122 -0
  32. data/TODO.sts-refactor/03-namespace-coupling.md +158 -0
  33. data/TODO.sts-refactor/04-register-versioning.md +180 -0
  34. data/TODO.sts-refactor/05-missing-elements.md +195 -0
  35. data/TODO.sts-refactor/06-missing-attributes.md +152 -0
  36. data/TODO.sts-refactor/07-incomplete-models.md +180 -0
  37. data/TODO.sts-refactor/08-isoiec-profile.md +169 -0
  38. data/TODO.sts-refactor/09-autoload-cleanup.md +88 -0
  39. data/TODO.sts-refactor/10-test-coverage.md +164 -0
  40. data/TODO.sts-refactor/11-duplicate-models.md +168 -0
  41. data/lib/sts/iso_sts/annex_type.rb +2 -0
  42. data/lib/sts/iso_sts/app.rb +26 -1
  43. data/lib/sts/iso_sts/app_group.rb +1 -0
  44. data/lib/sts/iso_sts/array.rb +1 -0
  45. data/lib/sts/iso_sts/back.rb +1 -0
  46. data/lib/sts/iso_sts/body.rb +4 -0
  47. data/lib/sts/iso_sts/bold.rb +23 -11
  48. data/lib/sts/iso_sts/break.rb +3 -0
  49. data/lib/sts/iso_sts/caption.rb +1 -0
  50. data/lib/sts/iso_sts/comm_ref.rb +2 -0
  51. data/lib/sts/iso_sts/content_language.rb +22 -0
  52. data/lib/sts/iso_sts/copyright_holder.rb +4 -2
  53. data/lib/sts/iso_sts/copyright_statement.rb +4 -2
  54. data/lib/sts/iso_sts/copyright_year.rb +3 -0
  55. data/lib/sts/iso_sts/def.rb +1 -0
  56. data/lib/sts/iso_sts/def_item.rb +1 -0
  57. data/lib/sts/iso_sts/def_list.rb +1 -0
  58. data/lib/sts/iso_sts/disp_formula.rb +5 -1
  59. data/lib/sts/iso_sts/doc_ref.rb +2 -0
  60. data/lib/sts/iso_sts/document_identification.rb +3 -0
  61. data/lib/sts/iso_sts/edition.rb +2 -0
  62. data/lib/sts/iso_sts/ext_link.rb +1 -1
  63. data/lib/sts/iso_sts/fig.rb +1 -0
  64. data/lib/sts/iso_sts/fn.rb +1 -0
  65. data/lib/sts/iso_sts/fn_group.rb +1 -0
  66. data/lib/sts/iso_sts/front.rb +5 -0
  67. data/lib/sts/iso_sts/graphic.rb +5 -0
  68. data/lib/sts/iso_sts/inline_formula.rb +1 -1
  69. data/lib/sts/iso_sts/iso_meta.rb +4 -3
  70. data/lib/sts/iso_sts/italic.rb +23 -11
  71. data/lib/sts/iso_sts/label.rb +7 -5
  72. data/lib/sts/iso_sts/language.rb +2 -0
  73. data/lib/sts/iso_sts/list.rb +1 -0
  74. data/lib/sts/iso_sts/list_item.rb +7 -4
  75. data/lib/sts/iso_sts/mathml2/math.rb +20 -18
  76. data/lib/sts/iso_sts/meta_date.rb +20 -0
  77. data/lib/sts/iso_sts/mixed_citation.rb +35 -11
  78. data/lib/sts/iso_sts/monospace.rb +26 -0
  79. data/lib/sts/iso_sts/named_content.rb +44 -0
  80. data/lib/sts/iso_sts/nat_meta.rb +5 -4
  81. data/lib/sts/iso_sts/non_normative_example.rb +5 -0
  82. data/lib/sts/iso_sts/non_normative_note.rb +1 -0
  83. data/lib/sts/iso_sts/page_count.rb +2 -0
  84. data/lib/sts/iso_sts/paragraph.rb +34 -22
  85. data/lib/sts/iso_sts/permissions.rb +3 -0
  86. data/lib/sts/iso_sts/preformat.rb +8 -5
  87. data/lib/sts/iso_sts/ref.rb +1 -0
  88. data/lib/sts/iso_sts/ref_list.rb +1 -0
  89. data/lib/sts/iso_sts/reg_meta.rb +5 -4
  90. data/lib/sts/iso_sts/release_date.rb +2 -0
  91. data/lib/sts/iso_sts/sc.rb +26 -0
  92. data/lib/sts/iso_sts/sec.rb +12 -2
  93. data/lib/sts/iso_sts/secretariat.rb +2 -0
  94. data/lib/sts/iso_sts/standard.rb +6 -0
  95. data/lib/sts/iso_sts/standard_cross_reference.rb +5 -2
  96. data/lib/sts/iso_sts/standard_identification.rb +3 -0
  97. data/lib/sts/iso_sts/standard_ref.rb +16 -0
  98. data/lib/sts/iso_sts/std.rb +7 -5
  99. data/lib/sts/iso_sts/std_ref.rb +2 -0
  100. data/lib/sts/iso_sts/strike.rb +26 -0
  101. data/lib/sts/iso_sts/styled_content.rb +19 -15
  102. data/lib/sts/iso_sts/sub.rb +2 -0
  103. data/lib/sts/iso_sts/sup.rb +2 -0
  104. data/lib/sts/iso_sts/table.rb +1 -0
  105. data/lib/sts/iso_sts/table_wrap.rb +1 -0
  106. data/lib/sts/iso_sts/table_wrap_foot.rb +3 -0
  107. data/lib/sts/iso_sts/td.rb +32 -14
  108. data/lib/sts/iso_sts/term.rb +6 -6
  109. data/lib/sts/iso_sts/term_sec.rb +1 -0
  110. data/lib/sts/iso_sts/th.rb +32 -14
  111. data/lib/sts/iso_sts/title.rb +17 -7
  112. data/lib/sts/iso_sts/title_compl.rb +2 -0
  113. data/lib/sts/iso_sts/title_full.rb +2 -0
  114. data/lib/sts/iso_sts/title_intro.rb +2 -0
  115. data/lib/sts/iso_sts/title_main.rb +2 -0
  116. data/lib/sts/iso_sts/title_wrap.rb +1 -0
  117. data/lib/sts/iso_sts/tr.rb +1 -0
  118. data/lib/sts/iso_sts/underline.rb +26 -0
  119. data/lib/sts/iso_sts/uri.rb +32 -0
  120. data/lib/sts/iso_sts/xref.rb +3 -3
  121. data/lib/sts/iso_sts.rb +11 -0
  122. data/lib/sts/mathml.rb +21 -0
  123. data/lib/sts/namespaces.rb +3 -0
  124. data/lib/sts/niso_sts/abstract.rb +3 -0
  125. data/lib/sts/niso_sts/access_date.rb +2 -0
  126. data/lib/sts/niso_sts/accrediting_organization.rb +2 -0
  127. data/lib/sts/niso_sts/ack.rb +1 -1
  128. data/lib/sts/niso_sts/addr_line.rb +2 -0
  129. data/lib/sts/niso_sts/address.rb +3 -0
  130. data/lib/sts/niso_sts/adoption.rb +1 -1
  131. data/lib/sts/niso_sts/adoption_front.rb +1 -0
  132. data/lib/sts/niso_sts/aff_alternatives.rb +3 -0
  133. data/lib/sts/niso_sts/alt_text.rb +2 -0
  134. data/lib/sts/niso_sts/alt_title.rb +2 -0
  135. data/lib/sts/niso_sts/alternatives.rb +3 -4
  136. data/lib/sts/niso_sts/annotation.rb +1 -3
  137. data/lib/sts/niso_sts/anonymous.rb +3 -0
  138. data/lib/sts/niso_sts/app.rb +16 -1
  139. data/lib/sts/niso_sts/app_group.rb +5 -0
  140. data/lib/sts/niso_sts/article_title.rb +2 -0
  141. data/lib/sts/niso_sts/attrib.rb +2 -0
  142. data/lib/sts/niso_sts/author_comment.rb +1 -3
  143. data/lib/sts/niso_sts/author_notes.rb +1 -1
  144. data/lib/sts/niso_sts/authorization.rb +2 -0
  145. data/lib/sts/niso_sts/award_group.rb +23 -4
  146. data/lib/sts/niso_sts/award_id.rb +6 -0
  147. data/lib/sts/niso_sts/back.rb +25 -6
  148. data/lib/sts/niso_sts/bio.rb +1 -3
  149. data/lib/sts/niso_sts/body.rb +38 -0
  150. data/lib/sts/niso_sts/boxed_text.rb +41 -3
  151. data/lib/sts/niso_sts/break.rb +14 -0
  152. data/lib/sts/niso_sts/caption.rb +15 -1
  153. data/lib/sts/niso_sts/chapter_title.rb +2 -0
  154. data/lib/sts/niso_sts/chem_struct.rb +2 -0
  155. data/lib/sts/niso_sts/chem_struct_wrap.rb +1 -0
  156. data/lib/sts/niso_sts/citation_alternatives.rb +3 -0
  157. data/lib/sts/niso_sts/city.rb +2 -0
  158. data/lib/sts/niso_sts/code.rb +111 -0
  159. data/lib/sts/niso_sts/collab.rb +8 -0
  160. data/lib/sts/niso_sts/collab_alternatives.rb +3 -0
  161. data/lib/sts/niso_sts/comm_ref_group.rb +3 -0
  162. data/lib/sts/niso_sts/comment.rb +2 -0
  163. data/lib/sts/niso_sts/compound_subject.rb +29 -0
  164. data/lib/sts/niso_sts/compound_subject_part.rb +39 -0
  165. data/lib/sts/niso_sts/conf_acronym.rb +2 -0
  166. data/lib/sts/niso_sts/conf_date.rb +2 -0
  167. data/lib/sts/niso_sts/conf_loc.rb +2 -0
  168. data/lib/sts/niso_sts/conf_name.rb +2 -0
  169. data/lib/sts/niso_sts/conf_num.rb +2 -0
  170. data/lib/sts/niso_sts/conf_sponsor.rb +2 -0
  171. data/lib/sts/niso_sts/conf_theme.rb +2 -0
  172. data/lib/sts/niso_sts/conference.rb +3 -0
  173. data/lib/sts/niso_sts/content_language.rb +2 -0
  174. data/lib/sts/niso_sts/contrib.rb +1 -0
  175. data/lib/sts/niso_sts/contrib_group.rb +1 -0
  176. data/lib/sts/niso_sts/contrib_id.rb +2 -0
  177. data/lib/sts/niso_sts/copyright_holder.rb +2 -0
  178. data/lib/sts/niso_sts/copyright_statement.rb +2 -0
  179. data/lib/sts/niso_sts/copyright_year.rb +2 -0
  180. data/lib/sts/niso_sts/country.rb +2 -0
  181. data/lib/sts/niso_sts/counts.rb +3 -0
  182. data/lib/sts/niso_sts/custom_meta.rb +3 -0
  183. data/lib/sts/niso_sts/custom_meta_group.rb +3 -0
  184. data/lib/sts/niso_sts/data_title.rb +29 -0
  185. data/lib/sts/niso_sts/date.rb +3 -0
  186. data/lib/sts/niso_sts/date_in_citation.rb +2 -0
  187. data/lib/sts/niso_sts/day.rb +2 -0
  188. data/lib/sts/niso_sts/def.rb +3 -0
  189. data/lib/sts/niso_sts/def_head.rb +18 -0
  190. data/lib/sts/niso_sts/def_item.rb +13 -0
  191. data/lib/sts/niso_sts/def_list.rb +25 -3
  192. data/lib/sts/niso_sts/degrees.rb +2 -0
  193. data/lib/sts/niso_sts/disp_formula_group.rb +1 -4
  194. data/lib/sts/niso_sts/disp_quote.rb +3 -1
  195. data/lib/sts/niso_sts/display_formula.rb +47 -2
  196. data/lib/sts/niso_sts/doc_number.rb +2 -0
  197. data/lib/sts/niso_sts/doc_type.rb +2 -0
  198. data/lib/sts/niso_sts/document_identification.rb +1 -0
  199. data/lib/sts/niso_sts/editing_instruction.rb +9 -5
  200. data/lib/sts/niso_sts/edition.rb +2 -0
  201. data/lib/sts/niso_sts/element_citation.rb +1 -1
  202. data/lib/sts/niso_sts/elocation_id.rb +2 -0
  203. data/lib/sts/niso_sts/email.rb +2 -0
  204. data/lib/sts/niso_sts/equation_count.rb +2 -0
  205. data/lib/sts/niso_sts/era.rb +2 -0
  206. data/lib/sts/niso_sts/ext_link.rb +32 -2
  207. data/lib/sts/niso_sts/fax.rb +2 -0
  208. data/lib/sts/niso_sts/fig_count.rb +2 -0
  209. data/lib/sts/niso_sts/fig_group.rb +1 -0
  210. data/lib/sts/niso_sts/figure.rb +14 -1
  211. data/lib/sts/niso_sts/floats_group.rb +3 -4
  212. data/lib/sts/niso_sts/fn.rb +2 -1
  213. data/lib/sts/niso_sts/fn_group.rb +3 -0
  214. data/lib/sts/niso_sts/fpage.rb +2 -0
  215. data/lib/sts/niso_sts/front.rb +16 -0
  216. data/lib/sts/niso_sts/funding_group.rb +1 -0
  217. data/lib/sts/niso_sts/funding_source.rb +2 -0
  218. data/lib/sts/niso_sts/given_names.rb +2 -0
  219. data/lib/sts/niso_sts/glossary.rb +1 -1
  220. data/lib/sts/niso_sts/gov.rb +2 -0
  221. data/lib/sts/niso_sts/graphic.rb +6 -0
  222. data/lib/sts/niso_sts/hr.rb +3 -0
  223. data/lib/sts/niso_sts/ics.rb +5 -0
  224. data/lib/sts/niso_sts/ics_desc.rb +2 -0
  225. data/lib/sts/niso_sts/ics_wrap.rb +9 -0
  226. data/lib/sts/niso_sts/index.rb +32 -0
  227. data/lib/sts/niso_sts/index_div.rb +30 -0
  228. data/lib/sts/niso_sts/index_entry.rb +32 -0
  229. data/lib/sts/niso_sts/index_term.rb +1 -0
  230. data/lib/sts/niso_sts/index_title_group.rb +22 -0
  231. data/lib/sts/niso_sts/inline_formula.rb +38 -2
  232. data/lib/sts/niso_sts/inline_media.rb +50 -0
  233. data/lib/sts/niso_sts/institution.rb +2 -0
  234. data/lib/sts/niso_sts/institution_id.rb +2 -0
  235. data/lib/sts/niso_sts/institution_wrap.rb +3 -0
  236. data/lib/sts/niso_sts/intro.rb +2 -0
  237. data/lib/sts/niso_sts/is_proof.rb +2 -0
  238. data/lib/sts/niso_sts/isbn.rb +2 -0
  239. data/lib/sts/niso_sts/issn.rb +2 -0
  240. data/lib/sts/niso_sts/issn_l.rb +2 -0
  241. data/lib/sts/niso_sts/issue.rb +2 -0
  242. data/lib/sts/niso_sts/kwd_group.rb +9 -0
  243. data/lib/sts/niso_sts/label.rb +7 -2
  244. data/lib/sts/niso_sts/legend.rb +39 -0
  245. data/lib/sts/niso_sts/license.rb +2 -0
  246. data/lib/sts/niso_sts/license_p.rb +2 -0
  247. data/lib/sts/niso_sts/list.rb +9 -2
  248. data/lib/sts/niso_sts/list_item.rb +9 -4
  249. data/lib/sts/niso_sts/long_desc.rb +2 -0
  250. data/lib/sts/niso_sts/lpage.rb +2 -0
  251. data/lib/sts/niso_sts/main.rb +2 -0
  252. data/lib/sts/niso_sts/media.rb +1 -0
  253. data/lib/sts/niso_sts/meta_date.rb +2 -0
  254. data/lib/sts/niso_sts/meta_note.rb +1 -1
  255. data/lib/sts/niso_sts/metadata_iso.rb +1 -1
  256. data/lib/sts/niso_sts/metadata_std.rb +16 -8
  257. data/lib/sts/niso_sts/milestone_end.rb +1 -3
  258. data/lib/sts/niso_sts/milestone_start.rb +1 -3
  259. data/lib/sts/niso_sts/mixed_citation.rb +22 -0
  260. data/lib/sts/niso_sts/mml_content.rb +0 -2
  261. data/lib/sts/niso_sts/monospace.rb +9 -0
  262. data/lib/sts/niso_sts/month.rb +2 -0
  263. data/lib/sts/niso_sts/name.rb +3 -0
  264. data/lib/sts/niso_sts/name_alternatives.rb +5 -0
  265. data/lib/sts/niso_sts/named_content.rb +51 -1
  266. data/lib/sts/niso_sts/nat_meta.rb +3 -0
  267. data/lib/sts/niso_sts/nested_kwd.rb +3 -0
  268. data/lib/sts/niso_sts/nlm_citation.rb +1 -1
  269. data/lib/sts/niso_sts/non_normative_example.rb +15 -2
  270. data/lib/sts/niso_sts/non_normative_note.rb +14 -2
  271. data/lib/sts/niso_sts/normative_example.rb +1 -1
  272. data/lib/sts/niso_sts/normative_note.rb +3 -1
  273. data/lib/sts/niso_sts/note.rb +1 -1
  274. data/lib/sts/niso_sts/notes.rb +1 -1
  275. data/lib/sts/niso_sts/notes_group.rb +1 -0
  276. data/lib/sts/niso_sts/object_id.rb +4 -0
  277. data/lib/sts/niso_sts/on_behalf_of.rb +2 -0
  278. data/lib/sts/niso_sts/open_access.rb +3 -4
  279. data/lib/sts/niso_sts/originator.rb +2 -0
  280. data/lib/sts/niso_sts/page_count.rb +2 -0
  281. data/lib/sts/niso_sts/page_range.rb +2 -0
  282. data/lib/sts/niso_sts/paragraph.rb +39 -7
  283. data/lib/sts/niso_sts/part_number.rb +2 -0
  284. data/lib/sts/niso_sts/part_of_speech.rb +2 -0
  285. data/lib/sts/niso_sts/patent.rb +2 -0
  286. data/lib/sts/niso_sts/permissions.rb +7 -1
  287. data/lib/sts/niso_sts/phone.rb +2 -0
  288. data/lib/sts/niso_sts/postal_code.rb +2 -0
  289. data/lib/sts/niso_sts/prefix.rb +2 -0
  290. data/lib/sts/niso_sts/preformat.rb +15 -0
  291. data/lib/sts/niso_sts/price.rb +2 -0
  292. data/lib/sts/niso_sts/principal_award_recipient.rb +2 -0
  293. data/lib/sts/niso_sts/principal_investigator.rb +2 -0
  294. data/lib/sts/niso_sts/private_char.rb +3 -3
  295. data/lib/sts/niso_sts/processing_meta.rb +54 -0
  296. data/lib/sts/niso_sts/product.rb +2 -0
  297. data/lib/sts/niso_sts/proj_id.rb +2 -0
  298. data/lib/sts/niso_sts/pub_date.rb +4 -0
  299. data/lib/sts/niso_sts/pub_id.rb +2 -0
  300. data/lib/sts/niso_sts/publisher.rb +3 -0
  301. data/lib/sts/niso_sts/publisher_loc.rb +2 -0
  302. data/lib/sts/niso_sts/publisher_name.rb +2 -0
  303. data/lib/sts/niso_sts/ref_count.rb +2 -0
  304. data/lib/sts/niso_sts/reference.rb +1 -0
  305. data/lib/sts/niso_sts/reference_list.rb +6 -1
  306. data/lib/sts/niso_sts/reference_standard.rb +4 -2
  307. data/lib/sts/niso_sts/reg_meta.rb +3 -0
  308. data/lib/sts/niso_sts/related_term.rb +2 -0
  309. data/lib/sts/niso_sts/release_date.rb +11 -6
  310. data/lib/sts/niso_sts/release_version.rb +2 -0
  311. data/lib/sts/niso_sts/release_version_id.rb +2 -0
  312. data/lib/sts/niso_sts/role.rb +35 -0
  313. data/lib/sts/niso_sts/ruby.rb +1 -0
  314. data/lib/sts/niso_sts/sdo.rb +2 -0
  315. data/lib/sts/niso_sts/season.rb +2 -0
  316. data/lib/sts/niso_sts/sec_meta.rb +26 -0
  317. data/lib/sts/niso_sts/secretariat.rb +2 -0
  318. data/lib/sts/niso_sts/section.rb +47 -4
  319. data/lib/sts/niso_sts/see_also_entry.rb +26 -0
  320. data/lib/sts/niso_sts/see_entry.rb +26 -0
  321. data/lib/sts/niso_sts/self_uri.rb +2 -0
  322. data/lib/sts/niso_sts/series.rb +2 -0
  323. data/lib/sts/niso_sts/series_text.rb +2 -0
  324. data/lib/sts/niso_sts/series_title.rb +2 -0
  325. data/lib/sts/niso_sts/sig.rb +2 -0
  326. data/lib/sts/niso_sts/size.rb +2 -0
  327. data/lib/sts/niso_sts/source.rb +29 -0
  328. data/lib/sts/niso_sts/speaker.rb +2 -0
  329. data/lib/sts/niso_sts/speech.rb +1 -1
  330. data/lib/sts/niso_sts/standard.rb +3 -0
  331. data/lib/sts/niso_sts/standard_identification.rb +3 -1
  332. data/lib/sts/niso_sts/state.rb +2 -0
  333. data/lib/sts/niso_sts/statement.rb +1 -1
  334. data/lib/sts/niso_sts/std_doc_meta.rb +50 -11
  335. data/lib/sts/niso_sts/std_id.rb +2 -0
  336. data/lib/sts/niso_sts/std_id_group.rb +3 -0
  337. data/lib/sts/niso_sts/std_org.rb +1 -0
  338. data/lib/sts/niso_sts/std_org_abbrev.rb +2 -0
  339. data/lib/sts/niso_sts/std_org_group.rb +3 -0
  340. data/lib/sts/niso_sts/std_org_name.rb +2 -0
  341. data/lib/sts/niso_sts/std_organization.rb +2 -0
  342. data/lib/sts/niso_sts/string_conf.rb +2 -0
  343. data/lib/sts/niso_sts/string_date.rb +2 -0
  344. data/lib/sts/niso_sts/string_name.rb +2 -0
  345. data/lib/sts/niso_sts/styled_content.rb +39 -0
  346. data/lib/sts/niso_sts/sub.rb +11 -0
  347. data/lib/sts/niso_sts/subj_group.rb +11 -0
  348. data/lib/sts/niso_sts/subtitle.rb +2 -0
  349. data/lib/sts/niso_sts/suffix.rb +2 -0
  350. data/lib/sts/niso_sts/sup.rb +13 -0
  351. data/lib/sts/niso_sts/suppl_number.rb +2 -0
  352. data/lib/sts/niso_sts/suppl_type.rb +2 -0
  353. data/lib/sts/niso_sts/suppl_version.rb +2 -0
  354. data/lib/sts/niso_sts/supplementary_material.rb +1 -0
  355. data/lib/sts/niso_sts/surname.rb +2 -0
  356. data/lib/sts/niso_sts/table_count.rb +2 -0
  357. data/lib/sts/niso_sts/table_wrap_group.rb +32 -0
  358. data/lib/sts/niso_sts/term_display.rb +22 -0
  359. data/lib/sts/niso_sts/term_display_string.rb +22 -0
  360. data/lib/sts/niso_sts/term_head.rb +2 -0
  361. data/lib/sts/niso_sts/term_section.rb +3 -3
  362. data/lib/sts/niso_sts/term_source.rb +2 -0
  363. data/lib/sts/niso_sts/tex_math.rb +2 -0
  364. data/lib/sts/niso_sts/textual_form.rb +2 -0
  365. data/lib/sts/niso_sts/time_stamp.rb +2 -0
  366. data/lib/sts/niso_sts/title.rb +26 -0
  367. data/lib/sts/niso_sts/title_wrap.rb +2 -0
  368. data/lib/sts/niso_sts/toc.rb +32 -0
  369. data/lib/sts/niso_sts/toc_div.rb +30 -0
  370. data/lib/sts/niso_sts/toc_entry.rb +30 -0
  371. data/lib/sts/niso_sts/toc_title_group.rb +22 -0
  372. data/lib/sts/niso_sts/trans_abstract.rb +1 -0
  373. data/lib/sts/niso_sts/trans_source.rb +2 -0
  374. data/lib/sts/niso_sts/trans_title.rb +2 -0
  375. data/lib/sts/niso_sts/trans_title_group.rb +3 -0
  376. data/lib/sts/niso_sts/underline.rb +5 -0
  377. data/lib/sts/niso_sts/uri.rb +4 -0
  378. data/lib/sts/niso_sts/urn.rb +2 -0
  379. data/lib/sts/niso_sts/verse_group.rb +1 -1
  380. data/lib/sts/niso_sts/verse_line.rb +2 -0
  381. data/lib/sts/niso_sts/version.rb +2 -0
  382. data/lib/sts/niso_sts/volume.rb +2 -0
  383. data/lib/sts/niso_sts/volume_id.rb +2 -0
  384. data/lib/sts/niso_sts/volume_issue_group.rb +3 -4
  385. data/lib/sts/niso_sts/volume_series.rb +2 -0
  386. data/lib/sts/niso_sts/word_count.rb +2 -0
  387. data/lib/sts/niso_sts/year.rb +2 -0
  388. data/lib/sts/niso_sts.rb +35 -10
  389. data/lib/sts/profiles/iso_iec/constraints.rb +43 -0
  390. data/lib/sts/profiles/iso_iec/validator.rb +73 -0
  391. data/lib/sts/profiles/iso_iec.rb +10 -0
  392. data/lib/sts/profiles.rb +7 -0
  393. data/lib/sts/tbx_iso_tml/bold.rb +30 -1
  394. data/lib/sts/tbx_iso_tml/caption.rb +3 -0
  395. data/lib/sts/tbx_iso_tml/col.rb +10 -0
  396. data/lib/sts/tbx_iso_tml/cross_reference.rb +2 -0
  397. data/lib/sts/tbx_iso_tml/definition.rb +18 -2
  398. data/lib/sts/tbx_iso_tml/entailed_term.rb +2 -0
  399. data/lib/sts/tbx_iso_tml/example.rb +9 -3
  400. data/lib/sts/tbx_iso_tml/external_graphic.rb +2 -0
  401. data/lib/sts/tbx_iso_tml/external_source.rb +2 -0
  402. data/lib/sts/tbx_iso_tml/fn.rb +3 -2
  403. data/lib/sts/tbx_iso_tml/fn_group.rb +3 -0
  404. data/lib/sts/tbx_iso_tml/geographical_usage.rb +3 -0
  405. data/lib/sts/tbx_iso_tml/grammatical_gender.rb +2 -0
  406. data/lib/sts/tbx_iso_tml/grammatical_number.rb +2 -0
  407. data/lib/sts/tbx_iso_tml/italic.rb +27 -1
  408. data/lib/sts/tbx_iso_tml/lang_set.rb +2 -0
  409. data/lib/sts/tbx_iso_tml/mfenced.rb +2 -0
  410. data/lib/sts/tbx_iso_tml/mfrac.rb +2 -2
  411. data/lib/sts/tbx_iso_tml/mi.rb +3 -2
  412. data/lib/sts/tbx_iso_tml/mrow.rb +2 -2
  413. data/lib/sts/tbx_iso_tml/mspace.rb +2 -0
  414. data/lib/sts/tbx_iso_tml/mstyle.rb +2 -2
  415. data/lib/sts/tbx_iso_tml/msub.rb +2 -0
  416. data/lib/sts/tbx_iso_tml/msup.rb +4 -1
  417. data/lib/sts/tbx_iso_tml/munder.rb +3 -0
  418. data/lib/sts/tbx_iso_tml/munderover.rb +2 -0
  419. data/lib/sts/tbx_iso_tml/normative_authorization.rb +2 -0
  420. data/lib/sts/tbx_iso_tml/note.rb +11 -7
  421. data/lib/sts/tbx_iso_tml/part_of_speech.rb +2 -0
  422. data/lib/sts/tbx_iso_tml/pronunciation.rb +3 -0
  423. data/lib/sts/tbx_iso_tml/see.rb +2 -0
  424. data/lib/sts/tbx_iso_tml/semantics.rb +2 -0
  425. data/lib/sts/tbx_iso_tml/source.rb +6 -0
  426. data/lib/sts/tbx_iso_tml/subject_field.rb +2 -0
  427. data/lib/sts/tbx_iso_tml/sup.rb +3 -2
  428. data/lib/sts/tbx_iso_tml/table.rb +1 -0
  429. data/lib/sts/tbx_iso_tml/table_wrap.rb +3 -1
  430. data/lib/sts/tbx_iso_tml/table_wrap_foot.rb +3 -0
  431. data/lib/sts/tbx_iso_tml/tbody.rb +9 -1
  432. data/lib/sts/tbx_iso_tml/td.rb +122 -17
  433. data/lib/sts/tbx_iso_tml/term.rb +9 -5
  434. data/lib/sts/tbx_iso_tml/term_type.rb +2 -0
  435. data/lib/sts/tbx_iso_tml/tfoot.rb +5 -1
  436. data/lib/sts/tbx_iso_tml/th.rb +133 -18
  437. data/lib/sts/tbx_iso_tml/thead.rb +9 -1
  438. data/lib/sts/tbx_iso_tml/tr.rb +16 -0
  439. data/lib/sts/tbx_iso_tml/xref.rb +2 -2
  440. data/lib/sts/version.rb +1 -1
  441. data/lib/sts.rb +1 -2
  442. data/reference-docs/Guidelines for coding ed.2.1.pdf +0 -0
  443. data/reference-docs/NISO-STS-1-2-compare-1-0.pdf +0 -0
  444. data/reference-docs/NISOSTS-guidelines-v1.0.pdf +0 -0
  445. metadata +76 -3
  446. data/lib/sts/niso_sts/mathml.rb +0 -69
@@ -0,0 +1,56 @@
1
+ # Section 10: References
2
+
3
+ ## Overview
4
+ Section 10 covers document-internal references (cross-references) and references to other documents. It details `<xref>` usage with various `@ref-type` values, footnotes, URLs, and supplementary material.
5
+
6
+ ## Element Coverage
7
+
8
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
9
+ |---------|-----------------|---------------|--------|-------|
10
+ | `<xref>` | Cross-references | `TbxIsoTml::Xref` | Partial | Missing `@custom-type` attribute; content handling limited |
11
+ | `<fn>` | Footnotes | `NisoSts::Fn` / `TbxIsoTml::Fn` | Supported | Has `@id`, `<label>`, `<p>` |
12
+ | `<fn-group>` | Footnote group (legacy IEC) | `NisoSts::FnGroup` | Supported | In `<back>` |
13
+ | `<ext-link>` | External URLs | `NisoSts::ExtLink` | Supported | Has `@ext-link-type`, `@xlink:href` |
14
+ | `<uri>` | URIs in text | `NisoSts::Uri` | Supported | |
15
+ | `<std>` | Standard references in text | `NisoSts::ReferenceStandard` | Partial | Missing `@content-type`, `@std-id` |
16
+ | `<mixed-citation>` | Non-standard document references | `NisoSts::MixedCitation` | Partial | Missing `@id`, `<break>`, `<uri>` children |
17
+ | `<supplementary-material>` | External supplementary files | `NisoSts::SupplementaryMaterial` | Supported | Has `@xlink:href`, content |
18
+ | `<inline-supplementary-material>` | Inline supplementary reference | `NisoSts::InlineSupplementaryMaterial` | Supported | |
19
+
20
+ ## Attribute Gaps
21
+
22
+ | Attribute | Parent Element | Guidelines Usage | Modeled | Status |
23
+ |-----------|---------------|-----------------|---------|--------|
24
+ | `@ref-type` | `<xref>` | "sec", "table", "fig", "disp-formula", "bibr", "fn", "table-fn", "app", "list", "abbreviation", "custom" | Yes | Supported |
25
+ | `@rid` | `<xref>` | Target element ID | Yes | Supported |
26
+ | `@custom-type` | `<xref>` | "term-entry", "note", "example" (with `@ref-type="custom"`) | No | **Missing** -- critical for term cross-refs |
27
+ | `@id` | `<xref>` | Element identifier (Sec 3.4) | No | Missing |
28
+ | `@ext-link-type` | `<ext-link>` | "uri" for URLs | Yes | Supported |
29
+ | `@xlink:href` | `<ext-link>` | Actual URL | Yes | Supported |
30
+ | `@id` | `<fn>` | Footnote identifier | Yes | Supported |
31
+ | `@id` | `<mixed-citation>` | Element identifier (Sec 3.4) | No | Missing |
32
+
33
+ ## Cross-Reference Type Values (Sec 10.1.1)
34
+
35
+ | `@ref-type` Value | Usage | Modeled | Notes |
36
+ |-------------------|-------|---------|-------|
37
+ | "abbreviation" | Cross-ref to abbreviations | Supported (string) | |
38
+ | "app" | Cross-ref to annexes | Supported | |
39
+ | "bibr" | Cross-ref to bibliography | Supported | |
40
+ | "custom" | With `@custom-type` for terms, notes, examples | Partial | `@custom-type` not modeled |
41
+ | "disp-formula" | Cross-ref to formulae | Supported | |
42
+ | "fig" | Cross-ref to figures | Supported | |
43
+ | "fn" | Cross-ref to footnotes | Supported | |
44
+ | "sec" | Cross-ref to sections | Supported | |
45
+ | "table" | Cross-ref to tables | Supported | |
46
+ | "table-fn" | Cross-ref to table footnotes | Supported | |
47
+ | "list" | Cross-ref to list items | Supported | |
48
+
49
+ ## Key Gaps
50
+ - [ ] **CRITICAL**: `TbxIsoTml::Xref` missing `@custom-type` attribute -- required for cross-references to terms (`@custom-type="term-entry"`), notes (`@custom-type="note"`), and examples (`@custom-type="example"`) from outside the terminology section (Sec 9.2.6, 10.1.3)
51
+ - [ ] `TbxIsoTml::Xref` missing `@id` attribute -- listed in Sec 3.4 as needing ID
52
+ - [ ] `NisoSts::MixedCitation` missing `@id` attribute -- listed in Sec 3.4 as needing ID
53
+ - [ ] `NisoSts::MixedCitation` missing `<break>` child -- legacy content has line breaks within citations (B.2.21)
54
+ - [ ] `NisoSts::MixedCitation` missing `<uri>` child -- legacy content has URIs inside citations (B.2.21)
55
+ - [ ] `NisoSts::ReferenceStandard` missing `@content-type` attribute -- used for "uri" references
56
+ - [ ] `NisoSts::ReferenceStandard` missing `<std-id>` child -- IEC references use `<std-id>` inside `<std>` (Sec B.2.20)
@@ -0,0 +1,79 @@
1
+ # Annex A: Multilingual Contents, Translations and Adoptions
2
+
3
+ ## Overview
4
+ Annex A covers the structuring and tagging of multilingual documents, translations, and adoptions of IEC/ISO standards. It specifies the `<adoption>` element structure, metadata handling for derived versions, `@xml:lang` usage on block elements, and TBX terminology considerations during translation.
5
+
6
+ ## Element Coverage
7
+
8
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
9
+ |---------|-----------------|---------------|--------|-------|
10
+ | `<adoption>` | Container for adopted standard | `NisoSts::Adoption` | Partial | Has `@id`, `@xml:lang`, `<adoption-front>`, `<back>`, nested `<adoption>`, `<standard>`; missing `<processing-meta>` guidance |
11
+ | `<adoption-front>` | Adoption metadata front matter | `NisoSts::AdoptionFront` | Partial | Inherits from `Front`; maps `iso-meta`, `std-meta`, `sec`; missing `<std-doc-meta>` child |
12
+ | `<standard>` | Original standard inside adoption | `NisoSts::Standard` | Partial | Has `@id`, `@xml:lang`, `<front>`, `<body>`, `<back>`; missing `<processing-meta>` child |
13
+ | `<front>` | Standard front matter | `NisoSts::Front` | Partial | Maps `iso-meta`, `std-meta`, `sec`; missing `<std-doc-meta>` child |
14
+ | `<std-doc-meta>` | Metadata valid for entire document | `NisoSts::StdDocMeta` | Modeled (not mapped) | Class exists but not mapped in `Front` or `AdoptionFront` |
15
+ | `<std-meta>` | Metadata for derived version | `NisoSts::MetadataStd` | Partial | Has `@id`, `@std-meta-type`, extensive metadata children; missing `<abstract>`, `<isbn>`, `<counts>`, `<suppl-type/number/version>`, multiple `<permissions>` |
16
+ | `<iso-meta>` | ISO-specific metadata | `NisoSts::MetadataIso` | Partial | Has standard metadata children; guidelines recommend avoiding `<iso-meta>` in favor of `<std-meta>` |
17
+ | `<processing-meta>` | Table model, TBX model, MathML version | Missing | Missing | **Critical gap** -- contains `@tagset`, `@tbx-tagset`, `@mathml-version`; recommended to keep identical between original and adoption |
18
+
19
+ ## Attribute Gaps
20
+
21
+ | Attribute | Parent Element | Guidelines Usage | Modeled | Status |
22
+ |-----------|---------------|-----------------|---------|--------|
23
+ | `@xml:lang` | `<adoption>` | Language of adopted content | Yes | Supported |
24
+ | `@xml:lang` | `<standard>` | Language of original standard | Yes | Supported |
25
+ | `@xml:lang` | `<sec>` | Language override for multilingual sections | No | **Missing** -- guidelines say `@xml:lang` should be on "most outer block level element" for multilingual documents |
26
+ | `@xml:lang` | `<body>` | Language override for body content | No | Missing |
27
+ | `@xml:lang` | `<back>` | Language override for back matter | No | Missing |
28
+ | `@xml:lang` | `<p>` | Language override for paragraphs | No | Missing |
29
+ | `@xml:lang` | `<list>` | Language override for lists | No | Missing |
30
+ | `@xml:lang` | `<fig>` | Language override for figures | No | Missing |
31
+ | `@xml:lang` | `<fig-group>` | Language override for figure groups | No | Missing |
32
+ | `@xml:lang` | `<term-sec>` | Language override for term sections | No | Missing |
33
+ | `@xml:lang` | `<disp-formula>` | Language override for formulae | No | Missing |
34
+ | `@xml:lang` | `<tbx:langSet>` | Language of terminology set | Yes | Supported -- has `@xml:lang` as `lang` attribute |
35
+ | `@id` | `<adoption>` | Adoption identifier | Yes | Supported |
36
+ | `@id` | `<standard>` | Standard identifier | Yes | Supported |
37
+
38
+ ## TBX Terminology Translation Considerations (A.3.2)
39
+
40
+ The guidelines identify TBX elements that may require modification during translation:
41
+
42
+ | Element | Translation Concern | sts-ruby Model | Status |
43
+ |---------|---------------------|---------------|--------|
44
+ | `<tbx:langSet>` | `@xml:lang` adapted to translation language | `TbxIsoTml::LangSet` | Supported -- `@xml:lang` modeled |
45
+ | `<tbx:grammaticalNumber>` | May need adaptation to target language | `TbxIsoTml::GrammaticalNumber` | Supported |
46
+ | `<tbx:geographicalUsage>` | May need to be added for target language | `TbxIsoTml::GeographicalUsage` | Supported |
47
+ | `<tbx:grammaticalGender>` | May need to be added for translation | `TbxIsoTml::GrammaticalGender` | Supported |
48
+ | `<tbx:example>` | May need adaptation for translation users | `TbxIsoTml::Example` | Supported |
49
+ | `<tbx:partOfSpeech>` | Usually identical but may need adaptation | `TbxIsoTml::PartOfSpeech` | Supported |
50
+ | `<tbx:pronunciation>` | May need to be added for translation | `TbxIsoTml::Pronunciation` | Supported |
51
+ | `<tbx:source>` | May need adaptation or removal | `TbxIsoTml::Source` | Partial -- missing `<std>` child |
52
+ | `<label>` | Preserve original numbering in translation | `NisoSts::Label` | Supported |
53
+ | `<tbx:termEntry>` | Preserve entry structure and IDs | `TbxIsoTml::TermEntry` | Supported |
54
+
55
+ ## Metadata Preservation Rules (A.3.1)
56
+
57
+ | Rule | sts-ruby Support | Notes |
58
+ |------|-----------------|-------|
59
+ | Original metadata preserved in `<standard>` | Yes | `Standard` has `Front` with `iso-meta`/`std-meta` |
60
+ | Adopting org metadata in `<adoption-front>` `<std-meta>` | Partial | `AdoptionFront` maps `std-meta` but missing `<std-doc-meta>` |
61
+ | `<std-doc-meta>` for document-wide metadata | No (class exists, not wired) | `StdDocMeta` class exists but not referenced from `Front` or `AdoptionFront` |
62
+ | `<processing-meta>` kept identical | No | `<processing-meta>` element not modeled at all |
63
+ | Avoid `<iso-meta>`, `<reg-meta>`, `<nat-meta>` | N/A | Guidelines say avoid these; models exist for `iso-meta` only |
64
+ | Preserve original IDs | Yes | Elements have `@id` attributes |
65
+ | Preserve element tags for identical content | Yes | Round-trip fidelity supported by lutaml-model |
66
+
67
+ ## Key Gaps
68
+
69
+ - [ ] **CRITICAL**: `<processing-meta>` element not modeled -- recommended to keep identical between original standard and adoption; contains `@tagset`, `@tbx-tagset`, `@mathml-version` attributes (Sec A.3.1)
70
+ - [ ] **CRITICAL**: `NisoSts::Front` and `NisoSts::AdoptionFront` missing `<std-doc-meta>` child -- guidelines say `<std-doc-meta>` contains "metadata valid for the entire document" during adoptions (Sec A.3.1)
71
+ - [ ] **CRITICAL**: `NisoSts::AdoptionFront` inherits from `Front` but only maps `iso-meta`, `std-meta`, `sec` -- missing `<std-doc-meta>` mapping needed for adoption metadata layering
72
+ - [ ] **IMPORTANT**: Key block-level elements missing `@xml:lang` attribute -- multilingual documents need `@xml:lang` on `<sec>`, `<body>`, `<back>`, `<p>`, `<list>`, `<fig>`, `<fig-group>`, `<term-sec>`, `<disp-formula>` to mark language-specific content (Sec A.3.1)
73
+ - [ ] `NisoSts::Section` missing `@xml:lang` attribute -- most critical for multilingual documents where "it is sufficient to provide the @xml:lang on the top level `<sec>` element only" (Sec A.3.1)
74
+ - [ ] `NisoSts::Body` missing `@xml:lang` attribute -- needed for language override at body level
75
+ - [ ] `NisoSts::Paragraph` missing `@xml:lang` attribute -- needed for inline language switching
76
+ - [ ] `NisoSts::List` missing `@xml:lang` attribute -- needed for language-specific lists
77
+ - [ ] `NisoSts::Figure` and `NisoSts::FigGroup` missing `@xml:lang` attribute -- needed for multilingual figure captions
78
+ - [ ] `NisoSts::TermSection` missing `@xml:lang` attribute -- needed for terminology in different languages
79
+ - [ ] `NisoSts::DisplayFormula` missing `@xml:lang` attribute -- needed for multilingual formula notes
@@ -0,0 +1,27 @@
1
+ # Section 1-3: Introduction, Legal Terms, and General Scope
2
+
3
+ ## Overview
4
+ Covers the maintenance, legal terms, scope, coding guidance, tagging differences between ISO and IEC, formatting conventions, and multilingual document handling.
5
+
6
+ ## Element Coverage
7
+
8
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
9
+ |---------|-----------------|---------------|--------|-------|
10
+ | `<standard>` | Root element for all NISO STS documents | `NisoSts::Standard`, `IsoSts::Standard` | ✅ Supported | Both NisoSts and IsoSts variants exist |
11
+ | `@xml:lang` | Language attribute on block-level elements | Mapped as `lang` on Standard, various models | ✅ Supported | Used on `<standard>`, `<title-wrap>`, `<abstract>` etc. |
12
+ | `xmlns:mml` | MathML namespace declaration | `Namespaces::MathmlNamespace` | ✅ Supported | Declared via `namespace_scope` on Standard |
13
+ | `xmlns:tbx` | TBX namespace declaration | `Namespaces::TbxNamespace` | ✅ Supported | Declared via `namespace_scope` on Standard |
14
+ | `xmlns:xlink` | XLink namespace declaration | `Namespaces::XlinkNamespace` | ✅ Supported | Declared via `namespace_scope` on Standard |
15
+
16
+ ## Attribute Gaps
17
+
18
+ | Attribute | Parent Element | Guidelines Usage | Modeled | Status |
19
+ |-----------|---------------|-----------------|---------|--------|
20
+ | `@dtd-version` | `<standard>` | DTD version identifier | ✅ Mapped on both NisoSts::Standard and IsoSts::Standard | OK |
21
+ | `@specific-use` | `<standard>` | Usage at IsoSts | ✅ Mapped on IsoSts::Standard only | OK -- NisoSts does not have it |
22
+
23
+ ## Key Gaps
24
+
25
+ - [ ] **No `@xml:lang` on `NisoSts::Standard`**: The NisoSts::Standard maps `lang` but it uses `Lutaml::Xml::W3c::XmlLangType` which should correctly handle `xml:lang`. Verify round-trip fidelity.
26
+ - [ ] **`xmlns` namespace attributes not round-tripped as XML attributes**: The `mml`, `tbx`, `xlink` attributes on `NisoSts::Standard` are declared but mapped through `namespace_scope`, not as individual XML attributes. The guidelines example shows `xmlns:mml="..."` etc. directly on `<standard>`. Verify this serializes correctly.
27
+ - No structural gaps in this section -- it is primarily about conventions.
@@ -0,0 +1,100 @@
1
+ # Section 4: Document Structure
2
+
3
+ ## Overview
4
+ Covers the overall document structure: root `<standard>` element, front matter (`<front>`), body (`<body>`), back matter (`<back>`), clauses (`<sec>`), annexes (`<app>`), bibliography (`<ref-list>`), index, and footnotes.
5
+
6
+ ## Element Coverage
7
+
8
+ ### Root and Major Structural Elements
9
+
10
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
11
+ |---------|-----------------|---------------|--------|-------|
12
+ | `<standard>` | Root element | `NisoSts::Standard`, `IsoSts::Standard` | ✅ Supported | |
13
+ | `<front>` | Front matter container | `NisoSts::Front`, `IsoSts::Front` | ✅ Supported | |
14
+ | `<body>` | Body content | `NisoSts::Body`, `IsoSts::Body` | ✅ Supported | |
15
+ | `<back>` | Back matter | `NisoSts::Back`, `IsoSts::Back` | ✅ Supported | |
16
+
17
+ ### Front Matter (Section 4.2)
18
+
19
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
20
+ |---------|-----------------|---------------|--------|-------|
21
+ | `<std-meta>` | Standards organization metadata | `NisoSts::MetadataStd` | ✅ Supported | |
22
+ | `<iso-meta>` | ISO-specific metadata (legacy) | `NisoSts::MetadataIso`, `IsoSts::IsoMeta` | ✅ Supported | Both NisoSts and IsoSts variants |
23
+ | `<reg-meta>` | Regional metadata | `NisoSts::RegMeta`, `IsoSts::RegMeta` | ✅ Supported | |
24
+ | `<nat-meta>` | National metadata | `NisoSts::NatMeta`, `IsoSts::NatMeta` | ✅ Supported | |
25
+ | `<std-doc-meta>` | Document-level metadata | `NisoSts::StdDocMeta` | ✅ Supported | NisoSts only; NOT in IsoSts::Front |
26
+ | `<sec>` (foreword) | Foreword section | `NisoSts::Section` with `sec-type="foreword"` | ✅ Supported | |
27
+ | `<sec>` (introduction) | Introduction section | `NisoSts::Section` with `sec-type="intro"` | ✅ Supported | |
28
+
29
+ ### Clauses (Section 4.3)
30
+
31
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
32
+ |---------|-----------------|---------------|--------|-------|
33
+ | `<sec>` | Clause/subclause | `NisoSts::Section`, `IsoSts::Sec` | ✅ Supported | |
34
+ | `<label>` | Clause number | `NisoSts::Label`, `IsoSts::Label` | ✅ Supported | |
35
+ | `<title>` | Clause title | `NisoSts::Title`, `IsoSts::Title` | ✅ Supported | |
36
+ | `<p>` | Paragraph text | `NisoSts::Paragraph`, `IsoSts::Paragraph` | ✅ Supported | |
37
+
38
+ ### Back Matter (Section 4.4)
39
+
40
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
41
+ |---------|-----------------|---------------|--------|-------|
42
+ | `<app-group>` | Annex group container | `NisoSts::AppGroup`, `IsoSts::AppGroup` | ✅ Supported | |
43
+ | `<app>` | Individual annex | `NisoSts::App`, `IsoSts::App` | ✅ Supported | |
44
+ | `<annex-type>` | Annex type label (informative/normative) | `NisoSts::App#annex_type` (string), `IsoSts::AnnexType` | ✅ Supported | |
45
+ | `<ref-list>` (bibliography) | Bibliography | `NisoSts::ReferenceList`, `IsoSts::RefList` | ✅ Supported | |
46
+ | `<index>` | Index element | **MISSING** | ❌ Missing | No `Index` class found in NisoSts or IsoSts |
47
+ | `<index-title-group>` | Index title group | **MISSING** | ❌ Missing | |
48
+ | `<index-div>` | Index division | **MISSING** | ❌ Missing | |
49
+ | `<index-entry>` | Index entry | **MISSING** | ❌ Missing | |
50
+ | `<see-entry>` | See-entry in index | **MISSING** | ❌ Missing | `NisoSts::See` exists but for def-list, not index |
51
+ | `<related-object>` | Related object reference | **MISSING** | ❌ Missing | |
52
+ | `<fn-group>` | Footnote group (IEC legacy) | `NisoSts::FnGroup`, `IsoSts::FnGroup` | ✅ Supported | |
53
+
54
+ ## Attribute Gaps
55
+
56
+ | Attribute | Parent Element | Guidelines Usage | Modeled | Status |
57
+ |-----------|---------------|-----------------|---------|--------|
58
+ | `@sec-type` | `<sec>` | Clause type (foreword/intro/scope/norm-refs/terms) | ✅ Mapped as `type` in NisoSts, `sec_type` in IsoSts | OK |
59
+ | `@content-type` | `<app>` | inform-annex / normative-annex / informative / normative | ✅ Mapped | OK |
60
+ | `@content-type` | `<ref-list>` | "bibl" for bibliography | ✅ Mapped | OK |
61
+ | `@content-type` | `<ref-list>` (nested) | "norm-refs" for normative references | ✅ Mapped | OK |
62
+ | `@id` | `<sec>` | Section identifiers | ✅ Mapped | OK |
63
+ | `@id` | `<app>` | Annex identifiers | ✅ Mapped | OK |
64
+ | `@id` | `<ref-list>` | Bibliography identifiers | ✅ Mapped | OK |
65
+
66
+ ## NisoSts::Front Gaps
67
+
68
+ | Feature | Guideline Reference | Status | Notes |
69
+ |---------|-------------------|--------|-------|
70
+ | `<std-doc-meta>` in `<front>` | Section 4.2.2 | ❌ Missing from NisoSts::Front | `StdDocMeta` class exists but is NOT mapped in `NisoSts::Front` -- only `iso_meta`, `std_meta`, and `sec` are mapped |
71
+ | `<std-doc-meta>` in IsoSts::Front | Section 4.2.2 | ❌ Missing | Not present in IsoSts::Front either |
72
+ | Multiple `<std-meta>` elements | Section A.3 | ⚠️ Limited | `NisoSts::Front` maps `std_meta` as single (not collection), but guidelines say multiple instances are allowed for national metadata |
73
+ | `<sec>` in front for Foreword/Introduction | Section 4.2.3, 4.2.4 | ✅ Supported | `NisoSts::Front` maps `sec` as collection |
74
+
75
+ ## NisoSts::Section Content Gaps
76
+
77
+ | Child Element | Guidelines Usage | In NisoSts::Section | In IsoSts::Sec | Notes |
78
+ |--------------|-----------------|---------------------|----------------|-------|
79
+ | `<code>` | Programming code | ❌ Missing | ❌ Missing | No `Code` class exists in sts-ruby |
80
+ | `<supplementary-material>` | Supplementary materials | ❌ Missing from Section | ❌ Missing | Class exists (`NisoSts::SupplementaryMaterial`) but not mapped as child of Section or IsoSts::Sec |
81
+ | `<normative-note>` | Normative notes | ❌ Missing from Section | ❌ Missing | `NisoSts::NormativeNote` class exists but not mapped in Section; only `non-normative-note` is mapped |
82
+ | `<normative-example>` | Normative examples | ❌ Missing from Section | ❌ Missing | `NisoSts::NormativeExample` class exists but not mapped |
83
+ | `<media>` | Media element | ❌ Missing | ❌ Missing | No `Media` class mapped in Section |
84
+ | `<chem-struct>` | Chemical structure | ❌ Missing | ❌ Missing | `ChemStruct` class exists but not mapped in Section |
85
+
86
+ ## Key Gaps
87
+
88
+ - [ ] **`<index>` element missing entirely**: No `Index`, `IndexDiv`, `IndexEntry`, `IndexTitleGroup`, `SeeEntry`, or `RelatedObject` classes exist. The guidelines show full index coding (Section 4.4.4) with `<index>`, `<index-title-group>`, `<index-div>`, `<index-entry>`, `<see-entry>`, `<related-object>`. These need to be implemented.
89
+
90
+ - [ ] **`<std-doc-meta>` not mapped in Front**: The `StdDocMeta` class exists but is not wired into either `NisoSts::Front` or `IsoSts::Front`. Per Section 4.2.2, this element captures document-level metadata.
91
+
92
+ - [ ] **`NisoSts::Front` lacks `<std-doc-meta>` and multiple `<std-meta>` support**: Guidelines allow multiple `<std-meta>` instances for national metadata. Currently only a single `std_meta` is mapped.
93
+
94
+ - [ ] **`<code>` element not modeled**: Section 5.12 describes `<code>` with attributes `@id`, `@code-type`, `@code-version`, `@executable`, `@language`, `@language-version`, `@platforms`. No `Code` class exists.
95
+
96
+ - [ ] **`<supplementary-material>` not available as child of `<sec>`**: Used in IEC forewords for interpretation sheets and software supplements (Section on IEC ISH). Class exists but not wired into Section.
97
+
98
+ - [ ] **`<normative-note>` and `<normative-example>` not in Section**: Classes exist (`NisoSts::NormativeNote`, `NisoSts::NormativeExample`) but are not mapped as children of `<sec>`. Some clause types require normative notes.
99
+
100
+ - [ ] **`NisoSts::Back` missing `<index>`**: Index should appear after bibliography and before footnote groups in back matter.
@@ -0,0 +1,149 @@
1
+ # Section 4.2: Front Matter (Metadata)
2
+
3
+ ## Overview
4
+ Covers the metadata elements within `<front>`: `<std-meta>`, `<iso-meta>`, `<reg-meta>`, `<nat-meta>`, and `<std-doc-meta>`, along with their child elements for titles, identifiers, dates, permissions, and other metadata.
5
+
6
+ ## Element Coverage
7
+
8
+ ### Metadata Container Elements
9
+
10
+ | Element | sts-ruby Model | Status | Notes |
11
+ |---------|---------------|--------|-------|
12
+ | `<std-meta>` | `NisoSts::MetadataStd` | ✅ Supported | Primary metadata container |
13
+ | `<iso-meta>` | `NisoSts::MetadataIso` | ✅ Supported | Legacy ISO metadata |
14
+ | `<iso-meta>` | `IsoSts::IsoMeta` | ✅ Supported | IsoSts variant |
15
+ | `<reg-meta>` | `NisoSts::RegMeta`, `IsoSts::RegMeta` | ✅ Supported | |
16
+ | `<nat-meta>` | `NisoSts::NatMeta`, `IsoSts::NatMeta` | ✅ Supported | |
17
+ | `<std-doc-meta>` | `NisoSts::StdDocMeta` | ⚠️ Class exists | Not wired into `NisoSts::Front` or `IsoSts::Front` |
18
+
19
+ ### Title Elements
20
+
21
+ | Element | sts-ruby Model | Status | Notes |
22
+ |---------|---------------|--------|-------|
23
+ | `<title-wrap>` | `NisoSts::TitleWrap` | ✅ Supported | |
24
+ | `@xml:lang` on `<title-wrap>` | `TitleWrap#lang` | ✅ Supported | Uses `XmlLangType` |
25
+ | `<intro>` | `TitleWrap#intro` (string) | ✅ Supported | |
26
+ | `<main>` | `TitleWrap#main` (string) | ✅ Supported | |
27
+ | `<compl>` | `NisoSts::TitleCompl` | ✅ Supported | Inherits from `TitleFull` |
28
+ | `<full>` | `NisoSts::TitleFull` | ✅ Supported | |
29
+
30
+ ### Identification Elements
31
+
32
+ | Element | sts-ruby Model | Status | Notes |
33
+ |---------|---------------|--------|-------|
34
+ | `<proj-id>` | `NisoSts::ProjId` | ✅ Supported | In MetadataStd |
35
+ | `<std-ident>` | `NisoSts::StandardIdentification` | ✅ Supported | |
36
+ | `<originator>` | `StandardIdentification#originator` | ✅ Supported | |
37
+ | `<doc-type>` | `StandardIdentification#doc_type` | ✅ Supported | |
38
+ | `<doc-number>` | `StandardIdentification#doc_number` | ✅ Supported | |
39
+ | `<part-number>` | `StandardIdentification#part_number` | ✅ Supported | |
40
+ | `<edition>` | `StandardIdentification#edition` | ✅ Supported | |
41
+ | `<version>` | `StandardIdentification#version` | ✅ Supported | |
42
+ | `<doc-ident>` | `NisoSts::DocumentIdentification` | ✅ Supported | ISO legacy only |
43
+ | `<std-id-group>` | `NisoSts::StdIdGroup` | ✅ Supported | |
44
+ | `<std-id>` | `NisoSts::StdId` | ✅ Supported | With `@std-id-link-type`, `@std-id-type` |
45
+ | `<isbn>` | `NisoSts::Isbn` | ✅ In mixed-citation only | Not in MetadataStd |
46
+ | `<suppl-type>` | `NisoSts::SupplType` | ✅ Class exists | |
47
+ | `<suppl-number>` | `NisoSts::SupplNumber` | ✅ Class exists | |
48
+ | `<suppl-version>` | `NisoSts::SupplVersion` | ✅ Class exists | |
49
+
50
+ ### Organization Elements
51
+
52
+ | Element | sts-ruby Model | Status | Notes |
53
+ |---------|---------------|--------|-------|
54
+ | `<std-org>` | `NisoSts::StdOrg` | ✅ Supported | |
55
+ | `@std-org-type` | `StdOrg#std_org_type` | ✅ Supported | |
56
+ | `@std-org-role` | `StdOrg#std_org_role` | ✅ Supported | |
57
+ | `<std-org-abbrev>` | `NisoSts::StdOrgAbbrev` | ✅ Supported | |
58
+ | `<std-org-name>` | `NisoSts::StdOrgName` | ✅ Supported | |
59
+ | `<std-org-loc>` | `NisoSts::StdOrgLoc` | ✅ Supported | |
60
+ | `<std-org-group>` | `NisoSts::StdOrgGroup` | ✅ Supported | |
61
+
62
+ ### Reference and Date Elements
63
+
64
+ | Element | sts-ruby Model | Status | Notes |
65
+ |---------|---------------|--------|-------|
66
+ | `<content-language>` | `MetadataStd#content_language` | ✅ Supported | |
67
+ | `<std-ref>` | `NisoSts::StandardRef` | ✅ Supported | With `@type` |
68
+ | `<doc-ref>` | `MetadataStd#doc_ref` | ✅ Supported | |
69
+ | `<release-date>` | `NisoSts::ReleaseDate` | ✅ Supported | With `@date-type`, `@iso-8601-date` |
70
+ | `<release-version>` | `NisoSts::ReleaseVersion` | ✅ Supported | |
71
+ | `<meta-date>` | `NisoSts::MetaDate` | ✅ Supported | With `@type` |
72
+ | `<pub-date>` | `MetadataStd#pub_date` | ✅ Supported | String type |
73
+ | `<comm-ref>` | `MetadataStd#comm_ref` | ✅ Supported | |
74
+ | `<secretariat>` | `MetadataStd#secretariat` | ✅ Supported | |
75
+ | `<ics>` | `MetadataStd#ics` | ✅ Supported | Collection in MetadataStd |
76
+ | `<page-count>` | `NisoSts::PageCount` | ✅ Supported | With `@count` |
77
+
78
+ ### Cross-Reference and Other Metadata
79
+
80
+ | Element | sts-ruby Model | Status | Notes |
81
+ |---------|---------------|--------|-------|
82
+ | `<std-xref>` | `NisoSts::StdCrossReference` | ✅ Supported | With `@type` |
83
+ | `<self-uri>` | `NisoSts::SelfUri` | ✅ Supported | |
84
+ | `<custom-meta-group>` | `NisoSts::CustomMetaGroup` | ✅ Supported | |
85
+ | `<custom-meta>` | `NisoSts::CustomMeta` | ✅ Supported | |
86
+ | `<meta-name>` | In `CustomMeta` | ✅ Supported | |
87
+ | `<meta-value>` | In `CustomMeta` | ✅ Supported | |
88
+ | `<meta-note>` | `NisoSts::MetaNote` | ✅ Supported | |
89
+ | `<abstract>` | `NisoSts::Abstract` | ✅ Class exists | Not mapped in MetadataStd |
90
+
91
+ ### Permissions (Section 4.2.2)
92
+
93
+ | Element | sts-ruby Model | Status | Notes |
94
+ |---------|---------------|--------|-------|
95
+ | `<permissions>` | `NisoSts::Permissions` | ✅ Supported | |
96
+ | `<copyright-statement>` | `Permissions#copyright_statement` (string) | ⚠️ Partial | Guidelines show this can contain `<inline-graphic>` and rich text, but modeled as plain string |
97
+ | `<copyright-year>` | `Permissions#copyright_year` (string) | ✅ Supported | |
98
+ | `<copyright-holder>` | `Permissions#copyright_holder` (string) | ⚠️ Partial | Guidelines show multiple `<copyright-holder>` elements allowed |
99
+ | `<license>` | Not in `NisoSts::Permissions` | ❌ Missing | IEC requires `<license>` with `<license-p>` inside permissions |
100
+ | `<license-p>` | Not in `NisoSts::Permissions` | ❌ Missing | License paragraphs |
101
+ | `<license_ref>` | Not in `NisoSts::Permissions` | ❌ Missing | Referenced in IEC metadata example |
102
+ | `<address>` in license | Not in permissions context | ❌ Missing | Guidelines show `<address>` inside `<license-p>` |
103
+
104
+ ## Attribute Gaps
105
+
106
+ | Attribute | Parent Element | Guidelines Usage | Modeled | Status |
107
+ |-----------|---------------|-----------------|---------|--------|
108
+ | `@std-meta-type` | `<std-meta>` | Metadata type | ✅ Mapped | OK |
109
+ | `@date-type` | `<release-date>` | Date type (published, vote-start, vote-end) | ✅ Mapped | OK |
110
+ | `@type` | `<std-ref>` | "dated" or "undated" | ✅ Mapped | OK |
111
+ | `@count` | `<page-count>` | Page count value | ✅ Mapped | OK |
112
+ | `@type` | `<meta-date>` | Date type (vote-start, vote-end, stability-date) | ✅ Mapped | OK |
113
+ | `@type` | `<std-xref>` | Cross-reference type (revises, etc.) | ✅ Mapped | OK |
114
+
115
+ ## MetadataStd vs MetadataIso Completeness
116
+
117
+ | Feature | In MetadataStd | In MetadataIso | Notes |
118
+ |---------|---------------|----------------|-------|
119
+ | Multiple `<title-wrap>` | ✅ Collection | ❌ Single only | Guidelines show multi-language title-wraps |
120
+ | Multiple `<std-ref>` | ✅ Collection | ❌ Single only | Both dated and undated refs needed |
121
+ | Multiple `<release-date>` | ✅ Collection | ❌ Single only | Multiple dates (published, vote-start, etc.) |
122
+ | Multiple `<std-org>` | ✅ Collection | ❌ Not present | |
123
+ | Multiple `<ics>` | ✅ Collection | ❌ Single only | Multiple ICS codes common |
124
+ | Multiple `<std-xref>` | ✅ Collection | ❌ Single only | |
125
+ | `<proj-id>` | ✅ Present | ❌ Missing | Project ID needed |
126
+ | `<release-version>` | ✅ Present | ❌ Missing | DIS/FIS/IS stage indicator |
127
+ | `<std-org-group>` | ✅ Present | ❌ Missing | |
128
+ | `<custom-meta-group>` | ✅ Collection | ❌ Single only | |
129
+ | `<meta-note>` | ✅ Collection | ❌ Not present | |
130
+ | `<abstract>` | ❌ Missing | ❌ Missing | Should be in both |
131
+ | Multiple `<permissions>` | ❌ Single only | ❌ Single only | IEC needs multiple permissions blocks |
132
+
133
+ ## Key Gaps
134
+
135
+ - [ ] **`<license>` missing from `Permissions`**: IEC guidelines (Section 4.2.2) show `<license>` with `<license-p>` children, including `<address>` inside license paragraphs. `NisoSts::License` and `NisoSts::LicenseP` classes exist but are NOT mapped in `Permissions`.
136
+
137
+ - [ ] **`<copyright-statement>` modeled as plain string**: The IEC example shows `<copyright-statement>` containing `<inline-graphic>` and rich content. It should be a structured model, not a string.
138
+
139
+ - [ ] **`<copyright-holder>` should be collection**: Guidelines show multiple `<copyright-holder>` elements (Section 4.2.2 ISO example with ANFIA, FIEV, SMMT, VDA, etc.).
140
+
141
+ - [ ] **`MetadataIso` has limited collections**: `title_wrap`, `std_ref`, `release_date`, `ics`, `std_xref`, `custom_meta_group` are all single instead of collection. ISO legacy documents may have multiple values.
142
+
143
+ - [ ] **`<abstract>` not mapped in metadata**: The IEC metadata example (Section A.2) shows `<abstract>` inside `<std-meta>`. Neither `MetadataStd` nor `MetadataIso` maps it.
144
+
145
+ - [ ] **`<counts>` wrapper not modeled**: IEC metadata shows `<counts><page-count count="149"/></counts>`. Currently `page_count` is directly in metadata, missing the `<counts>` wrapper.
146
+
147
+ - [ ] **`<std-id-group>` inside `<std-ident>` only**: The IEC example shows `<std-id-group>` with `<std-id>` elements having `@originator` attribute. `StdId` does not have `@originator`.
148
+
149
+ - [ ] **`<comm-ref>` should be richer**: The IEC example shows `<comm-ref id="id_1215">TC 25</comm-ref>` with an `@id` attribute. Currently modeled as plain string.
@@ -0,0 +1,209 @@
1
+ # Section 5: Body Content
2
+
3
+ ## Overview
4
+ Covers text content elements used within the body: spaces/punctuation, `<label>`, `<title>`, `<p>`, symbols, `<styled-content>`, notes and examples, lists, text alignment (`<array>`), quotations (`<disp-quote>`), graphics, boxed text, code, preformatted text, and editing instructions.
5
+
6
+ ## Element Coverage
7
+
8
+ ### Text Formatting Elements (Section 5.1)
9
+
10
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
11
+ |---------|-----------------|---------------|--------|-------|
12
+ | `<sup>` | Superscript | `NisoSts::Sup`, `TbxIsoTml::Sup` | ✅ Supported | |
13
+ | `<sub>` | Subscript | `NisoSts::Sub`, `TbxIsoTml::Sub` (not found) | ✅ Partial | Sup exists in TbxIsoTml but Sub may not |
14
+ | `<italic>` | Italic text | `TbxIsoTml::Italic` | ✅ Supported | |
15
+ | `<bold>` | Bold text | `TbxIsoTml::Bold` | ✅ Supported | |
16
+ | `<underline>` | Underlined text | `NisoSts::Underline` | ✅ Supported | |
17
+ | `<sc>` | Small caps | `NisoSts::Sc` | ✅ Supported | |
18
+ | `<strike>` | Strike-through | `NisoSts::Strike` | ✅ Class exists | |
19
+ | `<monospace>` | Monospaced text | `NisoSts::Monospace` | ✅ Supported | |
20
+ | `<roman>` | Roman (plain) override | `NisoSts::Roman` | ✅ Class exists | Used inside table headers |
21
+ | `<overline>` | Overlined text | `NisoSts::Overline` | ✅ Supported | |
22
+ | `<sans-serif>` | Sans-serif text | `NisoSts::SansSerif` | ✅ Class exists | |
23
+ | `<break/>` | Line break | `NisoSts::Break` | ✅ Supported | |
24
+
25
+ ### Labels and Titles (Section 5.2)
26
+
27
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
28
+ |---------|-----------------|---------------|--------|-------|
29
+ | `<label>` | Numbers/symbols for display elements | `NisoSts::Label` | ✅ Supported | Mixed content with `<sup>` |
30
+ | `<title>` | Designations of elements | `NisoSts::Title`, `IsoSts::Title` | ✅ Supported | |
31
+
32
+ ### Paragraph (Section 5.3)
33
+
34
+ | Element/Attr | Guidelines Usage | sts-ruby Model | Status | Notes |
35
+ |-------------|-----------------|---------------|--------|-------|
36
+ | `<p>` | General body text | `NisoSts::Paragraph` | ✅ Supported | Mixed content model |
37
+ | `@id` on `<p>` | Paragraph identifier | ✅ Mapped | OK | |
38
+ | `@style-type` on `<p>` | Alignment/formatting | ✅ Mapped | OK | Values: align-left, align-right, align-center, valign-top, etc. |
39
+ | `@content-type` on `<p>` | Content type (e.g. "dimension") | ❌ Not mapped | Missing | Guidelines Section 6.6.5, 8.4 use `@content-type="dimension"` on `<p>` for unit statements |
40
+ | `@specific-use` on `<p>` | Layout instruction (ISO) | ✅ Mapped | OK | |
41
+
42
+ ### Styled Content (Section 5.5)
43
+
44
+ | Element/Attr | Guidelines Usage | sts-ruby Model | Status | Notes |
45
+ |-------------|-----------------|---------------|--------|-------|
46
+ | `<styled-content>` | Semantic formatting | `NisoSts::StyledContent` | ✅ Supported | |
47
+ | `@style-type` | Addition/deletion/normal | ✅ Mapped | OK | |
48
+ | `@style` | CSS-style font info | ✅ Mapped | OK | |
49
+ | `@specific-use` | IEC insert/delete | ✅ Mapped | OK | |
50
+
51
+ ### Notes and Examples (Section 5.6)
52
+
53
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
54
+ |---------|-----------------|---------------|--------|-------|
55
+ | `<non-normative-note>` | Notes in text | `NisoSts::NonNormativeNote` | ✅ Supported | With `@id`, `@content-type`, `<label>`, `<p>`, `<list>` |
56
+ | `<non-normative-example>` | Examples in text | `NisoSts::NonNormativeExample` | ✅ Supported | |
57
+ | `<normative-note>` | Normative notes | `NisoSts::NormativeNote` | ✅ Class exists | Not mapped in Section children |
58
+ | `<normative-example>` | Normative examples | `NisoSts::NormativeExample` | ✅ Class exists | Not mapped in Section children |
59
+ | `@content-type="warning"` on note | Warning/caution/important notes | ✅ Mapped | OK | Section 5.6.2 |
60
+
61
+ ### Lists (Section 5.7)
62
+
63
+ | Element/Attr | Guidelines Usage | sts-ruby Model | Status | Notes |
64
+ |-------------|-----------------|---------------|--------|-------|
65
+ | `<list>` | Lists | `NisoSts::List` | ✅ Supported | |
66
+ | `@list-type` | List type (bullet, dash, alpha-lower, etc.) | ✅ Mapped | OK | |
67
+ | `@content-type` | Content type | ✅ Mapped | OK | |
68
+ | `<list-item>` | List items | `NisoSts::ListItem` | ✅ Supported | |
69
+ | `<label>` in list-item | Bullet/number | ✅ Supported | OK | |
70
+ | `<p>` in list-item | List item text | ✅ Supported | OK | |
71
+ | Nested `<list>` in list-item | Nested lists | ✅ Supported | OK | |
72
+
73
+ ### Text Alignment / Arrays (Section 5.8)
74
+
75
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
76
+ |---------|-----------------|---------------|--------|-------|
77
+ | `<array>` | Column-aligned text without borders | `NisoSts::SectionArray` | ✅ Supported | |
78
+ | `@id` on `<array>` | Array identifier | ✅ Mapped | OK | |
79
+
80
+ ### Quotations (Section 5.9)
81
+
82
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
83
+ |---------|-----------------|---------------|--------|-------|
84
+ | `<disp-quote>` | Block quotations | `NisoSts::DispQuote` | ✅ Supported | With `@id`, `@content-type`, `<label>`, `<p>`, `<attrib>` |
85
+ | `<attrib>` | Attribution for quotes | `NisoSts::Attribution` | ✅ Supported | |
86
+
87
+ ### Graphics (Section 5.10)
88
+
89
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
90
+ |---------|-----------------|---------------|--------|-------|
91
+ | `<graphic>` | Block graphics | `NisoSts::Graphic` | ✅ Supported | With `@xlink:href` |
92
+ | `<inline-graphic>` | Inline graphics | `NisoSts::InlineGraphic` | ✅ Supported | Rich attribute set |
93
+ | `@xlink:href` on `<graphic>` | File reference | ✅ Mapped | OK | |
94
+ | `<object-id>` in `<graphic>` | Object identifiers | ✅ Supported | OK | |
95
+
96
+ ### Boxed Text (Section 5.11)
97
+
98
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
99
+ |---------|-----------------|---------------|--------|-------|
100
+ | `<boxed-text>` | Boxed/guidance text | `NisoSts::BoxedText` | ✅ Supported | With `@content-type="foreign-source"`, `@position`, `@orientation` |
101
+ | `<caption>` in boxed-text | Box heading | ✅ Supported | OK | |
102
+
103
+ ### Code (Section 5.12)
104
+
105
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
106
+ |---------|-----------------|---------------|--------|-------|
107
+ | `<code>` | Programming code | ❌ Missing | No `Code` class | Guidelines list attributes: `@id`, `@code-type`, `@code-version`, `@executable`, `@language`, `@language-version`, `@platforms` |
108
+
109
+ ### Preformatted Text (Section 5.13)
110
+
111
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
112
+ |---------|-----------------|---------------|--------|-------|
113
+ | `<preformat>` | ASCII art, error messages | `NisoSts::Preformat` | ✅ Supported | With `@xml:space`, `@language`, `@preformat-type` |
114
+
115
+ ### Editing Instructions (Section 5.14)
116
+
117
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
118
+ |---------|-----------------|---------------|--------|-------|
119
+ | `<editing-instruction>` | IEC amendment instructions | `NisoSts::EditingInstruction` | ⚠️ Partial | Has `@id`, `@xml:lang`, `@specific-use`, `<label>` but missing `@content-type` and `<p>` child |
120
+ | `@content-type` on editing-instruction | addition/replacement/deletion/modification | ❌ Not mapped | Missing | Legacy IEC usage |
121
+ | `<p>` in editing-instruction | Instruction text | ❌ Not mapped | Missing | Guidelines show `<p>` children |
122
+
123
+ ## Paragraph Content Gaps
124
+
125
+ The guidelines show many elements can appear inside `<p>`. Here is what is missing from `NisoSts::Paragraph`:
126
+
127
+ | Element | In Guidelines `<p>` examples | In Paragraph model | Status |
128
+ |---------|------------------------------|-------------------|--------|
129
+ | `<bold>` | Yes | ✅ Via TbxIsoTml::Bold | OK |
130
+ | `<italic>` | Yes | ✅ Via TbxIsoTml::Italic | OK |
131
+ | `<sup>` | Yes | ✅ | OK |
132
+ | `<sub>` | Yes | ✅ | OK |
133
+ | `<sc>` | Yes | ✅ | OK |
134
+ | `<styled-content>` | Yes | ✅ | OK |
135
+ | `<xref>` | Yes | ✅ | OK |
136
+ | `<std>` | Yes | ✅ | OK |
137
+ | `<ext-link>` | Yes | ✅ | OK |
138
+ | `<uri>` | Yes | ✅ | OK |
139
+ | `<fn>` | Yes | ✅ | OK |
140
+ | `<break>` | Yes | ✅ | OK |
141
+ | `<inline-formula>` | Yes | ✅ | OK |
142
+ | `<inline-graphic>` | Yes | in Paragraph model? | ⚠️ Check -- `<graphic>` is mapped but not `<inline-graphic>` |
143
+ | `<named-content>` | Possible | ❌ Not mapped | `NamedContent` class exists but not in Paragraph |
144
+ | `<strike>` | Possible | ❌ Not mapped | `Strike` class exists but not in Paragraph |
145
+ | `<roman>` | In table headers | ❌ Not mapped | `Roman` class exists but not in Paragraph |
146
+ | `<monospace>` | Yes | ✅ | OK |
147
+ | `<underline>` | Yes | ✅ | OK |
148
+ | `<code>` | Possible in text | ❌ No Code class | Missing |
149
+ | `<email>` | Possible | ❌ Not mapped | `Email` class exists but not in Paragraph |
150
+ | `<target>` | Possible | ❌ Not mapped | Not in Paragraph |
151
+ | `<term>` | In term-display context | ❌ Not mapped | Not in Paragraph |
152
+
153
+ ## NonNormativeNote Content Gaps
154
+
155
+ | Element | Guidelines Usage | In NonNormativeNote | Status |
156
+ |---------|-----------------|---------------------|--------|
157
+ | `<label>` | NOTE label | ✅ | OK |
158
+ | `<p>` | Note text | ✅ | OK |
159
+ | `<list>` | Notes as lists | ✅ | OK |
160
+ | `<non-normative-note>` | Nested notes | ❌ Not mapped | Guidelines don't show nested but may occur |
161
+ | `<xref>` | Cross-references in notes | ❌ Not mapped | May occur in note text |
162
+ | `<std>` | References in notes | ❌ Not mapped | May occur in note text |
163
+ | `<styled-content>` | Styled text in notes | ❌ Not mapped | May occur |
164
+ | `<fig>` | Figures in notes | ❌ Not mapped | May occur |
165
+
166
+ ## NonNormativeExample Content Gaps
167
+
168
+ | Element | Guidelines Usage | In NonNormativeExample | Status |
169
+ |---------|-----------------|----------------------|--------|
170
+ | `<label>` | EXAMPLE label | ✅ | OK |
171
+ | `<p>` | Example text | ✅ | OK |
172
+ | `<list>` | Lists in examples | ✅ | OK |
173
+ | `<table-wrap>` | Tables in examples | ✅ | OK |
174
+ | `<non-normative-example>` | Nested examples | ✅ | OK |
175
+ | `<xref>` | Cross-references | ❌ Not mapped | May occur |
176
+ | `<std>` | References | ❌ Not mapped | May occur |
177
+
178
+ ## BoxedText Content Gaps
179
+
180
+ | Element | Guidelines Usage | In BoxedText | Status |
181
+ |---------|-----------------|-------------|--------|
182
+ | `<caption>` | Box heading | ✅ | OK |
183
+ | `<p>` | Box content | ✅ | OK |
184
+ | `<list>` | Lists in box | ✅ | OK |
185
+ | `<array>` | Column text | ❌ Not mapped | Guidelines list this as valid |
186
+ | `<boxed-text>` | Nested boxed text | ❌ Not mapped | Guidelines list this |
187
+ | `<non-normative-note>` | Notes in box | ❌ Not mapped | Guidelines list this |
188
+ | `<non-normative-example>` | Examples in box | ❌ Not mapped | Guidelines list this |
189
+ | `<disp-formula>` | Formulae in box | ❌ Not mapped | Guidelines list this |
190
+ | `<disp-quote>` | Quotes in box | ❌ Not mapped | Guidelines list this |
191
+ | `<ref-list>` | References in box | ❌ Not mapped | Guidelines list this |
192
+ | `<table-wrap>` | Tables in box | ❌ Not mapped | Guidelines list this |
193
+ | `<fig>` | Figures in box | ❌ Not mapped | Guidelines list this |
194
+ | `<graphic>` | Graphics in box | ❌ Not mapped | Guidelines list this |
195
+ | `<def-list>` | Definition lists | ❌ Not mapped | |
196
+
197
+ ## Key Gaps
198
+
199
+ - [ ] **`<code>` element completely missing**: Section 5.12 describes this with 7 attributes. No model exists.
200
+
201
+ - [ ] **`EditingInstruction` incomplete**: Missing `@content-type` attribute (values: addition, replacement, deletion, modification) and `<p>` child element. IEC amendment coding (Section 5.14) relies heavily on this.
202
+
203
+ - [ ] **`Paragraph` missing `@content-type`**: Used for dimension/unit statements in tables and figures (Section 6.6.5, 8.4).
204
+
205
+ - [ ] **`BoxedText` severely limited**: Only has `<caption>`, `<label>`, `<p>`, `<preformat>`, `<list>`. Missing: `<array>`, `<boxed-text>`, `<non-normative-note>`, `<non-normative-example>`, `<disp-formula>`, `<disp-quote>`, `<ref-list>`, `<table-wrap>`, `<fig>`, `<graphic>`, `<def-list>` -- all listed as valid children in Section 5.11.
206
+
207
+ - [ ] **`NonNormativeNote` missing inline elements**: Notes can contain `<xref>`, `<std>`, `<styled-content>`, `<fig>` etc. Currently only supports `<p>`, `<label>`, `<list>`, `<preformat>`, `<boxed-text>`, `<graphic>`, `<array>`.
208
+
209
+ - [ ] **`Graphic` model is sparse**: Missing `@id`, `@content-type`, `@position`, `@orientation`, `@mimetype`, `@mime-subtype` attributes. Guidelines examples show `<graphic id="fig_1.1">` with sub-figure captions but `Graphic` has no `id` or child `<label>`/`<caption>`.