sts 0.5.3 → 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 (369) hide show
  1. checksums.yaml +4 -4
  2. data/GAPS.guidelines.iso-sts-ed2.1/01-maintenance.md +19 -0
  3. data/GAPS.guidelines.iso-sts-ed2.1/03-general.md +75 -0
  4. data/GAPS.guidelines.iso-sts-ed2.1/04-structure.md +75 -0
  5. data/GAPS.guidelines.iso-sts-ed2.1/05-content.md +63 -0
  6. data/GAPS.guidelines.iso-sts-ed2.1/06-tables.md +53 -0
  7. data/GAPS.guidelines.iso-sts-ed2.1/07-formulae.md +41 -0
  8. data/GAPS.guidelines.iso-sts-ed2.1/08-figures.md +45 -0
  9. data/GAPS.guidelines.iso-sts-ed2.1/09-terms.md +56 -0
  10. data/GAPS.guidelines.iso-sts-ed2.1/10-references.md +56 -0
  11. data/GAPS.guidelines.iso-sts-ed2.1/annex-a-multilingual.md +79 -0
  12. data/GAPS.guidelines.niso-sts-v1.0/01-introduction-scope.md +27 -0
  13. data/GAPS.guidelines.niso-sts-v1.0/02-document-structure.md +100 -0
  14. data/GAPS.guidelines.niso-sts-v1.0/03-front-matter.md +149 -0
  15. data/GAPS.guidelines.niso-sts-v1.0/04-body-content.md +209 -0
  16. data/GAPS.guidelines.niso-sts-v1.0/05-tables-figures.md +152 -0
  17. data/GAPS.guidelines.niso-sts-v1.0/06-math-formulae.md +128 -0
  18. data/GAPS.guidelines.niso-sts-v1.0/07-references.md +113 -0
  19. data/GAPS.guidelines.niso-sts-v1.0/08-terminology.md +127 -0
  20. data/GAPS.guidelines.niso-sts-v1.0/09-metadata.md +113 -0
  21. data/GAPS.guidelines.niso-sts-v1.0/10-iso-iec-variant.md +141 -0
  22. data/GAPS.guidelines.niso-sts-v1.0/SUMMARY.md +96 -0
  23. data/GAPS.guidelines.schema-xref.md +101 -0
  24. data/Gemfile +1 -0
  25. data/TODO.sts-refactor/00-overview.md +172 -0
  26. data/TODO.sts-refactor/01-mathml-delegation.md +153 -0
  27. data/TODO.sts-refactor/02-type-resolution.md +122 -0
  28. data/TODO.sts-refactor/03-namespace-coupling.md +158 -0
  29. data/TODO.sts-refactor/04-register-versioning.md +180 -0
  30. data/TODO.sts-refactor/05-missing-elements.md +195 -0
  31. data/TODO.sts-refactor/06-missing-attributes.md +152 -0
  32. data/TODO.sts-refactor/07-incomplete-models.md +180 -0
  33. data/TODO.sts-refactor/08-isoiec-profile.md +169 -0
  34. data/TODO.sts-refactor/09-autoload-cleanup.md +88 -0
  35. data/TODO.sts-refactor/10-test-coverage.md +164 -0
  36. data/TODO.sts-refactor/11-duplicate-models.md +168 -0
  37. data/lib/sts/iso_sts/annex_type.rb +2 -0
  38. data/lib/sts/iso_sts/bold.rb +9 -9
  39. data/lib/sts/iso_sts/break.rb +3 -0
  40. data/lib/sts/iso_sts/comm_ref.rb +2 -0
  41. data/lib/sts/iso_sts/content_language.rb +22 -0
  42. data/lib/sts/iso_sts/copyright_holder.rb +4 -2
  43. data/lib/sts/iso_sts/copyright_statement.rb +4 -2
  44. data/lib/sts/iso_sts/copyright_year.rb +3 -0
  45. data/lib/sts/iso_sts/doc_ref.rb +2 -0
  46. data/lib/sts/iso_sts/document_identification.rb +2 -0
  47. data/lib/sts/iso_sts/edition.rb +2 -0
  48. data/lib/sts/iso_sts/ext_link.rb +1 -1
  49. data/lib/sts/iso_sts/front.rb +2 -0
  50. data/lib/sts/iso_sts/iso_meta.rb +2 -2
  51. data/lib/sts/iso_sts/italic.rb +9 -9
  52. data/lib/sts/iso_sts/label.rb +7 -5
  53. data/lib/sts/iso_sts/language.rb +2 -0
  54. data/lib/sts/iso_sts/meta_date.rb +20 -0
  55. data/lib/sts/iso_sts/mixed_citation.rb +5 -5
  56. data/lib/sts/iso_sts/monospace.rb +26 -0
  57. data/lib/sts/iso_sts/named_content.rb +44 -0
  58. data/lib/sts/iso_sts/nat_meta.rb +4 -4
  59. data/lib/sts/iso_sts/page_count.rb +2 -0
  60. data/lib/sts/iso_sts/paragraph.rb +8 -8
  61. data/lib/sts/iso_sts/permissions.rb +2 -0
  62. data/lib/sts/iso_sts/preformat.rb +3 -3
  63. data/lib/sts/iso_sts/reg_meta.rb +4 -4
  64. data/lib/sts/iso_sts/release_date.rb +2 -0
  65. data/lib/sts/iso_sts/sc.rb +26 -0
  66. data/lib/sts/iso_sts/sec.rb +2 -2
  67. data/lib/sts/iso_sts/secretariat.rb +2 -0
  68. data/lib/sts/iso_sts/standard_cross_reference.rb +4 -2
  69. data/lib/sts/iso_sts/standard_identification.rb +2 -0
  70. data/lib/sts/iso_sts/standard_ref.rb +16 -0
  71. data/lib/sts/iso_sts/std.rb +3 -1
  72. data/lib/sts/iso_sts/std_ref.rb +2 -0
  73. data/lib/sts/iso_sts/strike.rb +26 -0
  74. data/lib/sts/iso_sts/styled_content.rb +11 -9
  75. data/lib/sts/iso_sts/sub.rb +2 -0
  76. data/lib/sts/iso_sts/sup.rb +2 -0
  77. data/lib/sts/iso_sts/table_wrap_foot.rb +2 -0
  78. data/lib/sts/iso_sts/td.rb +7 -7
  79. data/lib/sts/iso_sts/term.rb +5 -5
  80. data/lib/sts/iso_sts/th.rb +7 -7
  81. data/lib/sts/iso_sts/title.rb +6 -4
  82. data/lib/sts/iso_sts/title_compl.rb +2 -0
  83. data/lib/sts/iso_sts/title_full.rb +2 -0
  84. data/lib/sts/iso_sts/title_intro.rb +2 -0
  85. data/lib/sts/iso_sts/title_main.rb +2 -0
  86. data/lib/sts/iso_sts/underline.rb +26 -0
  87. data/lib/sts/iso_sts/uri.rb +32 -0
  88. data/lib/sts/iso_sts/xref.rb +3 -3
  89. data/lib/sts/iso_sts.rb +9 -0
  90. data/lib/sts/mathml.rb +12 -58
  91. data/lib/sts/namespaces.rb +2 -0
  92. data/lib/sts/niso_sts/abstract.rb +2 -0
  93. data/lib/sts/niso_sts/access_date.rb +2 -0
  94. data/lib/sts/niso_sts/accrediting_organization.rb +2 -0
  95. data/lib/sts/niso_sts/addr_line.rb +2 -0
  96. data/lib/sts/niso_sts/address.rb +2 -0
  97. data/lib/sts/niso_sts/aff_alternatives.rb +3 -0
  98. data/lib/sts/niso_sts/alt_text.rb +2 -0
  99. data/lib/sts/niso_sts/alt_title.rb +2 -0
  100. data/lib/sts/niso_sts/alternatives.rb +2 -0
  101. data/lib/sts/niso_sts/anonymous.rb +3 -0
  102. data/lib/sts/niso_sts/app.rb +2 -0
  103. data/lib/sts/niso_sts/article_title.rb +2 -0
  104. data/lib/sts/niso_sts/attrib.rb +2 -0
  105. data/lib/sts/niso_sts/authorization.rb +2 -0
  106. data/lib/sts/niso_sts/award_group.rb +22 -4
  107. data/lib/sts/niso_sts/award_id.rb +6 -0
  108. data/lib/sts/niso_sts/back.rb +22 -4
  109. data/lib/sts/niso_sts/body.rb +2 -0
  110. data/lib/sts/niso_sts/boxed_text.rb +38 -4
  111. data/lib/sts/niso_sts/break.rb +3 -0
  112. data/lib/sts/niso_sts/caption.rb +8 -0
  113. data/lib/sts/niso_sts/chapter_title.rb +2 -0
  114. data/lib/sts/niso_sts/chem_struct.rb +2 -0
  115. data/lib/sts/niso_sts/citation_alternatives.rb +2 -0
  116. data/lib/sts/niso_sts/city.rb +2 -0
  117. data/lib/sts/niso_sts/code.rb +111 -0
  118. data/lib/sts/niso_sts/collab_alternatives.rb +3 -0
  119. data/lib/sts/niso_sts/comm_ref_group.rb +3 -0
  120. data/lib/sts/niso_sts/comment.rb +2 -0
  121. data/lib/sts/niso_sts/compound_subject.rb +29 -0
  122. data/lib/sts/niso_sts/compound_subject_part.rb +39 -0
  123. data/lib/sts/niso_sts/conf_acronym.rb +2 -0
  124. data/lib/sts/niso_sts/conf_date.rb +2 -0
  125. data/lib/sts/niso_sts/conf_loc.rb +2 -0
  126. data/lib/sts/niso_sts/conf_name.rb +2 -0
  127. data/lib/sts/niso_sts/conf_num.rb +2 -0
  128. data/lib/sts/niso_sts/conf_sponsor.rb +2 -0
  129. data/lib/sts/niso_sts/conf_theme.rb +2 -0
  130. data/lib/sts/niso_sts/conference.rb +2 -0
  131. data/lib/sts/niso_sts/content_language.rb +2 -0
  132. data/lib/sts/niso_sts/contrib_id.rb +2 -0
  133. data/lib/sts/niso_sts/copyright_holder.rb +2 -0
  134. data/lib/sts/niso_sts/copyright_statement.rb +2 -0
  135. data/lib/sts/niso_sts/copyright_year.rb +2 -0
  136. data/lib/sts/niso_sts/country.rb +2 -0
  137. data/lib/sts/niso_sts/counts.rb +2 -0
  138. data/lib/sts/niso_sts/custom_meta.rb +2 -0
  139. data/lib/sts/niso_sts/custom_meta_group.rb +3 -0
  140. data/lib/sts/niso_sts/data_title.rb +29 -0
  141. data/lib/sts/niso_sts/date.rb +2 -0
  142. data/lib/sts/niso_sts/date_in_citation.rb +2 -0
  143. data/lib/sts/niso_sts/day.rb +2 -0
  144. data/lib/sts/niso_sts/def.rb +3 -0
  145. data/lib/sts/niso_sts/def_head.rb +18 -0
  146. data/lib/sts/niso_sts/def_item.rb +4 -0
  147. data/lib/sts/niso_sts/def_list.rb +21 -4
  148. data/lib/sts/niso_sts/degrees.rb +2 -0
  149. data/lib/sts/niso_sts/disp_formula_group.rb +0 -2
  150. data/lib/sts/niso_sts/disp_quote.rb +2 -0
  151. data/lib/sts/niso_sts/display_formula.rb +37 -4
  152. data/lib/sts/niso_sts/doc_number.rb +2 -0
  153. data/lib/sts/niso_sts/doc_type.rb +2 -0
  154. data/lib/sts/niso_sts/editing_instruction.rb +8 -2
  155. data/lib/sts/niso_sts/edition.rb +2 -0
  156. data/lib/sts/niso_sts/elocation_id.rb +2 -0
  157. data/lib/sts/niso_sts/email.rb +2 -0
  158. data/lib/sts/niso_sts/equation_count.rb +2 -0
  159. data/lib/sts/niso_sts/era.rb +2 -0
  160. data/lib/sts/niso_sts/ext_link.rb +16 -0
  161. data/lib/sts/niso_sts/fax.rb +2 -0
  162. data/lib/sts/niso_sts/fig_count.rb +2 -0
  163. data/lib/sts/niso_sts/floats_group.rb +2 -0
  164. data/lib/sts/niso_sts/fn_group.rb +3 -0
  165. data/lib/sts/niso_sts/fpage.rb +2 -0
  166. data/lib/sts/niso_sts/front.rb +15 -0
  167. data/lib/sts/niso_sts/funding_source.rb +2 -0
  168. data/lib/sts/niso_sts/given_names.rb +2 -0
  169. data/lib/sts/niso_sts/gov.rb +2 -0
  170. data/lib/sts/niso_sts/graphic.rb +4 -0
  171. data/lib/sts/niso_sts/hr.rb +3 -0
  172. data/lib/sts/niso_sts/ics.rb +3 -0
  173. data/lib/sts/niso_sts/ics_desc.rb +2 -0
  174. data/lib/sts/niso_sts/ics_wrap.rb +9 -0
  175. data/lib/sts/niso_sts/index.rb +32 -0
  176. data/lib/sts/niso_sts/index_div.rb +30 -0
  177. data/lib/sts/niso_sts/index_entry.rb +32 -0
  178. data/lib/sts/niso_sts/index_title_group.rb +22 -0
  179. data/lib/sts/niso_sts/inline_formula.rb +29 -4
  180. data/lib/sts/niso_sts/inline_media.rb +50 -0
  181. data/lib/sts/niso_sts/institution.rb +2 -0
  182. data/lib/sts/niso_sts/institution_id.rb +2 -0
  183. data/lib/sts/niso_sts/institution_wrap.rb +2 -0
  184. data/lib/sts/niso_sts/intro.rb +2 -0
  185. data/lib/sts/niso_sts/is_proof.rb +2 -0
  186. data/lib/sts/niso_sts/isbn.rb +2 -0
  187. data/lib/sts/niso_sts/issn.rb +2 -0
  188. data/lib/sts/niso_sts/issn_l.rb +2 -0
  189. data/lib/sts/niso_sts/issue.rb +2 -0
  190. data/lib/sts/niso_sts/kwd_group.rb +8 -0
  191. data/lib/sts/niso_sts/label.rb +4 -0
  192. data/lib/sts/niso_sts/legend.rb +39 -0
  193. data/lib/sts/niso_sts/license.rb +2 -0
  194. data/lib/sts/niso_sts/license_p.rb +2 -0
  195. data/lib/sts/niso_sts/list.rb +2 -0
  196. data/lib/sts/niso_sts/list_item.rb +2 -2
  197. data/lib/sts/niso_sts/long_desc.rb +2 -0
  198. data/lib/sts/niso_sts/lpage.rb +2 -0
  199. data/lib/sts/niso_sts/main.rb +2 -0
  200. data/lib/sts/niso_sts/meta_date.rb +2 -0
  201. data/lib/sts/niso_sts/metadata_std.rb +0 -2
  202. data/lib/sts/niso_sts/mml_content.rb +0 -2
  203. data/lib/sts/niso_sts/month.rb +2 -0
  204. data/lib/sts/niso_sts/name.rb +2 -0
  205. data/lib/sts/niso_sts/name_alternatives.rb +5 -0
  206. data/lib/sts/niso_sts/named_content.rb +51 -1
  207. data/lib/sts/niso_sts/nat_meta.rb +2 -0
  208. data/lib/sts/niso_sts/nested_kwd.rb +2 -0
  209. data/lib/sts/niso_sts/non_normative_note.rb +2 -0
  210. data/lib/sts/niso_sts/normative_note.rb +2 -0
  211. data/lib/sts/niso_sts/object_id.rb +4 -0
  212. data/lib/sts/niso_sts/on_behalf_of.rb +2 -0
  213. data/lib/sts/niso_sts/open_access.rb +2 -0
  214. data/lib/sts/niso_sts/originator.rb +2 -0
  215. data/lib/sts/niso_sts/page_count.rb +2 -0
  216. data/lib/sts/niso_sts/page_range.rb +2 -0
  217. data/lib/sts/niso_sts/paragraph.rb +2 -0
  218. data/lib/sts/niso_sts/part_number.rb +2 -0
  219. data/lib/sts/niso_sts/part_of_speech.rb +2 -0
  220. data/lib/sts/niso_sts/patent.rb +2 -0
  221. data/lib/sts/niso_sts/permissions.rb +6 -1
  222. data/lib/sts/niso_sts/phone.rb +2 -0
  223. data/lib/sts/niso_sts/postal_code.rb +2 -0
  224. data/lib/sts/niso_sts/prefix.rb +2 -0
  225. data/lib/sts/niso_sts/price.rb +2 -0
  226. data/lib/sts/niso_sts/principal_award_recipient.rb +2 -0
  227. data/lib/sts/niso_sts/principal_investigator.rb +2 -0
  228. data/lib/sts/niso_sts/private_char.rb +2 -0
  229. data/lib/sts/niso_sts/processing_meta.rb +54 -0
  230. data/lib/sts/niso_sts/product.rb +2 -0
  231. data/lib/sts/niso_sts/proj_id.rb +2 -0
  232. data/lib/sts/niso_sts/pub_date.rb +2 -0
  233. data/lib/sts/niso_sts/pub_id.rb +2 -0
  234. data/lib/sts/niso_sts/publisher.rb +2 -0
  235. data/lib/sts/niso_sts/publisher_loc.rb +2 -0
  236. data/lib/sts/niso_sts/publisher_name.rb +2 -0
  237. data/lib/sts/niso_sts/ref_count.rb +2 -0
  238. data/lib/sts/niso_sts/reference_standard.rb +2 -2
  239. data/lib/sts/niso_sts/reg_meta.rb +2 -0
  240. data/lib/sts/niso_sts/related_term.rb +2 -0
  241. data/lib/sts/niso_sts/release_date.rb +2 -0
  242. data/lib/sts/niso_sts/release_version.rb +2 -0
  243. data/lib/sts/niso_sts/release_version_id.rb +2 -0
  244. data/lib/sts/niso_sts/role.rb +35 -0
  245. data/lib/sts/niso_sts/sdo.rb +2 -0
  246. data/lib/sts/niso_sts/season.rb +2 -0
  247. data/lib/sts/niso_sts/sec_meta.rb +26 -0
  248. data/lib/sts/niso_sts/secretariat.rb +2 -0
  249. data/lib/sts/niso_sts/section.rb +8 -0
  250. data/lib/sts/niso_sts/see_also_entry.rb +26 -0
  251. data/lib/sts/niso_sts/see_entry.rb +26 -0
  252. data/lib/sts/niso_sts/self_uri.rb +2 -0
  253. data/lib/sts/niso_sts/series.rb +2 -0
  254. data/lib/sts/niso_sts/series_text.rb +2 -0
  255. data/lib/sts/niso_sts/series_title.rb +2 -0
  256. data/lib/sts/niso_sts/sig.rb +2 -0
  257. data/lib/sts/niso_sts/size.rb +2 -0
  258. data/lib/sts/niso_sts/source.rb +29 -0
  259. data/lib/sts/niso_sts/speaker.rb +2 -0
  260. data/lib/sts/niso_sts/standard_identification.rb +2 -0
  261. data/lib/sts/niso_sts/state.rb +2 -0
  262. data/lib/sts/niso_sts/std_doc_meta.rb +49 -11
  263. data/lib/sts/niso_sts/std_id.rb +2 -0
  264. data/lib/sts/niso_sts/std_id_group.rb +3 -0
  265. data/lib/sts/niso_sts/std_org_abbrev.rb +2 -0
  266. data/lib/sts/niso_sts/std_org_group.rb +3 -0
  267. data/lib/sts/niso_sts/std_org_name.rb +2 -0
  268. data/lib/sts/niso_sts/std_organization.rb +2 -0
  269. data/lib/sts/niso_sts/string_conf.rb +2 -0
  270. data/lib/sts/niso_sts/string_date.rb +2 -0
  271. data/lib/sts/niso_sts/string_name.rb +2 -0
  272. data/lib/sts/niso_sts/styled_content.rb +2 -0
  273. data/lib/sts/niso_sts/subj_group.rb +11 -1
  274. data/lib/sts/niso_sts/subtitle.rb +2 -0
  275. data/lib/sts/niso_sts/suffix.rb +2 -0
  276. data/lib/sts/niso_sts/suppl_number.rb +2 -0
  277. data/lib/sts/niso_sts/suppl_type.rb +2 -0
  278. data/lib/sts/niso_sts/suppl_version.rb +2 -0
  279. data/lib/sts/niso_sts/surname.rb +2 -0
  280. data/lib/sts/niso_sts/table_count.rb +2 -0
  281. data/lib/sts/niso_sts/table_wrap_group.rb +32 -0
  282. data/lib/sts/niso_sts/term_display.rb +22 -1
  283. data/lib/sts/niso_sts/term_display_string.rb +22 -0
  284. data/lib/sts/niso_sts/term_head.rb +2 -0
  285. data/lib/sts/niso_sts/term_source.rb +2 -0
  286. data/lib/sts/niso_sts/tex_math.rb +2 -0
  287. data/lib/sts/niso_sts/textual_form.rb +2 -0
  288. data/lib/sts/niso_sts/time_stamp.rb +2 -0
  289. data/lib/sts/niso_sts/title.rb +6 -0
  290. data/lib/sts/niso_sts/title_wrap.rb +2 -0
  291. data/lib/sts/niso_sts/toc.rb +32 -0
  292. data/lib/sts/niso_sts/toc_div.rb +30 -0
  293. data/lib/sts/niso_sts/toc_entry.rb +30 -0
  294. data/lib/sts/niso_sts/toc_title_group.rb +22 -0
  295. data/lib/sts/niso_sts/trans_source.rb +2 -0
  296. data/lib/sts/niso_sts/trans_title.rb +2 -0
  297. data/lib/sts/niso_sts/trans_title_group.rb +3 -0
  298. data/lib/sts/niso_sts/uri.rb +2 -0
  299. data/lib/sts/niso_sts/urn.rb +2 -0
  300. data/lib/sts/niso_sts/verse_line.rb +2 -0
  301. data/lib/sts/niso_sts/version.rb +2 -0
  302. data/lib/sts/niso_sts/volume.rb +2 -0
  303. data/lib/sts/niso_sts/volume_id.rb +2 -0
  304. data/lib/sts/niso_sts/volume_issue_group.rb +2 -0
  305. data/lib/sts/niso_sts/volume_series.rb +2 -0
  306. data/lib/sts/niso_sts/word_count.rb +2 -0
  307. data/lib/sts/niso_sts/year.rb +2 -0
  308. data/lib/sts/niso_sts.rb +35 -10
  309. data/lib/sts/profiles/iso_iec/constraints.rb +43 -0
  310. data/lib/sts/profiles/iso_iec/validator.rb +73 -0
  311. data/lib/sts/profiles/iso_iec.rb +10 -0
  312. data/lib/sts/profiles.rb +7 -0
  313. data/lib/sts/tbx_iso_tml/bold.rb +2 -0
  314. data/lib/sts/tbx_iso_tml/caption.rb +3 -0
  315. data/lib/sts/tbx_iso_tml/cross_reference.rb +2 -0
  316. data/lib/sts/tbx_iso_tml/definition.rb +2 -0
  317. data/lib/sts/tbx_iso_tml/entailed_term.rb +2 -0
  318. data/lib/sts/tbx_iso_tml/example.rb +0 -2
  319. data/lib/sts/tbx_iso_tml/external_graphic.rb +2 -0
  320. data/lib/sts/tbx_iso_tml/external_source.rb +2 -0
  321. data/lib/sts/tbx_iso_tml/fn_group.rb +3 -0
  322. data/lib/sts/tbx_iso_tml/geographical_usage.rb +3 -0
  323. data/lib/sts/tbx_iso_tml/grammatical_gender.rb +2 -0
  324. data/lib/sts/tbx_iso_tml/grammatical_number.rb +2 -0
  325. data/lib/sts/tbx_iso_tml/italic.rb +2 -0
  326. data/lib/sts/tbx_iso_tml/lang_set.rb +2 -0
  327. data/lib/sts/tbx_iso_tml/mfenced.rb +2 -0
  328. data/lib/sts/tbx_iso_tml/mfrac.rb +2 -2
  329. data/lib/sts/tbx_iso_tml/mi.rb +3 -2
  330. data/lib/sts/tbx_iso_tml/mrow.rb +2 -2
  331. data/lib/sts/tbx_iso_tml/mspace.rb +2 -0
  332. data/lib/sts/tbx_iso_tml/mstyle.rb +2 -2
  333. data/lib/sts/tbx_iso_tml/msub.rb +2 -0
  334. data/lib/sts/tbx_iso_tml/msup.rb +2 -0
  335. data/lib/sts/tbx_iso_tml/munder.rb +3 -0
  336. data/lib/sts/tbx_iso_tml/munderover.rb +2 -0
  337. data/lib/sts/tbx_iso_tml/normative_authorization.rb +2 -0
  338. data/lib/sts/tbx_iso_tml/part_of_speech.rb +2 -0
  339. data/lib/sts/tbx_iso_tml/pronunciation.rb +3 -0
  340. data/lib/sts/tbx_iso_tml/see.rb +2 -0
  341. data/lib/sts/tbx_iso_tml/semantics.rb +2 -0
  342. data/lib/sts/tbx_iso_tml/source.rb +2 -0
  343. data/lib/sts/tbx_iso_tml/subject_field.rb +2 -0
  344. data/lib/sts/tbx_iso_tml/sup.rb +3 -2
  345. data/lib/sts/tbx_iso_tml/table_wrap.rb +0 -1
  346. data/lib/sts/tbx_iso_tml/table_wrap_foot.rb +2 -0
  347. data/lib/sts/tbx_iso_tml/td.rb +115 -24
  348. data/lib/sts/tbx_iso_tml/term_type.rb +2 -0
  349. data/lib/sts/tbx_iso_tml/th.rb +124 -30
  350. data/lib/sts/tbx_iso_tml/xref.rb +2 -2
  351. data/lib/sts/version.rb +1 -1
  352. data/lib/sts.rb +1 -12
  353. data/reference-docs/Guidelines for coding ed.2.1.pdf +0 -0
  354. data/reference-docs/NISO-STS-1-2-compare-1-0.pdf +0 -0
  355. data/reference-docs/NISOSTS-guidelines-v1.0.pdf +0 -0
  356. metadata +71 -14
  357. data/lib/sts/content_groups/helpers.rb +0 -27
  358. data/lib/sts/enum_values.rb +0 -17
  359. data/lib/sts/iso_sts/content_groups/highlight_elements.rb +0 -285
  360. data/lib/sts/niso_sts/content_groups/body_elements.rb +0 -50
  361. data/lib/sts/niso_sts/content_groups/citation_elements.rb +0 -74
  362. data/lib/sts/niso_sts/content_groups/emphasized_text.rb +0 -67
  363. data/lib/sts/niso_sts/content_groups/highlight_elements.rb +0 -51
  364. data/lib/sts/niso_sts/content_groups/inside_cell.rb +0 -116
  365. data/lib/sts/niso_sts/content_groups/p_elements.rb +0 -41
  366. data/lib/sts/niso_sts/content_groups/para_level.rb +0 -67
  367. data/lib/sts/niso_sts/content_groups/styled_content_elements.rb +0 -93
  368. data/lib/sts/niso_sts/content_groups/table_group_attributes.rb +0 -62
  369. data/lib/sts/niso_sts/content_groups.rb +0 -8
