@primmel/primmel 1.3.1 → 1.4.0

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 (423) hide show
  1. package/dist/index.d.ts +40 -4
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +112 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/src/check-allowlist.d.ts +56 -0
  6. package/dist/src/check-allowlist.d.ts.map +1 -0
  7. package/dist/src/check-allowlist.js +307 -0
  8. package/dist/src/check-allowlist.js.map +1 -0
  9. package/dist/src/check-rules.d.ts +17 -0
  10. package/dist/src/check-rules.d.ts.map +1 -0
  11. package/dist/src/check-rules.js +351 -0
  12. package/dist/src/check-rules.js.map +1 -0
  13. package/dist/src/check.d.ts +115 -0
  14. package/dist/src/check.d.ts.map +1 -0
  15. package/dist/src/check.js +4164 -0
  16. package/dist/src/check.js.map +1 -0
  17. package/dist/src/export/rdf-competency-questions.d.ts +11 -0
  18. package/dist/src/export/rdf-competency-questions.d.ts.map +1 -0
  19. package/dist/src/export/rdf-competency-questions.js +99 -0
  20. package/dist/src/export/rdf-competency-questions.js.map +1 -0
  21. package/dist/src/export/rdf-shapes.d.ts +3 -0
  22. package/dist/src/export/rdf-shapes.d.ts.map +1 -0
  23. package/dist/src/export/rdf-shapes.js +225 -0
  24. package/dist/src/export/rdf-shapes.js.map +1 -0
  25. package/dist/src/export/rdf-vocabulary.d.ts +125 -0
  26. package/dist/src/export/rdf-vocabulary.d.ts.map +1 -0
  27. package/dist/src/export/rdf-vocabulary.js +230 -0
  28. package/dist/src/export/rdf-vocabulary.js.map +1 -0
  29. package/dist/src/export/rdf.d.ts +92 -0
  30. package/dist/src/export/rdf.d.ts.map +1 -0
  31. package/dist/src/export/rdf.js +707 -0
  32. package/dist/src/export/rdf.js.map +1 -0
  33. package/dist/src/export/reqif.d.ts +81 -0
  34. package/dist/src/export/reqif.d.ts.map +1 -0
  35. package/dist/src/export/reqif.js +703 -0
  36. package/dist/src/export/reqif.js.map +1 -0
  37. package/dist/src/instance-resolution.d.ts +68 -0
  38. package/dist/src/instance-resolution.d.ts.map +1 -0
  39. package/dist/src/instance-resolution.js +239 -0
  40. package/dist/src/instance-resolution.js.map +1 -0
  41. package/dist/src/mapping-coverage.d.ts +220 -0
  42. package/dist/src/mapping-coverage.d.ts.map +1 -0
  43. package/dist/src/mapping-coverage.js +528 -0
  44. package/dist/src/mapping-coverage.js.map +1 -0
  45. package/dist/src/model-diff.d.ts +198 -0
  46. package/dist/src/model-diff.d.ts.map +1 -0
  47. package/dist/src/model-diff.js +914 -0
  48. package/dist/src/model-diff.js.map +1 -0
  49. package/dist/src/operational-state.d.ts +112 -0
  50. package/dist/src/operational-state.d.ts.map +1 -0
  51. package/dist/src/operational-state.js +162 -0
  52. package/dist/src/operational-state.js.map +1 -0
  53. package/dist/src/package-diff.d.ts +36 -0
  54. package/dist/src/package-diff.d.ts.map +1 -0
  55. package/dist/src/package-diff.js +104 -0
  56. package/dist/src/package-diff.js.map +1 -0
  57. package/dist/src/ser-des/config/acceptance.d.ts +10 -0
  58. package/dist/src/ser-des/config/acceptance.d.ts.map +1 -0
  59. package/dist/src/ser-des/config/acceptance.js +163 -0
  60. package/dist/src/ser-des/config/acceptance.js.map +1 -0
  61. package/dist/src/ser-des/config/activityArchetype.d.ts +5 -0
  62. package/dist/src/ser-des/config/activityArchetype.d.ts.map +1 -0
  63. package/dist/src/ser-des/config/activityArchetype.js +78 -0
  64. package/dist/src/ser-des/config/activityArchetype.js.map +1 -0
  65. package/dist/src/ser-des/config/artifact.d.ts +16 -0
  66. package/dist/src/ser-des/config/artifact.d.ts.map +1 -0
  67. package/dist/src/ser-des/config/artifact.js +392 -0
  68. package/dist/src/ser-des/config/artifact.js.map +1 -0
  69. package/dist/src/ser-des/config/calculation.d.ts.map +1 -1
  70. package/dist/src/ser-des/config/calculation.js +214 -12
  71. package/dist/src/ser-des/config/calculation.js.map +1 -1
  72. package/dist/src/ser-des/config/comment.d.ts +34 -0
  73. package/dist/src/ser-des/config/comment.d.ts.map +1 -0
  74. package/dist/src/ser-des/config/comment.js +121 -0
  75. package/dist/src/ser-des/config/comment.js.map +1 -0
  76. package/dist/src/ser-des/config/competenceKind.d.ts +8 -0
  77. package/dist/src/ser-des/config/competenceKind.d.ts.map +1 -0
  78. package/dist/src/ser-des/config/competenceKind.js +266 -0
  79. package/dist/src/ser-des/config/competenceKind.js.map +1 -0
  80. package/dist/src/ser-des/config/composition.d.ts +6 -0
  81. package/dist/src/ser-des/config/composition.d.ts.map +1 -0
  82. package/dist/src/ser-des/config/composition.js +165 -0
  83. package/dist/src/ser-des/config/composition.js.map +1 -0
  84. package/dist/src/ser-des/config/conformanceClass.d.ts +9 -0
  85. package/dist/src/ser-des/config/conformanceClass.d.ts.map +1 -0
  86. package/dist/src/ser-des/config/conformanceClass.js +128 -0
  87. package/dist/src/ser-des/config/conformanceClass.js.map +1 -0
  88. package/dist/src/ser-des/config/conformanceTest.d.ts +6 -0
  89. package/dist/src/ser-des/config/conformanceTest.d.ts.map +1 -0
  90. package/dist/src/ser-des/config/conformanceTest.js +929 -0
  91. package/dist/src/ser-des/config/conformanceTest.js.map +1 -0
  92. package/dist/src/ser-des/config/constraint.d.ts +5 -0
  93. package/dist/src/ser-des/config/constraint.d.ts.map +1 -0
  94. package/dist/src/ser-des/config/constraint.js +108 -0
  95. package/dist/src/ser-des/config/constraint.js.map +1 -0
  96. package/dist/src/ser-des/config/data.d.ts.map +1 -1
  97. package/dist/src/ser-des/config/data.js +105 -12
  98. package/dist/src/ser-des/config/data.js.map +1 -1
  99. package/dist/src/ser-des/config/design.d.ts +9 -0
  100. package/dist/src/ser-des/config/design.d.ts.map +1 -0
  101. package/dist/src/ser-des/config/design.js +847 -0
  102. package/dist/src/ser-des/config/design.js.map +1 -0
  103. package/dist/src/ser-des/config/discrepancyRecord.d.ts +5 -0
  104. package/dist/src/ser-des/config/discrepancyRecord.d.ts.map +1 -0
  105. package/dist/src/ser-des/config/discrepancyRecord.js +109 -0
  106. package/dist/src/ser-des/config/discrepancyRecord.js.map +1 -0
  107. package/dist/src/ser-des/config/dual.d.ts +9 -0
  108. package/dist/src/ser-des/config/dual.d.ts.map +1 -0
  109. package/dist/src/ser-des/config/dual.js +84 -0
  110. package/dist/src/ser-des/config/dual.js.map +1 -0
  111. package/dist/src/ser-des/config/field-parser.d.ts +92 -7
  112. package/dist/src/ser-des/config/field-parser.d.ts.map +1 -1
  113. package/dist/src/ser-des/config/field-parser.js +832 -29
  114. package/dist/src/ser-des/config/field-parser.js.map +1 -1
  115. package/dist/src/ser-des/config/form.d.ts.map +1 -1
  116. package/dist/src/ser-des/config/form.js +355 -134
  117. package/dist/src/ser-des/config/form.js.map +1 -1
  118. package/dist/src/ser-des/config/formulasUsed.d.ts +9 -0
  119. package/dist/src/ser-des/config/formulasUsed.d.ts.map +1 -0
  120. package/dist/src/ser-des/config/formulasUsed.js +126 -0
  121. package/dist/src/ser-des/config/formulasUsed.js.map +1 -0
  122. package/dist/src/ser-des/config/index.d.ts.map +1 -1
  123. package/dist/src/ser-des/config/index.js +180 -1
  124. package/dist/src/ser-des/config/index.js.map +1 -1
  125. package/dist/src/ser-des/config/instance.d.ts +22 -0
  126. package/dist/src/ser-des/config/instance.d.ts.map +1 -0
  127. package/dist/src/ser-des/config/instance.js +266 -0
  128. package/dist/src/ser-des/config/instance.js.map +1 -0
  129. package/dist/src/ser-des/config/invariant.d.ts +9 -0
  130. package/dist/src/ser-des/config/invariant.d.ts.map +1 -0
  131. package/dist/src/ser-des/config/invariant.js +143 -0
  132. package/dist/src/ser-des/config/invariant.js.map +1 -0
  133. package/dist/src/ser-des/config/mapProfile.d.ts.map +1 -1
  134. package/dist/src/ser-des/config/mapProfile.js +199 -14
  135. package/dist/src/ser-des/config/mapProfile.js.map +1 -1
  136. package/dist/src/ser-des/config/metadata.js +6 -6
  137. package/dist/src/ser-des/config/metadata.js.map +1 -1
  138. package/dist/src/ser-des/config/monitor.d.ts +9 -0
  139. package/dist/src/ser-des/config/monitor.d.ts.map +1 -0
  140. package/dist/src/ser-des/config/monitor.js +322 -0
  141. package/dist/src/ser-des/config/monitor.js.map +1 -0
  142. package/dist/src/ser-des/config/note.d.ts.map +1 -1
  143. package/dist/src/ser-des/config/note.js +16 -1
  144. package/dist/src/ser-des/config/note.js.map +1 -1
  145. package/dist/src/ser-des/config/packageManifest.d.ts +5 -0
  146. package/dist/src/ser-des/config/packageManifest.d.ts.map +1 -0
  147. package/dist/src/ser-des/config/packageManifest.js +349 -0
  148. package/dist/src/ser-des/config/packageManifest.js.map +1 -0
  149. package/dist/src/ser-des/config/passport.d.ts +9 -0
  150. package/dist/src/ser-des/config/passport.d.ts.map +1 -0
  151. package/dist/src/ser-des/config/passport.js +191 -0
  152. package/dist/src/ser-des/config/passport.js.map +1 -0
  153. package/dist/src/ser-des/config/process.d.ts +5 -3
  154. package/dist/src/ser-des/config/process.d.ts.map +1 -1
  155. package/dist/src/ser-des/config/process.js +915 -8
  156. package/dist/src/ser-des/config/process.js.map +1 -1
  157. package/dist/src/ser-des/config/quantity.d.ts +21 -0
  158. package/dist/src/ser-des/config/quantity.d.ts.map +1 -0
  159. package/dist/src/ser-des/config/quantity.js +114 -0
  160. package/dist/src/ser-des/config/quantity.js.map +1 -0
  161. package/dist/src/ser-des/config/quantityRegister.d.ts +9 -0
  162. package/dist/src/ser-des/config/quantityRegister.d.ts.map +1 -0
  163. package/dist/src/ser-des/config/quantityRegister.js +202 -0
  164. package/dist/src/ser-des/config/quantityRegister.js.map +1 -0
  165. package/dist/src/ser-des/config/reference.d.ts.map +1 -1
  166. package/dist/src/ser-des/config/reference.js +6 -0
  167. package/dist/src/ser-des/config/reference.js.map +1 -1
  168. package/dist/src/ser-des/config/referenceMaterial.d.ts +5 -0
  169. package/dist/src/ser-des/config/referenceMaterial.d.ts.map +1 -0
  170. package/dist/src/ser-des/config/referenceMaterial.js +296 -0
  171. package/dist/src/ser-des/config/referenceMaterial.js.map +1 -0
  172. package/dist/src/ser-des/config/requirement.d.ts +16 -0
  173. package/dist/src/ser-des/config/requirement.d.ts.map +1 -0
  174. package/dist/src/ser-des/config/requirement.js +579 -0
  175. package/dist/src/ser-des/config/requirement.js.map +1 -0
  176. package/dist/src/ser-des/config/role.d.ts.map +1 -1
  177. package/dist/src/ser-des/config/role.js +12 -0
  178. package/dist/src/ser-des/config/role.js.map +1 -1
  179. package/dist/src/ser-des/config/series.d.ts +9 -0
  180. package/dist/src/ser-des/config/series.d.ts.map +1 -0
  181. package/dist/src/ser-des/config/series.js +121 -0
  182. package/dist/src/ser-des/config/series.js.map +1 -0
  183. package/dist/src/ser-des/config/sourceDiscrepancy.d.ts +11 -0
  184. package/dist/src/ser-des/config/sourceDiscrepancy.d.ts.map +1 -0
  185. package/dist/src/ser-des/config/sourceDiscrepancy.js +83 -0
  186. package/dist/src/ser-des/config/sourceDiscrepancy.js.map +1 -0
  187. package/dist/src/ser-des/config/stateMachine.d.ts.map +1 -1
  188. package/dist/src/ser-des/config/stateMachine.js +189 -38
  189. package/dist/src/ser-des/config/stateMachine.js.map +1 -1
  190. package/dist/src/ser-des/config/subform.d.ts.map +1 -1
  191. package/dist/src/ser-des/config/subform.js +25 -33
  192. package/dist/src/ser-des/config/subform.js.map +1 -1
  193. package/dist/src/ser-des/config/subject.d.ts +58 -0
  194. package/dist/src/ser-des/config/subject.d.ts.map +1 -0
  195. package/dist/src/ser-des/config/subject.js +2093 -0
  196. package/dist/src/ser-des/config/subject.js.map +1 -0
  197. package/dist/src/ser-des/config/symbol.d.ts.map +1 -1
  198. package/dist/src/ser-des/config/symbol.js +130 -6
  199. package/dist/src/ser-des/config/symbol.js.map +1 -1
  200. package/dist/src/ser-des/config/table.d.ts.map +1 -1
  201. package/dist/src/ser-des/config/table.js +373 -7
  202. package/dist/src/ser-des/config/table.js.map +1 -1
  203. package/dist/src/ser-des/config/term.d.ts.map +1 -1
  204. package/dist/src/ser-des/config/term.js +107 -0
  205. package/dist/src/ser-des/config/term.js.map +1 -1
  206. package/dist/src/ser-des/config/testPointSet.d.ts +5 -0
  207. package/dist/src/ser-des/config/testPointSet.d.ts.map +1 -0
  208. package/dist/src/ser-des/config/testPointSet.js +199 -0
  209. package/dist/src/ser-des/config/testPointSet.js.map +1 -0
  210. package/dist/src/ser-des/config/testSequence.d.ts +9 -0
  211. package/dist/src/ser-des/config/testSequence.d.ts.map +1 -0
  212. package/dist/src/ser-des/config/testSequence.js +206 -0
  213. package/dist/src/ser-des/config/testSequence.js.map +1 -0
  214. package/dist/src/ser-des/config/text.d.ts +5 -0
  215. package/dist/src/ser-des/config/text.d.ts.map +1 -0
  216. package/dist/src/ser-des/config/text.js +106 -0
  217. package/dist/src/ser-des/config/text.js.map +1 -0
  218. package/dist/src/ser-des/config/twin.d.ts +31 -0
  219. package/dist/src/ser-des/config/twin.d.ts.map +1 -0
  220. package/dist/src/ser-des/config/twin.js +362 -0
  221. package/dist/src/ser-des/config/twin.js.map +1 -0
  222. package/dist/src/ser-des/config/verdict.d.ts +5 -0
  223. package/dist/src/ser-des/config/verdict.d.ts.map +1 -0
  224. package/dist/src/ser-des/config/verdict.js +159 -0
  225. package/dist/src/ser-des/config/verdict.js.map +1 -0
  226. package/dist/src/ser-des/config/viewProfile.d.ts.map +1 -1
  227. package/dist/src/ser-des/config/viewProfile.js +7 -0
  228. package/dist/src/ser-des/config/viewProfile.js.map +1 -1
  229. package/dist/src/ser-des/includes.d.ts.map +1 -1
  230. package/dist/src/ser-des/includes.js +10 -10
  231. package/dist/src/ser-des/includes.js.map +1 -1
  232. package/dist/src/ser-des/index.d.ts +12 -0
  233. package/dist/src/ser-des/index.d.ts.map +1 -1
  234. package/dist/src/ser-des/index.js +42 -0
  235. package/dist/src/ser-des/index.js.map +1 -1
  236. package/dist/src/ser-des/package.d.ts +53 -0
  237. package/dist/src/ser-des/package.d.ts.map +1 -0
  238. package/dist/src/ser-des/package.js +404 -0
  239. package/dist/src/ser-des/package.js.map +1 -0
  240. package/dist/src/ser-des/parse-block.d.ts.map +1 -1
  241. package/dist/src/ser-des/parse-block.js +7 -1
  242. package/dist/src/ser-des/parse-block.js.map +1 -1
  243. package/dist/src/ser-des/parse.d.ts.map +1 -1
  244. package/dist/src/ser-des/parse.js +45 -0
  245. package/dist/src/ser-des/parse.js.map +1 -1
  246. package/dist/src/ser-des/prm.d.ts +53 -0
  247. package/dist/src/ser-des/prm.d.ts.map +1 -0
  248. package/dist/src/ser-des/prm.js +257 -0
  249. package/dist/src/ser-des/prm.js.map +1 -0
  250. package/dist/src/ser-des/resolve.d.ts.map +1 -1
  251. package/dist/src/ser-des/resolve.js +1 -0
  252. package/dist/src/ser-des/resolve.js.map +1 -1
  253. package/dist/src/ser-des/tokenize.d.ts +11 -0
  254. package/dist/src/ser-des/tokenize.d.ts.map +1 -1
  255. package/dist/src/ser-des/tokenize.js +28 -1
  256. package/dist/src/ser-des/tokenize.js.map +1 -1
  257. package/dist/src/ser-des/types.d.ts +56 -1
  258. package/dist/src/ser-des/types.d.ts.map +1 -1
  259. package/dist/src/spelling.d.ts +35 -0
  260. package/dist/src/spelling.d.ts.map +1 -0
  261. package/dist/src/spelling.js +140 -0
  262. package/dist/src/spelling.js.map +1 -0
  263. package/dist/src/text-coverage.d.ts +164 -0
  264. package/dist/src/text-coverage.d.ts.map +1 -0
  265. package/dist/src/text-coverage.js +679 -0
  266. package/dist/src/text-coverage.js.map +1 -0
  267. package/dist/src/time.d.ts +55 -0
  268. package/dist/src/time.d.ts.map +1 -0
  269. package/dist/src/time.js +223 -0
  270. package/dist/src/time.js.map +1 -0
  271. package/dist/src/type-expr.d.ts +31 -0
  272. package/dist/src/type-expr.d.ts.map +1 -0
  273. package/dist/src/type-expr.js +110 -0
  274. package/dist/src/type-expr.js.map +1 -0
  275. package/dist/src/types/Acceptance.d.ts +31 -0
  276. package/dist/src/types/Acceptance.d.ts.map +1 -0
  277. package/dist/src/types/Acceptance.js +12 -0
  278. package/dist/src/types/Acceptance.js.map +1 -0
  279. package/dist/src/types/ActivityArchetype.d.ts +14 -0
  280. package/dist/src/types/ActivityArchetype.d.ts.map +1 -0
  281. package/dist/src/types/ActivityArchetype.js +17 -0
  282. package/dist/src/types/ActivityArchetype.js.map +1 -0
  283. package/dist/src/types/Artifact.d.ts +117 -0
  284. package/dist/src/types/Artifact.d.ts.map +1 -0
  285. package/dist/src/types/Artifact.js +35 -0
  286. package/dist/src/types/Artifact.js.map +1 -0
  287. package/dist/src/types/Calculation.d.ts +49 -0
  288. package/dist/src/types/Calculation.d.ts.map +1 -1
  289. package/dist/src/types/Comment.d.ts +23 -0
  290. package/dist/src/types/Comment.d.ts.map +1 -0
  291. package/dist/src/types/Comment.js +3 -0
  292. package/dist/src/types/Comment.js.map +1 -0
  293. package/dist/src/types/CompetenceKind.d.ts +70 -0
  294. package/dist/src/types/CompetenceKind.d.ts.map +1 -0
  295. package/dist/src/types/CompetenceKind.js +3 -0
  296. package/dist/src/types/CompetenceKind.js.map +1 -0
  297. package/dist/src/types/Composition.d.ts +80 -0
  298. package/dist/src/types/Composition.d.ts.map +1 -0
  299. package/dist/src/types/Composition.js +44 -0
  300. package/dist/src/types/Composition.js.map +1 -0
  301. package/dist/src/types/ConformanceClass.d.ts +22 -0
  302. package/dist/src/types/ConformanceClass.d.ts.map +1 -0
  303. package/dist/src/types/ConformanceClass.js +7 -0
  304. package/dist/src/types/ConformanceClass.js.map +1 -0
  305. package/dist/src/types/ConformanceTest.d.ts +206 -0
  306. package/dist/src/types/ConformanceTest.d.ts.map +1 -0
  307. package/dist/src/types/ConformanceTest.js +3 -0
  308. package/dist/src/types/ConformanceTest.js.map +1 -0
  309. package/dist/src/types/Constraint.d.ts +34 -0
  310. package/dist/src/types/Constraint.d.ts.map +1 -0
  311. package/dist/src/types/Constraint.js +3 -0
  312. package/dist/src/types/Constraint.js.map +1 -0
  313. package/dist/src/types/Design.d.ts +147 -0
  314. package/dist/src/types/Design.d.ts.map +1 -0
  315. package/dist/src/types/Design.js +10 -0
  316. package/dist/src/types/Design.js.map +1 -0
  317. package/dist/src/types/DiscrepancyRecord.d.ts +42 -0
  318. package/dist/src/types/DiscrepancyRecord.d.ts.map +1 -0
  319. package/dist/src/types/DiscrepancyRecord.js +3 -0
  320. package/dist/src/types/DiscrepancyRecord.js.map +1 -0
  321. package/dist/src/types/Form.d.ts +127 -1
  322. package/dist/src/types/Form.d.ts.map +1 -1
  323. package/dist/src/types/FormulasUsed.d.ts +95 -0
  324. package/dist/src/types/FormulasUsed.d.ts.map +1 -0
  325. package/dist/src/types/FormulasUsed.js +64 -0
  326. package/dist/src/types/FormulasUsed.js.map +1 -0
  327. package/dist/src/types/Instance.d.ts +105 -0
  328. package/dist/src/types/Instance.d.ts.map +1 -0
  329. package/dist/src/types/Instance.js +40 -0
  330. package/dist/src/types/Instance.js.map +1 -0
  331. package/dist/src/types/Invariant.d.ts +82 -0
  332. package/dist/src/types/Invariant.d.ts.map +1 -0
  333. package/dist/src/types/Invariant.js +50 -0
  334. package/dist/src/types/Invariant.js.map +1 -0
  335. package/dist/src/types/MapProfile.d.ts +36 -1
  336. package/dist/src/types/MapProfile.d.ts.map +1 -1
  337. package/dist/src/types/Monitor.d.ts +144 -0
  338. package/dist/src/types/Monitor.d.ts.map +1 -0
  339. package/dist/src/types/Monitor.js +74 -0
  340. package/dist/src/types/Monitor.js.map +1 -0
  341. package/dist/src/types/Note.d.ts +4 -1
  342. package/dist/src/types/Note.d.ts.map +1 -1
  343. package/dist/src/types/Package.d.ts +161 -0
  344. package/dist/src/types/Package.d.ts.map +1 -0
  345. package/dist/src/types/Package.js +3 -0
  346. package/dist/src/types/Package.js.map +1 -0
  347. package/dist/src/types/Passport.d.ts +125 -0
  348. package/dist/src/types/Passport.d.ts.map +1 -0
  349. package/dist/src/types/Passport.js +84 -0
  350. package/dist/src/types/Passport.js.map +1 -0
  351. package/dist/src/types/Quantity.d.ts +99 -0
  352. package/dist/src/types/Quantity.d.ts.map +1 -0
  353. package/dist/src/types/Quantity.js +24 -0
  354. package/dist/src/types/Quantity.js.map +1 -0
  355. package/dist/src/types/Reference.d.ts +2 -0
  356. package/dist/src/types/Reference.d.ts.map +1 -1
  357. package/dist/src/types/ReferenceMaterial.d.ts +53 -0
  358. package/dist/src/types/ReferenceMaterial.d.ts.map +1 -0
  359. package/dist/src/types/ReferenceMaterial.js +14 -0
  360. package/dist/src/types/ReferenceMaterial.js.map +1 -0
  361. package/dist/src/types/Requirement.d.ts +111 -0
  362. package/dist/src/types/Requirement.d.ts.map +1 -0
  363. package/dist/src/types/Requirement.js +10 -0
  364. package/dist/src/types/Requirement.js.map +1 -0
  365. package/dist/src/types/Role.d.ts +4 -0
  366. package/dist/src/types/Role.d.ts.map +1 -1
  367. package/dist/src/types/Series.d.ts +31 -0
  368. package/dist/src/types/Series.d.ts.map +1 -0
  369. package/dist/src/types/Series.js +14 -0
  370. package/dist/src/types/Series.js.map +1 -0
  371. package/dist/src/types/SourceDiscrepancy.d.ts +21 -0
  372. package/dist/src/types/SourceDiscrepancy.d.ts.map +1 -0
  373. package/dist/src/types/SourceDiscrepancy.js +13 -0
  374. package/dist/src/types/SourceDiscrepancy.js.map +1 -0
  375. package/dist/src/types/Standard.d.ts +68 -0
  376. package/dist/src/types/Standard.d.ts.map +1 -1
  377. package/dist/src/types/StateMachine.d.ts +43 -0
  378. package/dist/src/types/StateMachine.d.ts.map +1 -1
  379. package/dist/src/types/StateMachine.js +7 -0
  380. package/dist/src/types/StateMachine.js.map +1 -1
  381. package/dist/src/types/Subject.d.ts +432 -0
  382. package/dist/src/types/Subject.d.ts.map +1 -0
  383. package/dist/src/types/Subject.js +13 -0
  384. package/dist/src/types/Subject.js.map +1 -0
  385. package/dist/src/types/Symbol.d.ts +31 -1
  386. package/dist/src/types/Symbol.d.ts.map +1 -1
  387. package/dist/src/types/Table.d.ts +43 -0
  388. package/dist/src/types/Table.d.ts.map +1 -1
  389. package/dist/src/types/Term.d.ts +29 -0
  390. package/dist/src/types/Term.d.ts.map +1 -1
  391. package/dist/src/types/TestPointSet.d.ts +33 -0
  392. package/dist/src/types/TestPointSet.d.ts.map +1 -0
  393. package/dist/src/types/TestPointSet.js +11 -0
  394. package/dist/src/types/TestPointSet.js.map +1 -0
  395. package/dist/src/types/TestSequence.d.ts +105 -0
  396. package/dist/src/types/TestSequence.d.ts.map +1 -0
  397. package/dist/src/types/TestSequence.js +65 -0
  398. package/dist/src/types/TestSequence.js.map +1 -0
  399. package/dist/src/types/Text.d.ts +21 -0
  400. package/dist/src/types/Text.d.ts.map +1 -0
  401. package/dist/src/types/Text.js +38 -0
  402. package/dist/src/types/Text.js.map +1 -0
  403. package/dist/src/types/Time.d.ts +43 -0
  404. package/dist/src/types/Time.d.ts.map +1 -0
  405. package/dist/src/types/Time.js +14 -0
  406. package/dist/src/types/Time.js.map +1 -0
  407. package/dist/src/types/Twin.d.ts +155 -0
  408. package/dist/src/types/Twin.d.ts.map +1 -0
  409. package/dist/src/types/Twin.js +102 -0
  410. package/dist/src/types/Twin.js.map +1 -0
  411. package/dist/src/types/Verdict.d.ts +40 -0
  412. package/dist/src/types/Verdict.d.ts.map +1 -0
  413. package/dist/src/types/Verdict.js +14 -0
  414. package/dist/src/types/Verdict.js.map +1 -0
  415. package/dist/src/types/ViewProfile.d.ts +6 -0
  416. package/dist/src/types/ViewProfile.d.ts.map +1 -1
  417. package/dist/src/types/data.d.ts +27 -0
  418. package/dist/src/types/data.d.ts.map +1 -1
  419. package/dist/src/types/process.d.ts +231 -0
  420. package/dist/src/types/process.d.ts.map +1 -1
  421. package/dist-browser/index.mjs +6696 -663
  422. package/dist-cli/primmel.mjs +21453 -0
  423. package/package.json +61 -5
@@ -0,0 +1,707 @@
1
+ "use strict";
2
+ // ─────────────────────────────────────────────────────────────────────
3
+ // RDF/OWL export (TODO.roadmap/27 — interop projections, surface 2).
4
+ //
5
+ // A Primmel package → an RDF graph in the IEC-ISO Core Ontology
6
+ // vocabulary (the smartSDU information-model share's core-ontology.ttl
7
+ // v2.0.0 — every IRI cited in rdf-vocabulary.ts): the package as
8
+ // smart:PublicationDocument, requirement classes as the smart:Clause
9
+ // tree (nested per their /req/... id paths), requirements as Provision
10
+ // subclasses BY MODALITY (the smartSDU form: shall → smart:Requirement,
11
+ // should → smart:Recommendation, may → smart:Permission — the modality
12
+ // IS the rdf:type subclass; the raw token rides as primmel:obligation
13
+ // data for consumers without RDFS subclass reasoning), conformance
14
+ // tests as primmel:ConformanceTest (the vocabulary has NO verification-
15
+ // provision class — documented extension, declared rdfs:subClassOf
16
+ // smart:Provision in the graph), terminology as smart:TermEntry +
17
+ // skosxl labels per the share's terminology model, guidance as
18
+ // smart:ProvisionSupplement notes, and provenance (source URNs) as
19
+ // dcterms:source annotation IRIs in the platform's <doc#clause-X>
20
+ // convention. Turtle is canonical; JSON-LD renders the same graph.
21
+ //
22
+ // ONE-WAY PROJECTION, NEVER THE KERNEL'S TRUTH. The package stays the
23
+ // single source of truth; re-imports are new-model suggestions, never
24
+ // merges (documented, not built). The same doctrine is stated in the
25
+ // exported document's header note (the leading Turtle comment; JSON-LD
26
+ // has no comment syntax — the note ships in Turtle + this header only):
27
+ //
28
+ // SURVIVES — the document + clause tree (PublicationDocument, Clause
29
+ // nesting by id path), provisions (requirements typed by modality,
30
+ // tests as primmel:ConformanceTest), the modality token, terms with
31
+ // definitions (TermEntry + skosxl:prefLabel/altLabel/deprecatedLabel
32
+ // Term nodes, form/part-of-speech types when authored), provenance
33
+ // (dcterms:source doc#clause IRIs), cross-references
34
+ // (dcterms:requires dependencies, primmel:verifies test targets,
35
+ // dcterms:references bindings/see-also naming exported ids),
36
+ // guidance as ProvisionSupplement notes, the verification method as
37
+ // inert data.
38
+ // LOST — machine-checkable bindings (binds_to subject paths), OCL
39
+ // limit expressions, acceptance criteria, quantities with units,
40
+ // typed parameters, applicability filters, processes, forms,
41
+ // workflows, state machines, tables, formulas, symbols (term
42
+ // symbol links), the publication layout (the share's oa:Annotation
43
+ // → dcat:Distribution content-fragment machinery is NOT projected:
44
+ // statements/labels ride on the nodes as rdf:value / skosxl
45
+ // literals), test-reference fragment detail (only doc+clause of a
46
+ // test's reference survives).
47
+ //
48
+ // Extension namespace (urn:primmel:vocab:, prefix primmel:) — minted
49
+ // because the core vocabulary lacks the concepts, declared in every
50
+ // graph's declaration block: primmel:ConformanceTest (class),
51
+ // primmel:verifies (subPropertyOf dcterms:references),
52
+ // primmel:obligation (modality token), primmel:verificationMethod,
53
+ // primmel:vocabRef, primmel:vocabTerm.
54
+ //
55
+ // Companion modules: rdf-shapes.ts (the projection's SHACL shapes) and
56
+ // rdf-competency-questions.ts (the SPARQL acceptance queries) — both
57
+ // executed against exported graphs in test/rdf-export.test.ts.
58
+ // ─────────────────────────────────────────────────────────────────────
59
+ Object.defineProperty(exports, "__esModule", { value: true });
60
+ exports.rdfSlug = rdfSlug;
61
+ exports.rdfRequirementClassOf = rdfRequirementClassOf;
62
+ exports.exportStandardRdf = exportStandardRdf;
63
+ exports.exportPackageRdf = exportPackageRdf;
64
+ exports.turtleEscape = turtleEscape;
65
+ exports.renderTurtle = renderTurtle;
66
+ const package_1 = require("../ser-des/package");
67
+ const rdf_vocabulary_1 = require("./rdf-vocabulary");
68
+ const iri = (iri_) => ({ kind: 'iri', iri: iri_ });
69
+ const lit = (value, lang) => lang ? { kind: 'literal', value, lang } : { kind: 'literal', value };
70
+ // Shared predicate IRIs (namespaces live in rdf-vocabulary.ts).
71
+ const RDF_TYPE = `${rdf_vocabulary_1.RDF_NS}type`;
72
+ const RDF_VALUE = `${rdf_vocabulary_1.RDF_NS}value`;
73
+ const RDFS_SUBCLASS_OF = `${rdf_vocabulary_1.RDFS_NS}subClassOf`;
74
+ const RDFS_SUBPROPERTY_OF = `${rdf_vocabulary_1.RDFS_NS}subPropertyOf`;
75
+ const RDFS_LABEL = `${rdf_vocabulary_1.RDFS_NS}label`;
76
+ const DCTERMS_TITLE = `${rdf_vocabulary_1.DCTERMS_NS}title`;
77
+ const DCTERMS_IDENTIFIER = `${rdf_vocabulary_1.DCTERMS_NS}identifier`;
78
+ const DCTERMS_DESCRIPTION = `${rdf_vocabulary_1.DCTERMS_NS}description`;
79
+ const DCTERMS_HAS_VERSION = `${rdf_vocabulary_1.DCTERMS_NS}hasVersion`;
80
+ const DCTERMS_IS_PART_OF = `${rdf_vocabulary_1.DCTERMS_NS}isPartOf`;
81
+ const DCTERMS_SOURCE = `${rdf_vocabulary_1.DCTERMS_NS}source`;
82
+ const DCTERMS_REQUIRES = `${rdf_vocabulary_1.DCTERMS_NS}requires`;
83
+ const DCTERMS_REFERENCES = `${rdf_vocabulary_1.DCTERMS_NS}references`;
84
+ const SKOS_DEFINITION = `${rdf_vocabulary_1.SKOS_NS}definition`;
85
+ const SKOS_NOTE = `${rdf_vocabulary_1.SKOS_NS}note`;
86
+ const SKOS_SCOPE_NOTE = `${rdf_vocabulary_1.SKOS_NS}scopeNote`;
87
+ const SKOSXL_LABEL = `${rdf_vocabulary_1.SKOSXL_NS}Label`;
88
+ const SKOSXL_PREF_LABEL = `${rdf_vocabulary_1.SKOSXL_NS}prefLabel`;
89
+ const SKOSXL_ALT_LABEL = `${rdf_vocabulary_1.SKOSXL_NS}altLabel`;
90
+ const SKOSXL_LITERAL_FORM = `${rdf_vocabulary_1.SKOSXL_NS}literalForm`;
91
+ /** The synthetic Clause grouping the conformance tests (27b's synthetic
92
+ * "Conformance tests" ReqIF heading, one surface over). */
93
+ const TESTS_CLAUSE_LOCAL = 'conformance-tests';
94
+ /**
95
+ * Slugs a Primmel id into an IRI-safe local-name fragment:
96
+ * `/req/metrological/mpe` → `req-metrological-mpe`. (Same algorithm as
97
+ * the ReqIF surface's slug — kept module-local so the two surfaces
98
+ * evolve independently.)
99
+ */
100
+ function rdfSlug(id) {
101
+ const s = id
102
+ .replace(/^\/+/, '')
103
+ .replace(/[^A-Za-z0-9_-]+/g, '-')
104
+ .replace(/-+/g, '-')
105
+ .replace(/-$/, '');
106
+ return s === '' ? 'x' : s;
107
+ }
108
+ /** A language tag safe to emit: the term's authored language when it
109
+ * looks like a BCP-47 primary tag, else "en". */
110
+ function langTag(language) {
111
+ return language && /^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$/.test(language)
112
+ ? language
113
+ : 'en';
114
+ }
115
+ /**
116
+ * The class a requirement belongs to: the longest class id that is a
117
+ * path-prefix of the requirement id (`/req/a/b` holds `/req/a/b/c`).
118
+ * Null = the requirement sits at the document's top level. (The ReqIF
119
+ * surface has the same rule as `requirementClassOf`; duplicated here so
120
+ * the surfaces stay independent.)
121
+ */
122
+ function rdfRequirementClassOf(requirementId, classIds) {
123
+ let best = null;
124
+ for (const c of classIds) {
125
+ if (requirementId.startsWith(c + '/')) {
126
+ if (best === null || c.length > best.length) {
127
+ best = c;
128
+ }
129
+ }
130
+ }
131
+ return best;
132
+ }
133
+ // ─────────────────────────────────────────────────────────────────────
134
+ // Projection: Standard → triples.
135
+ // ─────────────────────────────────────────────────────────────────────
136
+ /** All { doc, clause } fragments a requirement cites (sourceRefs first,
137
+ * falling back to the back-compat single `source`). */
138
+ function requirementSourceRefs(r) {
139
+ const refs = r.sourceRefs ?? (r.source ? [r.source] : []);
140
+ return refs.map(s => ({ doc: s.doc, clause: s.clause }));
141
+ }
142
+ /** All { doc, clause } fragments a conformance test cites (sourceRefs
143
+ * first, falling back to the single `sourceRef`; fragment detail is
144
+ * dropped — LOST, per the module header). */
145
+ function testSourceRefs(t) {
146
+ const refs = t.sourceRefs ?? (t.sourceRef ? [t.sourceRef] : []);
147
+ return refs.map(s => ({ doc: s.doc, clause: s.clause }));
148
+ }
149
+ /** IRIREF-legality for a composed citation IRI: a scheme, then no
150
+ * whitespace or IRI-delimiter characters. */
151
+ const IRI_SHAPED = /^[A-Za-z][A-Za-z0-9+.-]*:[^\s<>"{}|^`\\]*$/;
152
+ /** The dcterms:source object for one { doc, clause } fragment. An
153
+ * IRI-shaped citation composes the platform's <doc#clause-X> convention
154
+ * and exports as an IRI. A human-readable citation (the CASCO layers:
155
+ * `doc "ISO/IEC 17065:2012"` with a clause list) exports as a
156
+ * natural-language literal — `"<doc>, clause <clause>"` — NEVER the
157
+ * IRI-mangled `#clause-` composition, which reads like an IRI to a
158
+ * downstream consumer (task-27c review Minor 2); a bare doc cites the
159
+ * document itself, as-is. */
160
+ function sourceTermFor(doc, clause) {
161
+ const composed = clause ? `${doc}#clause-${clause}` : doc;
162
+ if (IRI_SHAPED.test(composed)) {
163
+ return iri(composed);
164
+ }
165
+ return lit(clause ? `${doc}, clause ${clause}` : doc);
166
+ }
167
+ /** The dcterms:source object for one already-complete citation string
168
+ * (a Term.source token): an IRI when IRI-shaped (the URN convention),
169
+ * else the literal token — human-readable provenance survives as text
170
+ * (caught by the rdflib cross-check on the R 60 export). */
171
+ function sourceTerm(citation) {
172
+ return IRI_SHAPED.test(citation) ? iri(citation) : lit(citation);
173
+ }
174
+ /** Projects a loaded Standard into an RDF graph (Turtle + JSON-LD). The
175
+ * projection is fully deterministic — no options (the ReqIF surface's
176
+ * `now` has no counterpart: the graph carries no timestamps). */
177
+ function exportStandardRdf(standard) {
178
+ const manifest = standard.packageManifest ?? null;
179
+ const packageId = manifest?.id ?? 'unknown-package';
180
+ const packageTitle = manifest?.title || manifest?.id || 'Primmel package';
181
+ // The document node and every instance IRI derive from baseUrn — a
182
+ // malformed one (the manifest field is a free string; C85 lints it but
183
+ // the export also runs on un-linted packages) would emit spec-malformed
184
+ // IRIREFs silently (task-27c review Important 1). Guard at the door:
185
+ // the same IRI shape C85 checks (scheme present, no whitespace or IRI
186
+ // delimiters) — a one-line content failure, never a malformed document.
187
+ const declaredUrn = manifest?.baseUrn ?? '';
188
+ if (declaredUrn && !IRI_SHAPED.test(declaredUrn)) {
189
+ throw new Error(`package "${packageId}": baseUrn "${declaredUrn}" is not a well-formed IRI (a scheme followed by no whitespace or IRI delimiters) — the RDF projection would emit malformed IRIREFs`);
190
+ }
191
+ const baseUrn = declaredUrn || `urn:primmel:package:${packageId}`;
192
+ const instPrefix = `${baseUrn}#`;
193
+ const classes = standard.requirementClasses ?? [];
194
+ const requirements = standard.requirements ?? [];
195
+ const tests = standard.conformanceTests ?? [];
196
+ const terms = standard.terms ?? [];
197
+ const triples = [];
198
+ const t = (subject, predicate, object) => {
199
+ triples.push({ subject, predicate, object });
200
+ };
201
+ // ── local names (collision-safe, first-come order) ──
202
+ const localById = new Map();
203
+ const usedLocals = new Set([TESTS_CLAUSE_LOCAL]);
204
+ const claimLocal = (id, hint) => {
205
+ let candidate = hint;
206
+ for (let n = 2; usedLocals.has(candidate); n++) {
207
+ candidate = `${hint}-${n}`;
208
+ }
209
+ usedLocals.add(candidate);
210
+ localById.set(id, candidate);
211
+ return candidate;
212
+ };
213
+ const nodeIri = (local) => `${instPrefix}${local}`;
214
+ const iriOf = (id) => {
215
+ const local = localById.get(id);
216
+ return local === undefined ? undefined : nodeIri(local);
217
+ };
218
+ /** Claims a DERIVED local (supplements, labels) — collision-safe like
219
+ * claimLocal but not registered in the id map (nothing references
220
+ * derived nodes by Primmel id). */
221
+ const claimDerived = (hint) => {
222
+ let candidate = hint;
223
+ for (let n = 2; usedLocals.has(candidate); n++) {
224
+ candidate = `${hint}-${n}`;
225
+ }
226
+ usedLocals.add(candidate);
227
+ return candidate;
228
+ };
229
+ // ── the declaration block (the share's instance pattern re-states
230
+ // the subclass triples it relies on — document_sample.ttl:14-16) ──
231
+ const decl = (s, p, o) => t(s, p, typeof o === 'string' ? iri(o) : o);
232
+ decl(rdf_vocabulary_1.SMART_REQUIREMENT, RDFS_SUBCLASS_OF, rdf_vocabulary_1.SMART_PROVISION);
233
+ decl(rdf_vocabulary_1.SMART_RECOMMENDATION, RDFS_SUBCLASS_OF, rdf_vocabulary_1.SMART_PROVISION);
234
+ decl(rdf_vocabulary_1.SMART_PERMISSION, RDFS_SUBCLASS_OF, rdf_vocabulary_1.SMART_PROVISION);
235
+ decl(rdf_vocabulary_1.SMART_CLAUSE, RDFS_SUBCLASS_OF, rdf_vocabulary_1.SMART_PROVISION_SET);
236
+ decl(rdf_vocabulary_1.PRIMMEL_CONFORMANCE_TEST, RDFS_SUBCLASS_OF, rdf_vocabulary_1.SMART_PROVISION);
237
+ decl(rdf_vocabulary_1.PRIMMEL_CONFORMANCE_TEST, RDFS_LABEL, lit('conformance test — Primmel extension: the IEC-ISO Core Ontology has no verification-provision class (rdf-vocabulary.ts)'));
238
+ decl(rdf_vocabulary_1.PRIMMEL_VERIFIES, RDFS_SUBPROPERTY_OF, DCTERMS_REFERENCES);
239
+ decl(rdf_vocabulary_1.PRIMMEL_VERIFIES, RDFS_LABEL, lit('conformance test → verified requirement (Primmel extension)'));
240
+ decl(rdf_vocabulary_1.PRIMMEL_OBLIGATION, RDFS_LABEL, lit('modality token (shall | should | may | undefined) carried as data — the vocabulary’s own modality form is the rdf:type Provision subclass'));
241
+ decl(rdf_vocabulary_1.PRIMMEL_VERIFICATION_METHOD, RDFS_LABEL, lit('verification method facet as inert data (Primmel extension)'));
242
+ decl(rdf_vocabulary_1.PRIMMEL_VOCAB_REF, RDFS_LABEL, lit('glossarist vocabulary-register citation "<register>#<clause>" (Primmel extension)'));
243
+ decl(rdf_vocabulary_1.PRIMMEL_VOCAB_TERM, RDFS_LABEL, lit('register-preferred designation when it differs from the term (Primmel extension)'));
244
+ // ── the document node ──
245
+ const docIri = baseUrn;
246
+ t(docIri, RDF_TYPE, iri(rdf_vocabulary_1.SMART_PUBLICATION_DOCUMENT));
247
+ t(docIri, DCTERMS_TITLE, lit(packageTitle, 'en'));
248
+ t(docIri, DCTERMS_IDENTIFIER, lit(packageId));
249
+ t(docIri, rdf_vocabulary_1.SMART_HAS_PUBLICATION_TYPE, iri(rdf_vocabulary_1.PUBLICATION_TYPE_STANDARD));
250
+ if (manifest?.description) {
251
+ t(docIri, DCTERMS_DESCRIPTION, lit(manifest.description, 'en'));
252
+ }
253
+ if (manifest?.version) {
254
+ t(docIri, DCTERMS_HAS_VERSION, lit(manifest.version));
255
+ }
256
+ // ── cross-references (deduped; dangling refs dropped, recorded) ──
257
+ const droppedReferences = [];
258
+ let crossReferences = 0;
259
+ const seenReference = new Set();
260
+ const addReference = (owner, ref, predicate, kind) => {
261
+ const source = iriOf(owner);
262
+ const target = iriOf(ref);
263
+ if (source === undefined || target === undefined) {
264
+ droppedReferences.push(`${owner} -> ${ref} (${kind})`);
265
+ return;
266
+ }
267
+ const key = `${source}|${predicate}|${target}`;
268
+ if (seenReference.has(key)) {
269
+ return;
270
+ }
271
+ seenReference.add(key);
272
+ t(source, predicate, iri(target));
273
+ crossReferences++;
274
+ };
275
+ // ── supplements (guidance → ProvisionSupplement notes) ──
276
+ let supplements = 0;
277
+ const addGuidanceSupplement = (ownerIri, ownerLocal, guidance) => {
278
+ if (!guidance) {
279
+ return;
280
+ }
281
+ supplements++;
282
+ const supLocal = claimDerived(`${ownerLocal}-note`); // one guidance string per owner
283
+ const supIri = nodeIri(supLocal);
284
+ t(ownerIri, rdf_vocabulary_1.SMART_HAS_SUPPLEMENT, iri(supIri));
285
+ t(supIri, RDF_TYPE, iri(rdf_vocabulary_1.SMART_PROVISION_SUPPLEMENT));
286
+ t(supIri, rdf_vocabulary_1.SMART_HAS_SUPPLEMENT_TYPE, iri(rdf_vocabulary_1.SUPPLEMENT_TYPE_NOTE));
287
+ t(supIri, RDF_VALUE, lit(guidance, 'en'));
288
+ };
289
+ // ── clauses (requirement classes, nested by id path) ──
290
+ const classIds = classes.map(c => c.id);
291
+ for (const rc of classes) {
292
+ claimLocal(rc.id, rdfSlug(rc.id));
293
+ }
294
+ for (const rc of classes) {
295
+ const local = localById.get(rc.id);
296
+ const cIri = nodeIri(local);
297
+ t(cIri, RDF_TYPE, iri(rdf_vocabulary_1.SMART_CLAUSE));
298
+ t(cIri, DCTERMS_IDENTIFIER, lit(rc.id));
299
+ t(cIri, DCTERMS_TITLE, lit(rc.title || rc.name || rc.id, 'en'));
300
+ if (rc.description) {
301
+ t(cIri, DCTERMS_DESCRIPTION, lit(rc.description, 'en'));
302
+ }
303
+ const parent = rdfRequirementClassOf(rc.id, classIds.filter(c => c !== rc.id));
304
+ t(cIri, DCTERMS_IS_PART_OF, iri(parent !== null ? iriOf(parent) : docIri));
305
+ }
306
+ // Class dependencies, after every class IRI exists.
307
+ for (const rc of classes) {
308
+ for (const dep of rc.dependencies ?? []) {
309
+ addReference(rc.id, dep, DCTERMS_REQUIRES, 'depends-on');
310
+ }
311
+ }
312
+ // ── provisions (requirements, typed by modality) ──
313
+ let unknownObligations = 0;
314
+ for (const r of requirements) {
315
+ claimLocal(r.id, rdfSlug(r.id));
316
+ }
317
+ for (const r of requirements) {
318
+ const local = localById.get(r.id);
319
+ const rIri = nodeIri(local);
320
+ const provisionClass = (0, rdf_vocabulary_1.rdfProvisionClass)(r.obligation);
321
+ if (r.obligation && !(r.obligation in rdf_vocabulary_1.RDF_PROVISION_CLASS_BY_OBLIGATION)) {
322
+ // Types smart:Provision + primmel:obligation "undefined" — counted
323
+ // so the typo is visible in stats, never silently promoted.
324
+ unknownObligations++;
325
+ }
326
+ t(rIri, RDF_TYPE, iri(provisionClass));
327
+ t(rIri, DCTERMS_IDENTIFIER, lit(r.id));
328
+ if (r.name) {
329
+ t(rIri, DCTERMS_TITLE, lit(r.name, 'en'));
330
+ }
331
+ t(rIri, RDF_VALUE, lit(r.statement, 'en'));
332
+ t(rIri, rdf_vocabulary_1.PRIMMEL_OBLIGATION, lit((0, rdf_vocabulary_1.rdfObligationToken)(r.obligation)));
333
+ t(rIri, rdf_vocabulary_1.SMART_HAS_BINDINGNESS_TYPE, iri(rdf_vocabulary_1.BINDINGNESS_NORMATIVE));
334
+ if (provisionClass !== rdf_vocabulary_1.SMART_PROVISION) {
335
+ // governing per the provision-type taxonomy (Requirement and its
336
+ // sibling verbal forms "guide actions or results"); left unstated
337
+ // on unknown-obligation provisions rather than guessed.
338
+ t(rIri, rdf_vocabulary_1.SMART_HAS_PROVISION_TYPE, iri(rdf_vocabulary_1.PROVISION_TYPE_GOVERNING));
339
+ }
340
+ const owner = rdfRequirementClassOf(r.id, classIds);
341
+ t(rIri, DCTERMS_IS_PART_OF, iri(owner !== null ? iriOf(owner) : docIri));
342
+ if (r.verificationMethod) {
343
+ t(rIri, rdf_vocabulary_1.PRIMMEL_VERIFICATION_METHOD, lit(r.verificationMethod));
344
+ }
345
+ const seenSource = new Set();
346
+ for (const s of requirementSourceRefs(r)) {
347
+ const term = sourceTermFor(s.doc, s.clause);
348
+ const key = JSON.stringify(term);
349
+ if (!seenSource.has(key)) {
350
+ seenSource.add(key);
351
+ t(rIri, DCTERMS_SOURCE, term);
352
+ }
353
+ }
354
+ addGuidanceSupplement(rIri, local, r.guidance);
355
+ }
356
+ // Requirement dependencies + bindings, after every provision IRI
357
+ // exists (dependencies point forward as often as back).
358
+ for (const r of requirements) {
359
+ for (const dep of r.dependencies ?? []) {
360
+ addReference(r.id, dep, DCTERMS_REQUIRES, 'depends-on');
361
+ }
362
+ // Bindings: binds_to paths and limit uses that name an exported
363
+ // node become dcterms:references. Unexported `/`-addressed refs are
364
+ // recorded as dropped; subject-chain paths stay silent (LOST).
365
+ const bindings = [...(r.bindsTo ?? []), ...(r.limit?.uses ?? [])];
366
+ for (const b of bindings) {
367
+ if (localById.has(b) || b.startsWith('/')) {
368
+ addReference(r.id, b, DCTERMS_REFERENCES, 'binds');
369
+ }
370
+ }
371
+ }
372
+ // ── verification provisions (conformance tests) ──
373
+ for (const test of tests) {
374
+ claimLocal(test.id, rdfSlug(test.id));
375
+ }
376
+ if (tests.length > 0) {
377
+ const cIri = nodeIri(TESTS_CLAUSE_LOCAL);
378
+ t(cIri, RDF_TYPE, iri(rdf_vocabulary_1.SMART_CLAUSE));
379
+ t(cIri, DCTERMS_IDENTIFIER, lit('primmel:conformance-tests'));
380
+ t(cIri, DCTERMS_TITLE, lit('Conformance tests', 'en'));
381
+ t(cIri, DCTERMS_IS_PART_OF, iri(docIri));
382
+ }
383
+ for (const test of tests) {
384
+ const local = localById.get(test.id);
385
+ const tIri = nodeIri(local);
386
+ t(tIri, RDF_TYPE, iri(rdf_vocabulary_1.PRIMMEL_CONFORMANCE_TEST));
387
+ t(tIri, DCTERMS_IDENTIFIER, lit(test.id));
388
+ if (test.name) {
389
+ t(tIri, DCTERMS_TITLE, lit(test.name, 'en'));
390
+ }
391
+ t(tIri, RDF_VALUE, lit(test.purpose || test.method || test.name || test.id, 'en'));
392
+ t(tIri, rdf_vocabulary_1.PRIMMEL_OBLIGATION, lit('undefined'));
393
+ t(tIri, rdf_vocabulary_1.SMART_HAS_BINDINGNESS_TYPE, iri(rdf_vocabulary_1.BINDINGNESS_NORMATIVE));
394
+ t(tIri, DCTERMS_IS_PART_OF, iri(nodeIri(TESTS_CLAUSE_LOCAL)));
395
+ const seenSource = new Set();
396
+ for (const s of testSourceRefs(test)) {
397
+ const term = sourceTermFor(s.doc, s.clause);
398
+ const key = JSON.stringify(term);
399
+ if (!seenSource.has(key)) {
400
+ seenSource.add(key);
401
+ t(tIri, DCTERMS_SOURCE, term);
402
+ }
403
+ }
404
+ addGuidanceSupplement(tIri, local, test.guidance);
405
+ }
406
+ for (const test of tests) {
407
+ for (const target of test.targets ?? []) {
408
+ addReference(test.id, target, rdf_vocabulary_1.PRIMMEL_VERIFIES, 'verifies');
409
+ }
410
+ for (const dep of test.dependencies ?? []) {
411
+ addReference(test.id, dep, DCTERMS_REQUIRES, 'depends-on');
412
+ }
413
+ }
414
+ // ── terminology (TermEntry + skosxl labels, per the share's
415
+ // terminology-model.shacl.ttl shape style) ──
416
+ for (const term of terms) {
417
+ claimLocal(term.id, `term-${rdfSlug(term.id)}`);
418
+ }
419
+ for (const term of terms) {
420
+ const local = localById.get(term.id);
421
+ const eIri = nodeIri(local);
422
+ const lang = langTag(term.language);
423
+ t(eIri, RDF_TYPE, iri(rdf_vocabulary_1.SMART_TERM_ENTRY));
424
+ t(eIri, DCTERMS_IDENTIFIER, lit(term.id));
425
+ t(eIri, DCTERMS_IS_PART_OF, iri(docIri));
426
+ t(eIri, SKOS_DEFINITION, lit(term.definition, lang));
427
+ if (term.scopeNote) {
428
+ t(eIri, SKOS_SCOPE_NOTE, lit(term.scopeNote, lang));
429
+ }
430
+ if (term.note) {
431
+ t(eIri, SKOS_NOTE, lit(term.note, lang));
432
+ }
433
+ if (term.section) {
434
+ t(eIri, rdf_vocabulary_1.SMART_HAS_SECTION_NUMBER, lit(term.section));
435
+ }
436
+ // Provenance: the Term.source string is a space-separated URN list
437
+ // in the platform's <doc#clause-X> convention; non-IRI tokens (rare
438
+ // free-text citations) survive as literals (sourceTerm's rule).
439
+ for (const token of (term.source ?? '').split(/\s+/).filter(x => x)) {
440
+ t(eIri, DCTERMS_SOURCE, sourceTerm(token));
441
+ }
442
+ if (term.vocabRef) {
443
+ t(eIri, rdf_vocabulary_1.PRIMMEL_VOCAB_REF, lit(`${term.vocabRef.register}#${term.vocabRef.clause}`));
444
+ }
445
+ if (term.vocabTerm) {
446
+ t(eIri, rdf_vocabulary_1.PRIMMEL_VOCAB_TERM, lit(term.vocabTerm, lang));
447
+ }
448
+ const labelNode = (localHint, form, value) => {
449
+ const lIri = nodeIri(claimDerived(`${local}-${localHint}`));
450
+ t(lIri, RDF_TYPE, iri(rdf_vocabulary_1.SMART_TERM));
451
+ t(lIri, RDF_TYPE, iri(SKOSXL_LABEL));
452
+ t(lIri, SKOSXL_LITERAL_FORM, lit(value, lang));
453
+ const formType = rdf_vocabulary_1.TERM_FORM_TYPE_BY_FORM[form];
454
+ if (formType) {
455
+ t(lIri, rdf_vocabulary_1.SMART_HAS_TERM_FORM_TYPE, iri(formType));
456
+ }
457
+ return lIri;
458
+ };
459
+ const prefIri = labelNode('label', term.formType ?? '', term.label || term.id);
460
+ if (term.partOfSpeech && rdf_vocabulary_1.PART_OF_SPEECH_TYPE_BY_POS[term.partOfSpeech]) {
461
+ t(prefIri, rdf_vocabulary_1.SMART_HAS_PART_OF_SPEECH_TYPE, iri(rdf_vocabulary_1.PART_OF_SPEECH_TYPE_BY_POS[term.partOfSpeech]));
462
+ }
463
+ t(eIri, SKOSXL_PREF_LABEL, iri(prefIri));
464
+ (term.alt ?? []).forEach((a, i) => {
465
+ const form = (term.abbreviations ?? []).includes(a) ? 'abbreviation' : '';
466
+ t(eIri, SKOSXL_ALT_LABEL, iri(labelNode(`alt-${i + 1}`, form, a)));
467
+ });
468
+ (term.deprecated ?? []).forEach((d, i) => {
469
+ t(eIri, rdf_vocabulary_1.SMART_DEPRECATED_LABEL, iri(labelNode(`deprecated-${i + 1}`, '', d)));
470
+ });
471
+ }
472
+ for (const term of terms) {
473
+ for (const other of term.seeAlso ?? []) {
474
+ addReference(term.id, other, DCTERMS_REFERENCES, 'see-also');
475
+ }
476
+ }
477
+ const stats = {
478
+ documents: 1,
479
+ requirementClasses: classes.length,
480
+ requirements: requirements.length,
481
+ conformanceTests: tests.length,
482
+ terms: terms.length,
483
+ supplements,
484
+ crossReferences,
485
+ triples: triples.length,
486
+ droppedReferences,
487
+ unknownObligations,
488
+ };
489
+ const prefixes = [
490
+ ['inst', instPrefix],
491
+ ...rdf_vocabulary_1.RDF_BASE_PREFIXES,
492
+ ];
493
+ const turtle = headerNote(packageId, packageTitle, baseUrn, stats) +
494
+ '\n' +
495
+ renderTurtle(prefixes, triples);
496
+ const jsonld = renderJsonLd(prefixes, triples);
497
+ return { turtle, jsonld, stats };
498
+ }
499
+ /**
500
+ * Loads the package at `dir` (single directory — the CLI's `check`
501
+ * default; `uses` composition needs a locator and stays a punt) and
502
+ * projects it into an RDF graph.
503
+ */
504
+ function exportPackageRdf(dir) {
505
+ const { standard } = (0, package_1.loadPackageWithIssues)(dir);
506
+ return exportStandardRdf(standard);
507
+ }
508
+ // ─────────────────────────────────────────────────────────────────────
509
+ // The header note — the one-way / survive-vs-lost doctrine, shipped IN
510
+ // the exported Turtle as its leading comment. (JSON-LD has no comment
511
+ // syntax; the note lives here and in the module header.)
512
+ // ─────────────────────────────────────────────────────────────────────
513
+ function headerNote(packageId, packageTitle, baseUrn, stats) {
514
+ // Turtle comments run to end-of-line, and PRL quoted strings CAN
515
+ // contain raw newlines — a title with "\n" would otherwise break out
516
+ // of the comment into a non-# line (malformed Turtle). Newlines in
517
+ // interpolated values become spaces.
518
+ const c = (s) => s.replace(/[\r\n]+/g, ' ');
519
+ const n = (count, singular, plural) => `${count} ${count === 1 ? singular : plural}`;
520
+ const lines = [
521
+ `RDF/OWL export of the Primmel package "${c(packageId)}" (${c(packageTitle)}).`,
522
+ `Generated by \`primmel export rdf\` (primmel-ts, TODO.roadmap/27).`,
523
+ ``,
524
+ `ONE-WAY PROJECTION. The Primmel package remains the single source of`,
525
+ `truth; this graph is a lossy projection for linked-data consumers.`,
526
+ `Re-imports are new-model suggestions, NEVER merges.`,
527
+ ``,
528
+ `Vocabulary: the IEC-ISO Core Ontology for (SMART) standards content`,
529
+ `(smartSDU information-model share, ontologies/core-ontology.ttl,`,
530
+ `version 2.0.0) and its taxonomies; instance IRIs under ${c(baseUrn)}.`,
531
+ ``,
532
+ `SURVIVES the projection:`,
533
+ ` - document + clause tree: the package as smart:PublicationDocument,`,
534
+ ` requirement classes as smart:Clause nested by /req/... id paths`,
535
+ ` - provisions: one node per requirement, typed by modality (shall ->`,
536
+ ` smart:Requirement, should -> smart:Recommendation, may ->`,
537
+ ` smart:Permission — the vocabulary's own modality form), and one`,
538
+ ` primmel:ConformanceTest per conformance test under a synthetic`,
539
+ ` "Conformance tests" clause; the modality token rides as`,
540
+ ` primmel:obligation data on every provision`,
541
+ ` - bindingness (normative) and provision type (governing) facets`,
542
+ ` - terms: smart:TermEntry + skosxl pref/alt/deprecated labels with`,
543
+ ` definitions, form/part-of-speech types when authored`,
544
+ ` - provenance: dcterms:source annotation IRIs (<doc#clause-X>)`,
545
+ ` - cross-references: dcterms:requires (dependencies),`,
546
+ ` primmel:verifies (conformance-test targets), dcterms:references`,
547
+ ` (bindings and term see-also naming exported ids)`,
548
+ ` - guidance as smart:ProvisionSupplement notes; the verification`,
549
+ ` method as inert primmel:verificationMethod data`,
550
+ ``,
551
+ `LOST in the projection (absent from this graph, by design):`,
552
+ ` - machine-checkable bindings (binds_to subject paths)`,
553
+ ` - OCL limit expressions and acceptance criteria`,
554
+ ` - quantities with units, typed parameters, applicability filters`,
555
+ ` - processes, forms, workflows, state machines, tables, formulas,`,
556
+ ` symbols (term symbol links)`,
557
+ ` - the publication layout: the share's oa:Annotation ->`,
558
+ ` dcat:Distribution content-fragment machinery is not projected —`,
559
+ ` statements and labels ride on the nodes (rdf:value, skosxl)`,
560
+ ` - conformance-test reference fragment detail (only doc+clause of a`,
561
+ ` test's reference survives)`,
562
+ ``,
563
+ `Extensions (prefix primmel:, urn:primmel:vocab:): primmel:ConformanceTest`,
564
+ `(the core vocabulary has no verification-provision class), primmel:verifies,`,
565
+ `primmel:obligation, primmel:verificationMethod, primmel:vocabRef,`,
566
+ `primmel:vocabTerm. smart:hasSectionNumber is reused undeclared-in-2.0.0,`,
567
+ `on the share's own precedent (its SHACL shapes + sample use it).`,
568
+ ``,
569
+ `Contents: ${n(stats.documents, 'document', 'documents')}, ${n(stats.requirementClasses, 'requirement class', 'requirement classes')}, ${n(stats.requirements, 'requirement', 'requirements')}, ${n(stats.conformanceTests, 'conformance test', 'conformance tests')}, ${n(stats.terms, 'term', 'terms')}, ${n(stats.supplements, 'supplement', 'supplements')}, ${n(stats.crossReferences, 'cross-reference', 'cross-references')}, ${n(stats.triples, 'triple', 'triples')}, ${n(stats.droppedReferences.length, 'dropped reference', 'dropped references')}${stats.unknownObligations > 0 ? `, ${n(stats.unknownObligations, 'unknown obligation (typed bare smart:Provision)', 'unknown obligations (typed bare smart:Provision)')}` : ''}.`,
570
+ ];
571
+ return lines.map(l => (l ? `# ${l}` : '#')).join('\n');
572
+ }
573
+ // ─────────────────────────────────────────────────────────────────────
574
+ // Turtle rendering (canonical; byte-deterministic).
575
+ // ─────────────────────────────────────────────────────────────────────
576
+ /** Control characters Turtle "..." literals cannot carry raw. */
577
+ // eslint-disable-next-line no-control-regex
578
+ const TURTLE_CONTROL_CHARS = /[\u0000-\u0008\u000e-\u001f\u007f]/g;
579
+ /** Escapes a string for a Turtle "..." literal. */
580
+ function turtleEscape(s) {
581
+ return s
582
+ .replace(/\\/g, '\\\\')
583
+ .replace(/"/g, '\\"')
584
+ .replace(/\n/g, '\\n')
585
+ .replace(/\r/g, '\\r')
586
+ .replace(/\t/g, '\\t')
587
+ .replace(/[\b\f]/g, c => (c === '\b' ? '\\b' : '\\f'))
588
+ .replace(TURTLE_CONTROL_CHARS, c => `\\u${c.charCodeAt(0).toString(16).padStart(4, '0')}`);
589
+ }
590
+ /** The prefixed-name form of an IRI against the prefix table, or null
591
+ * when no namespace matches or the local part is not a legal
592
+ * prefixed-name local (no accidental illegal prefixed names). */
593
+ function prefixedName(prefixes, iri_) {
594
+ for (const [prefix, ns] of prefixes) {
595
+ if (iri_.startsWith(ns)) {
596
+ const local = iri_.slice(ns.length);
597
+ if (/^[A-Za-z][A-Za-z0-9_-]*$/.test(local)) {
598
+ return `${prefix}:${local}`;
599
+ }
600
+ }
601
+ }
602
+ return null;
603
+ }
604
+ /** Turtle term form: prefixed name when possible, else <iri>. */
605
+ function compactIri(prefixes, iri_) {
606
+ return prefixedName(prefixes, iri_) ?? `<${iri_}>`;
607
+ }
608
+ /** JSON-LD @id form: prefixed name when possible, else the raw IRI. */
609
+ function compactIriJsonLd(prefixes, iri_) {
610
+ return prefixedName(prefixes, iri_) ?? iri_;
611
+ }
612
+ function renderObject(prefixes, o) {
613
+ if (o.kind === 'iri') {
614
+ return compactIri(prefixes, o.iri);
615
+ }
616
+ const base = `"${turtleEscape(o.value)}"`;
617
+ if (o.lang) {
618
+ return `${base}@${o.lang}`;
619
+ }
620
+ if (o.datatype) {
621
+ return `${base}^^${compactIri(prefixes, o.datatype)}`;
622
+ }
623
+ return base;
624
+ }
625
+ /** Renders the triple model as Turtle: subjects in insertion order,
626
+ * predicates in insertion order, `a` for rdf:type. */
627
+ function renderTurtle(prefixes, triples) {
628
+ const bySubject = new Map();
629
+ for (const tr of triples) {
630
+ let preds = bySubject.get(tr.subject);
631
+ if (!preds) {
632
+ preds = new Map();
633
+ bySubject.set(tr.subject, preds);
634
+ }
635
+ let objs = preds.get(tr.predicate);
636
+ if (!objs) {
637
+ objs = [];
638
+ preds.set(tr.predicate, objs);
639
+ }
640
+ objs.push(tr.object);
641
+ }
642
+ const blocks = [];
643
+ for (const [subject, preds] of bySubject) {
644
+ const lines = [];
645
+ for (const [predicate, objs] of preds) {
646
+ const p = predicate === RDF_TYPE ? 'a' : compactIri(prefixes, predicate);
647
+ const rendered = objs.map(o => renderObject(prefixes, o));
648
+ lines.push(`${p} ${rendered.join(',\n ')}`);
649
+ }
650
+ blocks.push(`${compactIri(prefixes, subject)} ${lines.join(' ;\n ')} .`);
651
+ }
652
+ const prefixLines = prefixes
653
+ .map(([p, ns]) => `@prefix ${p}: <${ns}> .`)
654
+ .join('\n');
655
+ return `${prefixLines}\n\n${blocks.join('\n\n')}\n`;
656
+ }
657
+ // ─────────────────────────────────────────────────────────────────────
658
+ // JSON-LD rendering (the same graph; @graph nodes in insertion order).
659
+ // ─────────────────────────────────────────────────────────────────────
660
+ function renderJsonLd(prefixes, triples) {
661
+ const context = {};
662
+ for (const [p, ns] of prefixes) {
663
+ context[p] = ns;
664
+ }
665
+ const bySubject = new Map();
666
+ for (const tr of triples) {
667
+ let preds = bySubject.get(tr.subject);
668
+ if (!preds) {
669
+ preds = new Map();
670
+ bySubject.set(tr.subject, preds);
671
+ }
672
+ let objs = preds.get(tr.predicate);
673
+ if (!objs) {
674
+ objs = [];
675
+ preds.set(tr.predicate, objs);
676
+ }
677
+ objs.push(tr.object);
678
+ }
679
+ const nodeObject = (subject, preds) => {
680
+ const node = {
681
+ '@id': compactIriJsonLd(prefixes, subject),
682
+ };
683
+ for (const [predicate, objs] of preds) {
684
+ if (predicate === RDF_TYPE) {
685
+ node['@type'] = objs.map(o => o.kind === 'iri' ? compactIriJsonLd(prefixes, o.iri) : '');
686
+ continue;
687
+ }
688
+ node[compactIriJsonLd(prefixes, predicate)] = objs.map(o => {
689
+ if (o.kind === 'iri') {
690
+ return { '@id': compactIriJsonLd(prefixes, o.iri) };
691
+ }
692
+ const v = { '@value': o.value };
693
+ if (o.lang) {
694
+ v['@language'] = o.lang;
695
+ }
696
+ else if (o.datatype) {
697
+ v['@type'] = compactIriJsonLd(prefixes, o.datatype);
698
+ }
699
+ return v;
700
+ });
701
+ }
702
+ return node;
703
+ };
704
+ const graph = [...bySubject].map(([s, preds]) => nodeObject(s, preds));
705
+ return `${JSON.stringify({ '@context': context, '@graph': graph }, null, 2)}\n`;
706
+ }
707
+ //# sourceMappingURL=rdf.js.map