@@ -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>`.
@@ -0,0 +1,152 @@
1
+ # Section 6: Tables and Section 8: Figures
2
+
3
+ ## Overview
4
+ Covers XHTML tables (`<table-wrap>`, `<table>`, `<thead>`, `<tbody>`, `<tr>`, `<th>`, `<td>`, `<colgroup>`, `<col>`), formal and informal tables, table notes/footnotes, unit statements, and figure elements (`<fig>`, `<fig-group>`, `<graphic>`), sub-figures, figure keys, and unit statements.
5
+
6
+ ## Table Element Coverage
7
+
8
+ ### Table Container
9
+
10
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
11
+ |---------|-----------------|---------------|--------|-------|
12
+ | `<table-wrap>` | Formal table container | `TbxIsoTml::TableWrap` | ✅ Supported | |
13
+ | `@id` | Table identifier (e.g. tab_1, tab-1) | ✅ Mapped | OK | |
14
+ | `@orientation` | "landscape" for landscape tables | ✅ Mapped | OK | |
15
+ | `@position` | "float" or "anchor" | ✅ Mapped | OK | |
16
+ | `@content-type` | Table content type | ✅ Mapped | OK | |
17
+ | `<label>` | Table label ("Table 1") | ✅ Mapped (as string) | ⚠️ Partial | Modeled as string, should support mixed content with `<sup>` |
18
+ | `<caption>` | Table caption | ✅ Via `NisoSts::Caption` | OK | |
19
+ | `<table>` | XHTML table | `TbxIsoTml::Table` | ✅ Supported | |
20
+ | `<graphic>` | Graphic inside table-wrap | ✅ Mapped | OK | |
21
+ | `<table-wrap-foot>` | Table footer/notes | `TbxIsoTml::TableWrapFoot` | ✅ Supported | |
22
+
23
+ ### XHTML Table Elements
24
+
25
+ | Element | sts-ruby Model | Status | Notes |
26
+ |---------|---------------|--------|-------|
27
+ | `<table>` | `TbxIsoTml::Table` | ✅ Supported | With `@border`, `@rules`, `@frame`, `@width`, `@style`, `@cellspacing`, `@cellpadding`, `@summary` |
28
+ | `<colgroup>` | `TbxIsoTml::Colgroup` | ✅ Supported | |
29
+ | `<col>` | `TbxIsoTml::Col` | ✅ Supported | With `@align`, `@valign`, `@width`, `@span` |
30
+ | `<thead>` | `TbxIsoTml::Thead` | ✅ Supported | |
31
+ | `<tbody>` | `TbxIsoTml::Tbody` | ✅ Supported | |
32
+ | `<tfoot>` | `TbxIsoTml::Tfoot` | ✅ Supported | |
33
+ | `<tr>` | `TbxIsoTml::Tr` | ✅ Supported | With `@align`, `@valign`, `@style` |
34
+ | `<th>` | `TbxIsoTml::Th` | ✅ Supported | With `@align`, `@valign`, `@colspan`, `@rowspan`, `@scope`, `@style` |
35
+ | `<td>` | `TbxIsoTml::Td` | ✅ Supported | With `@align`, `@valign`, `@colspan`, `@rowspan`, `@scope`, `@style` |
36
+
37
+ ### Table Footnotes (Section 6.6.3)
38
+
39
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
40
+ |---------|-----------------|---------------|--------|-------|
41
+ | `<fn>` in `<table-wrap-foot>` | Table footnotes | ✅ Via `TbxIsoTml::Fn` | OK | |
42
+ | `<fn-group>` in `<table-wrap-foot>` | Footnote group | ✅ Via `TbxIsoTml::FnGroup` | OK | |
43
+ | `<p>` in `<table-wrap-foot>` | Unit statements | ✅ Via `NisoSts::Paragraph` | OK | |
44
+ | `<non-normative-note>` in foot | Table notes | ✅ Via `NisoSts::NonNormativeNote` | OK | |
45
+
46
+ ### Informal Tables (Section 6.5)
47
+
48
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
49
+ |---------|-----------------|---------------|--------|-------|
50
+ | `<array>` | Informal table wrapper | `NisoSts::SectionArray` | ✅ Supported | Maps `<table>` inside |
51
+ | `<table>` in `<array>` | Table without caption | ✅ Via `TbxIsoTml::Table` | OK | |
52
+
53
+ ## Figure Element Coverage
54
+
55
+ ### Figure Container
56
+
57
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
58
+ |---------|-----------------|---------------|--------|-------|
59
+ | `<fig>` | Figure container | `NisoSts::Figure`, `IsoSts::Fig` | ✅ Supported | |
60
+ | `@id` | Figure ID (fig_1 / fig-1) | ✅ Mapped | OK | |
61
+ | `@fig-type` | Figure type (usually "figure") | ✅ Mapped on NisoSts::Figure | OK | |
62
+ | `@orientation` | Portrait/landscape | ✅ Mapped | OK | |
63
+ | `<label>` | Figure label | ✅ Via `NisoSts::Label` | OK | |
64
+ | `<caption>` | Figure caption | ✅ Via `NisoSts::Caption` | OK | |
65
+ | `<graphic>` | Figure graphic | ✅ Supported (collection) | OK | |
66
+ | `<p>` | Paragraphs between graphic and designation | ✅ Mapped | OK | |
67
+ | `<non-normative-note>` | Figure notes | ✅ Mapped | OK | |
68
+ | `<def-list>` | Figure key (IEC) | ✅ Mapped on NisoSts::Figure | OK | |
69
+ | `<table-wrap>` | Figure key (ISO) | ✅ Mapped | OK | |
70
+
71
+ ### Sub-figures (Section 8.2)
72
+
73
+ | Element | Guidelines Usage | sts-ruby Model | Status | Notes |
74
+ |---------|-----------------|---------------|--------|-------|
75
+ | `<fig-group>` | Sub-figure container (IEC) | `NisoSts::FigGroup` | ✅ Supported | |
76
+ | `<fig>` in `<fig-group>` | Sub-figures | ✅ Supported | OK | |
77
+ | `<label>` / `<caption>` on `<graphic>` | Sub-figure caption (ISO) | ❌ Not supported | Missing | ISO uses `<label>` and `<caption>` as children of `<graphic>` |
78
+
79
+ ### Figure Key (Section 8.3)
80
+
81
+ | Coding | Guidelines Usage | sts-ruby Model | Status | Notes |
82
+ |--------|-----------------|---------------|--------|-------|
83
+ | ISO: `<table-wrap content-type="fig-index">` | Figure key as table | ✅ TableWrap has `@content-type` | OK | |
84
+ | IEC: `<def-list list-content="figure">` | Figure key as def-list | ⚠️ Partial | DefList has `@list-type` but guidelines use `@list-content` |
85
+
86
+ ## Attribute Gaps
87
+
88
+ ### TableWrap
89
+
90
+ | Attribute | Guidelines Usage | Modeled | Status |
91
+ |-----------|-----------------|---------|--------|
92
+ | `@id` | Table ID | ✅ | OK |
93
+ | `@orientation` | landscape/portrait | ✅ | OK |
94
+ | `@position` | float/anchor | ✅ | OK |
95
+ | `@content-type` | Table type | ✅ | OK |
96
+ | `@specific-use` | Layout instruction | ✅ | OK |
97
+ | `@width` on `<table>` | Table width | ✅ | OK |
98
+ | `@style` on `<td>/<th>` | Border styling | ✅ | OK |
99
+ | `@rowspan` on `<td>/<th>` | Merged cells | ✅ | OK |
100
+ | `@colspan` on `<td>/<th>` | Merged cells | ✅ | OK |
101
+ | `@scope` on `<td>/<th>` | Header scope | ✅ | OK |
102
+ | `@padding` (via style) | Cell padding | ✅ (via @style) | OK |
103
+
104
+ ### DefList for figure keys
105
+
106
+ | Attribute | Guidelines Usage | Modeled | Status |
107
+ |-----------|-----------------|---------|--------|
108
+ | `@list-content` | "formula", "figure", "abbreviation" | ❌ Not mapped | Missing -- DefList has `@list-type` and `@specific-use` but not `@list-content` |
109
+
110
+ ## Table Content Gaps
111
+
112
+ ### TableWrapFoot
113
+
114
+ | Element | In Guidelines | In TableWrapFoot | Status |
115
+ |---------|--------------|-----------------|--------|
116
+ | `<fn>` | Table footnotes | ✅ Via `TbxIsoTml::Fn` | OK |
117
+ | `<fn-group>` | Footnote group | ✅ | OK |
118
+ | `<p>` | Unit statements | ✅ | OK |
119
+ | `<non-normative-note>` | Notes | ✅ | OK |
120
+ | `<attrib>` | Attribution | ✅ | OK |
121
+ | `<permissions>` | Permissions | ✅ | OK |
122
+ | `<tr>` (legacy) | Legacy IEC table footnotes | ❌ Not mapped | Legacy IEC puts `<tr><td>` inside `<table-wrap-foot>` -- this is not supported |
123
+
124
+ ### Table Cell Content
125
+
126
+ | Element | In Guidelines | In Td/Th | Status |
127
+ |---------|--------------|----------|--------|
128
+ | `<p>` | Cell paragraphs | ✅ | OK |
129
+ | `<break>` | Line breaks in cells | ⚠️ Needs verification | Via content model |
130
+ | `<list>` | Lists in cells | ✅ | OK |
131
+ | `<bold>` | Bold in header cells (ISO) | ✅ | OK |
132
+ | `<roman>` | Roman override in header cells (IEC) | ⚠️ Needs verification | |
133
+ | `<italic>` | Italic in cells | ✅ | OK |
134
+ | `<styled-content>` | Styled cell content | ✅ | OK |
135
+ | `<xref>` | Cross-references | ✅ | OK |
136
+ | `<sub>` / `<sup>` | Sub/superscript | ✅ | OK |
137
+
138
+ ## Key Gaps
139
+
140
+ - [ ] **`@list-content` missing on `DefList`**: Guidelines use `<def-list list-content="figure">` for figure keys (IEC, Section 8.3) and `<def-list list-content="formula">` for formula keys (Section 7.5). Only `@list-type` is mapped, not `@list-content`.
141
+
142
+ - [ ] **`<graphic>` lacks child `<label>` and `<caption>` for ISO sub-figures**: Section 8.2 ISO shows `<graphic xlink:href="fig_1.1" id="fig_1.1"><label>a)</label><caption><title>title</title></caption></graphic>`. The `Graphic` model has no `id`, `label`, or `caption` children.
143
+
144
+ - [ ] **`TableWrap#label` is plain string**: The label should support mixed content (e.g. `<sup>` for footnote references). NisoSts uses `Label` class for mixed content, but TbxIsoTml::TableWrap maps label as plain string.
145
+
146
+ - [ ] **Legacy IEC `<table-wrap-foot>` with `<tr>/<td>` children**: Some legacy IEC documents have `<tr><td>` directly inside `<table-wrap-foot>`. Not supported.
147
+
148
+ - [ ] **`<non-normative-example>` not in `<table-wrap-foot>`**: Guidelines Section 5.6.1 mentions examples in tables. Not mapped in `TableWrapFoot`.
149
+
150
+ - [ ] **`@content-type="dimension"` on `<p>` in table footer**: Used for unit statements (Section 6.6.5). The `<p>` in `TableWrapFoot` is `NisoSts::Paragraph` which does not have `@content-type`.
151
+
152
+ - [ ] **Figure `@fig-type` not in IsoSts::Fig**: `IsoSts::Fig` has `fig_type` mapped, so this is OK.