@thomasfosterau/effect-rdf 0.0.0-stage → 0.1.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 (776) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2251 -2
  3. package/dist/Algebra-CGG4oae3.mjs +433 -0
  4. package/dist/Algebra-CGG4oae3.mjs.map +1 -0
  5. package/dist/Algebra-uGsIEOUA.d.mts +446 -0
  6. package/dist/Ast-CPRZmBvk.mjs +552 -0
  7. package/dist/Ast-CPRZmBvk.mjs.map +1 -0
  8. package/dist/Ast-vcw2W-lf.d.mts +827 -0
  9. package/dist/Bindings-Ck3m7JRC.mjs +249 -0
  10. package/dist/Bindings-Ck3m7JRC.mjs.map +1 -0
  11. package/dist/Bindings-DiKpBd7f.d.mts +153 -0
  12. package/dist/ClientErrors-CpXdFX5u.mjs +128 -0
  13. package/dist/ClientErrors-CpXdFX5u.mjs.map +1 -0
  14. package/dist/ClientErrors-D4IZHUM-.d.mts +101 -0
  15. package/dist/ClientFormats-CXomkXLV.mjs +73 -0
  16. package/dist/ClientFormats-CXomkXLV.mjs.map +1 -0
  17. package/dist/ClientFormats-Dm57ZPwR.d.mts +36 -0
  18. package/dist/Csv2Json-DynEcwCh.mjs +194 -0
  19. package/dist/Csv2Json-DynEcwCh.mjs.map +1 -0
  20. package/dist/Csv2Json-aXNVDoXQ.d.mts +40 -0
  21. package/dist/Csv2Rdf-8maXP6mt.d.mts +41 -0
  22. package/dist/Csv2Rdf-DuSEkaKE.mjs +161 -0
  23. package/dist/Csv2Rdf-DuSEkaKE.mjs.map +1 -0
  24. package/dist/Dataset-BlmlcI7J.mjs +782 -0
  25. package/dist/Dataset-BlmlcI7J.mjs.map +1 -0
  26. package/dist/Dataset-DS3ESOcO.d.mts +426 -0
  27. package/dist/Dataset.d.mts +2 -0
  28. package/dist/Dataset.mjs +1 -0
  29. package/dist/Datatype-CxMpamHC.d.mts +212 -0
  30. package/dist/Datatype-DQvkNkiH.mjs +1001 -0
  31. package/dist/Datatype-DQvkNkiH.mjs.map +1 -0
  32. package/dist/Dialect-8ChFj5EX.d.mts +113 -0
  33. package/dist/Dialect-CzVH38uo.mjs +165 -0
  34. package/dist/Dialect-CzVH38uo.mjs.map +1 -0
  35. package/dist/DocumentLoader-D3lZREnB.mjs +346 -0
  36. package/dist/DocumentLoader-D3lZREnB.mjs.map +1 -0
  37. package/dist/DocumentLoader-ZUCEVrW5.d.mts +178 -0
  38. package/dist/DublinCore-AnwqxRx6.mjs +137 -0
  39. package/dist/DublinCore-AnwqxRx6.mjs.map +1 -0
  40. package/dist/DublinCore-Dq-tVA5d.d.mts +119 -0
  41. package/dist/Engine-CYPB3g4h.d.mts +144 -0
  42. package/dist/Engine-DF8PN7g-.mjs +872 -0
  43. package/dist/Engine-DF8PN7g-.mjs.map +1 -0
  44. package/dist/Errors-CMdV1RhU.mjs +37 -0
  45. package/dist/Errors-CMdV1RhU.mjs.map +1 -0
  46. package/dist/Errors-u2bDjUeM.d.mts +30 -0
  47. package/dist/Evaluator-DEsU4d1o.d.mts +50 -0
  48. package/dist/Evaluator-DOY2-guC.mjs +281 -0
  49. package/dist/Evaluator-DOY2-guC.mjs.map +1 -0
  50. package/dist/Exif-CpqniYQd.d.mts +78 -0
  51. package/dist/Exif-DjkCfEB-.mjs +89 -0
  52. package/dist/Exif-DjkCfEB-.mjs.map +1 -0
  53. package/dist/Expression-BIMMvduQ.mjs +230 -0
  54. package/dist/Expression-BIMMvduQ.mjs.map +1 -0
  55. package/dist/Expression-W8A9cyX7.d.mts +89 -0
  56. package/dist/Extract-Bop85jES.mjs +220 -0
  57. package/dist/Extract-Bop85jES.mjs.map +1 -0
  58. package/dist/Extract-C_pCvuTC.d.mts +88 -0
  59. package/dist/Federation-BcNrozc1.d.mts +52 -0
  60. package/dist/Federation-CHScBkaK.mjs +130 -0
  61. package/dist/Federation-CHScBkaK.mjs.map +1 -0
  62. package/dist/Functions-AvjNcId_.mjs +1346 -0
  63. package/dist/Functions-AvjNcId_.mjs.map +1 -0
  64. package/dist/Functions-OQJZP-F6.d.mts +111 -0
  65. package/dist/Generator-C52mmq01.d.mts +50 -0
  66. package/dist/Generator-D3utCJC7.mjs +205 -0
  67. package/dist/Generator-D3utCJC7.mjs.map +1 -0
  68. package/dist/Grammar-CPlSxGH6.mjs +200 -0
  69. package/dist/Grammar-CPlSxGH6.mjs.map +1 -0
  70. package/dist/Grammar-CRhnRoCu.d.mts +148 -0
  71. package/dist/Grammar-D6jZdJQ3.d.mts +169 -0
  72. package/dist/Grammar-mQ8CgE1M.mjs +258 -0
  73. package/dist/Grammar-mQ8CgE1M.mjs.map +1 -0
  74. package/dist/GraphStore-DhUa4nFO.d.mts +45 -0
  75. package/dist/GraphStore-DvbqwKy1.mjs +212 -0
  76. package/dist/GraphStore-DvbqwKy1.mjs.map +1 -0
  77. package/dist/Iri-BB8Ks-BF.d.mts +84 -0
  78. package/dist/Iri-Cr92gsQV.mjs +232 -0
  79. package/dist/Iri-Cr92gsQV.mjs.map +1 -0
  80. package/dist/Iri.d.mts +2 -0
  81. package/dist/Iri.mjs +1 -0
  82. package/dist/Isomorphism-B6qTY-xy.d.mts +28 -0
  83. package/dist/Isomorphism-BmqxhKyJ.mjs +232 -0
  84. package/dist/Isomorphism-BmqxhKyJ.mjs.map +1 -0
  85. package/dist/Isomorphism-DInKnWIy.mjs +390 -0
  86. package/dist/Isomorphism-DInKnWIy.mjs.map +1 -0
  87. package/dist/Isomorphism-DvSfZXLR.d.mts +37 -0
  88. package/dist/Isomorphism.d.mts +2 -0
  89. package/dist/Isomorphism.mjs +1 -0
  90. package/dist/JsonLd-DOwS2FHg.mjs +2836 -0
  91. package/dist/JsonLd-DOwS2FHg.mjs.map +1 -0
  92. package/dist/JsonLd-DobFrQNa.d.mts +242 -0
  93. package/dist/JsonLdError-C9J-BxfG.mjs +106 -0
  94. package/dist/JsonLdError-C9J-BxfG.mjs.map +1 -0
  95. package/dist/JsonLdError-DSOfHkOy.d.mts +43 -0
  96. package/dist/LanguageTag-BCu8rcmX.d.mts +38 -0
  97. package/dist/LanguageTag-BcOpMGZ4.mjs +89 -0
  98. package/dist/LanguageTag-BcOpMGZ4.mjs.map +1 -0
  99. package/dist/LanguageTag.d.mts +2 -0
  100. package/dist/LanguageTag.mjs +1 -0
  101. package/dist/Lexical-Cg0JHrf6.mjs +243 -0
  102. package/dist/Lexical-Cg0JHrf6.mjs.map +1 -0
  103. package/dist/Lexical-D3zySYVS.d.mts +163 -0
  104. package/dist/Manifest-B6xf6mUc.mjs +148 -0
  105. package/dist/Manifest-B6xf6mUc.mjs.map +1 -0
  106. package/dist/Manifest-DQUMRBFr.d.mts +98 -0
  107. package/dist/Mapping-BgG74x3U.d.mts +63 -0
  108. package/dist/Mapping-Dc1ZGirk.mjs +259 -0
  109. package/dist/Mapping-Dc1ZGirk.mjs.map +1 -0
  110. package/dist/Mcp-1DwTTKOK.mjs +48 -0
  111. package/dist/Mcp-1DwTTKOK.mjs.map +1 -0
  112. package/dist/Mcp-d-pX9erx.d.mts +25 -0
  113. package/dist/Message-CK_DGQuu.mjs +95 -0
  114. package/dist/Message-CK_DGQuu.mjs.map +1 -0
  115. package/dist/Message-fIvTJSXM.d.mts +49 -0
  116. package/dist/Metadata-BbffwGDZ.mjs +445 -0
  117. package/dist/Metadata-BbffwGDZ.mjs.map +1 -0
  118. package/dist/Metadata-CEt3yc1-.d.mts +901 -0
  119. package/dist/Metadata-D4HsQNXr.mjs +1273 -0
  120. package/dist/Metadata-D4HsQNXr.mjs.map +1 -0
  121. package/dist/Metadata-nzS7QKRj.d.mts +350 -0
  122. package/dist/Model-DaMmxurZ.d.mts +293 -0
  123. package/dist/Model-DlPzRYhF.mjs +528 -0
  124. package/dist/Model-DlPzRYhF.mjs.map +1 -0
  125. package/dist/N3-BzyV-KIH.mjs +974 -0
  126. package/dist/N3-BzyV-KIH.mjs.map +1 -0
  127. package/dist/N3-DSLnonDn.d.mts +100 -0
  128. package/dist/NQuads-C1VBOJ3-.mjs +117 -0
  129. package/dist/NQuads-C1VBOJ3-.mjs.map +1 -0
  130. package/dist/NQuads-FjFZikFg.d.mts +76 -0
  131. package/dist/NTriples-D-kLSEAf.mjs +120 -0
  132. package/dist/NTriples-D-kLSEAf.mjs.map +1 -0
  133. package/dist/NTriples-D34OspfW.d.mts +76 -0
  134. package/dist/Namespace-ClTUO_ya.d.mts +42 -0
  135. package/dist/Namespace-DHFIsORd.mjs +75 -0
  136. package/dist/Namespace-DHFIsORd.mjs.map +1 -0
  137. package/dist/Namespace.d.mts +2 -0
  138. package/dist/Namespace.mjs +1 -0
  139. package/dist/Namespaces-Bz85vpjW.mjs +235 -0
  140. package/dist/Namespaces-Bz85vpjW.mjs.map +1 -0
  141. package/dist/Namespaces-C1jW6EDo.d.mts +178 -0
  142. package/dist/Optimizer-BWWQRQPY.mjs +168 -0
  143. package/dist/Optimizer-BWWQRQPY.mjs.map +1 -0
  144. package/dist/Optimizer-DUpUow6k.d.mts +26 -0
  145. package/dist/Options-BLBGL4HE.mjs +72 -0
  146. package/dist/Options-BLBGL4HE.mjs.map +1 -0
  147. package/dist/Options-BommQwP9.d.mts +127 -0
  148. package/dist/Packet-CA76wVX3.mjs +197 -0
  149. package/dist/Packet-CA76wVX3.mjs.map +1 -0
  150. package/dist/Packet-Cy5g6XuW.d.mts +130 -0
  151. package/dist/Parser-p1Gyr0QN.d.mts +85 -0
  152. package/dist/Parser-xARsOWXk.mjs +1317 -0
  153. package/dist/Parser-xARsOWXk.mjs.map +1 -0
  154. package/dist/Path-B20Yp8KE.mjs +284 -0
  155. package/dist/Path-B20Yp8KE.mjs.map +1 -0
  156. package/dist/Path-DRB8e-Zn.d.mts +181 -0
  157. package/dist/Pdf-B9RZn--8.d.mts +77 -0
  158. package/dist/Pdf-CKK6dkZn.mjs +89 -0
  159. package/dist/Pdf-CKK6dkZn.mjs.map +1 -0
  160. package/dist/PdfA-CUjSuntT.d.mts +109 -0
  161. package/dist/PdfA-CleOhuL6.mjs +124 -0
  162. package/dist/PdfA-CleOhuL6.mjs.map +1 -0
  163. package/dist/Photoshop-CiHo80qV.mjs +233 -0
  164. package/dist/Photoshop-CiHo80qV.mjs.map +1 -0
  165. package/dist/Photoshop-udKZ0I3N.d.mts +204 -0
  166. package/dist/PrefixMap-BHFPDLO-.mjs +103 -0
  167. package/dist/PrefixMap-BHFPDLO-.mjs.map +1 -0
  168. package/dist/PrefixMap-BMlXrWNd.d.mts +64 -0
  169. package/dist/PrefixMap.d.mts +2 -0
  170. package/dist/PrefixMap.mjs +1 -0
  171. package/dist/Processor-CMmecFsb.mjs +198 -0
  172. package/dist/Processor-CMmecFsb.mjs.map +1 -0
  173. package/dist/Processor-FJPvO0CB.d.mts +435 -0
  174. package/dist/Protocol-BA7OkNgp.mjs +202 -0
  175. package/dist/Protocol-BA7OkNgp.mjs.map +1 -0
  176. package/dist/Protocol-DlSoiIKB.d.mts +108 -0
  177. package/dist/ProtocolErrors-Ckfejnl6.d.mts +84 -0
  178. package/dist/ProtocolErrors-czDPVcX5.mjs +129 -0
  179. package/dist/ProtocolErrors-czDPVcX5.mjs.map +1 -0
  180. package/dist/Query-D9A6LOpP.mjs +364 -0
  181. package/dist/Query-D9A6LOpP.mjs.map +1 -0
  182. package/dist/Query-KqSkTYyG.d.mts +96 -0
  183. package/dist/QueryBuilder-BLK9Vfbz.mjs +674 -0
  184. package/dist/QueryBuilder-BLK9Vfbz.mjs.map +1 -0
  185. package/dist/QueryBuilder-DUqh4ECe.d.mts +529 -0
  186. package/dist/RdfJs-D6-49XB5.mjs +86 -0
  187. package/dist/RdfJs-D6-49XB5.mjs.map +1 -0
  188. package/dist/RdfJs-DXFqdWrd.d.mts +76 -0
  189. package/dist/RdfJs.d.mts +2 -0
  190. package/dist/RdfJs.mjs +1 -0
  191. package/dist/RdfJson-5aKPDlPS.d.mts +297 -0
  192. package/dist/RdfJson-BNocgW4f.mjs +548 -0
  193. package/dist/RdfJson-BNocgW4f.mjs.map +1 -0
  194. package/dist/RdfXml-DJ9G4gOq.mjs +1014 -0
  195. package/dist/RdfXml-DJ9G4gOq.mjs.map +1 -0
  196. package/dist/RdfXml-_N7yxWEp.d.mts +149 -0
  197. package/dist/Rdfs-BRVPsAjc.d.mts +84 -0
  198. package/dist/Rdfs-CyY2wVHI.mjs +167 -0
  199. package/dist/Rdfs-CyY2wVHI.mjs.map +1 -0
  200. package/dist/Rdfs.d.mts +2 -0
  201. package/dist/Rdfs.mjs +1 -0
  202. package/dist/Reasoner-BxYhx9s7.d.mts +94 -0
  203. package/dist/Reasoner-Cw90zrjv.mjs +798 -0
  204. package/dist/Reasoner-Cw90zrjv.mjs.map +1 -0
  205. package/dist/Reification-BmN4EfnM.d.mts +40 -0
  206. package/dist/Reification-dpqQvjDE.mjs +82 -0
  207. package/dist/Reification-dpqQvjDE.mjs.map +1 -0
  208. package/dist/Reification.d.mts +2 -0
  209. package/dist/Reification.mjs +1 -0
  210. package/dist/Report-XHs8htzK.mjs +121 -0
  211. package/dist/Report-XHs8htzK.mjs.map +1 -0
  212. package/dist/Report-hcXsc_19.d.mts +115 -0
  213. package/dist/Resource-B1cI8FyJ.d.mts +218 -0
  214. package/dist/Resource-sIEeNh15.mjs +374 -0
  215. package/dist/Resource-sIEeNh15.mjs.map +1 -0
  216. package/dist/Resource.d.mts +2 -0
  217. package/dist/Resource.mjs +1 -0
  218. package/dist/Results-BVNEC-Wt.d.mts +277 -0
  219. package/dist/Results-peJjGA2V.mjs +621 -0
  220. package/dist/Results-peJjGA2V.mjs.map +1 -0
  221. package/dist/ResultsStream-BhF0OcNn.mjs +639 -0
  222. package/dist/ResultsStream-BhF0OcNn.mjs.map +1 -0
  223. package/dist/ResultsStream-toYMXrOe.d.mts +100 -0
  224. package/dist/SemAct-CDchtk49.d.mts +96 -0
  225. package/dist/SemAct-CmyT4yI8.mjs +118 -0
  226. package/dist/SemAct-CmyT4yI8.mjs.map +1 -0
  227. package/dist/Serialization-DP9H5bYQ.mjs +514 -0
  228. package/dist/Serialization-DP9H5bYQ.mjs.map +1 -0
  229. package/dist/Serialization-Df8iVauT.d.mts +392 -0
  230. package/dist/Serialization.d.mts +2 -0
  231. package/dist/Serialization.mjs +1 -0
  232. package/dist/ServerFormats-CrRnjjf6.mjs +64 -0
  233. package/dist/ServerFormats-CrRnjjf6.mjs.map +1 -0
  234. package/dist/ServerFormats-DjC9NsO_.d.mts +36 -0
  235. package/dist/ServiceDescription-BERsvg-k.d.mts +54 -0
  236. package/dist/ServiceDescription-Dq5hxeGy.mjs +97 -0
  237. package/dist/ServiceDescription-Dq5hxeGy.mjs.map +1 -0
  238. package/dist/ShExC-Ctf-06CL.d.mts +67 -0
  239. package/dist/ShExC-DJbB19i3.mjs +1181 -0
  240. package/dist/ShExC-DJbB19i3.mjs.map +1 -0
  241. package/dist/ShExError-BeYFD9rv.d.mts +61 -0
  242. package/dist/ShExError-CVtq2NnM.mjs +64 -0
  243. package/dist/ShExError-CVtq2NnM.mjs.map +1 -0
  244. package/dist/ShExJ-C1u_wgyD.d.mts +531 -0
  245. package/dist/ShExJ-COiPd9Xw.mjs +532 -0
  246. package/dist/ShExJ-COiPd9Xw.mjs.map +1 -0
  247. package/dist/ShExR-ByR4mCh-.mjs +480 -0
  248. package/dist/ShExR-ByR4mCh-.mjs.map +1 -0
  249. package/dist/ShExR-CqONNNBz.d.mts +40 -0
  250. package/dist/ShapeMap-C422pxKl.d.mts +140 -0
  251. package/dist/ShapeMap-CsgKxB2G.mjs +181 -0
  252. package/dist/ShapeMap-CsgKxB2G.mjs.map +1 -0
  253. package/dist/Shapes-18GjfyBV.mjs +597 -0
  254. package/dist/Shapes-18GjfyBV.mjs.map +1 -0
  255. package/dist/Shapes-BQFDFc4Q.d.mts +306 -0
  256. package/dist/Sparql-BiYFMSpl.mjs +29 -0
  257. package/dist/Sparql-BiYFMSpl.mjs.map +1 -0
  258. package/dist/Sparql-DecpWTPh.d.mts +97 -0
  259. package/dist/SparqlClient-C_CjXbwj.mjs +333 -0
  260. package/dist/SparqlClient-C_CjXbwj.mjs.map +1 -0
  261. package/dist/SparqlClient-UPc88SHy.d.mts +290 -0
  262. package/dist/SparqlServer-CbUW-pVj.d.mts +71 -0
  263. package/dist/SparqlServer-Db7w7Cll.mjs +308 -0
  264. package/dist/SparqlServer-Db7w7Cll.mjs.map +1 -0
  265. package/dist/SqlStore-BBqFx-Wl.mjs +684 -0
  266. package/dist/SqlStore-BBqFx-Wl.mjs.map +1 -0
  267. package/dist/SqlStore-CCJo5I-e.d.mts +117 -0
  268. package/dist/Store-D0jmVfb3.d.mts +166 -0
  269. package/dist/Store-DH3Ow1GO.mjs +162 -0
  270. package/dist/Store-DH3Ow1GO.mjs.map +1 -0
  271. package/dist/Structure-BjMo4Bkc.mjs +334 -0
  272. package/dist/Structure-BjMo4Bkc.mjs.map +1 -0
  273. package/dist/Structure-n4CmDiab.d.mts +63 -0
  274. package/dist/Table-BGgm9nbM.mjs +538 -0
  275. package/dist/Table-BGgm9nbM.mjs.map +1 -0
  276. package/dist/Table-C3reiVrb.d.mts +261 -0
  277. package/dist/Term-B_4ezyXq.d.mts +619 -0
  278. package/dist/Term-CFLG1qu4.mjs +991 -0
  279. package/dist/Term-CFLG1qu4.mjs.map +1 -0
  280. package/dist/Term.d.mts +2 -0
  281. package/dist/Term.mjs +1 -0
  282. package/dist/TermCodec-CDZiEztW.mjs +397 -0
  283. package/dist/TermCodec-CDZiEztW.mjs.map +1 -0
  284. package/dist/TermCodec-_03bDXr0.d.mts +209 -0
  285. package/dist/TermCodec.d.mts +2 -0
  286. package/dist/TermCodec.mjs +1 -0
  287. package/dist/TermJson-BOPe0yve.d.mts +232 -0
  288. package/dist/TermJson-FAg3lvjl.mjs +142 -0
  289. package/dist/TermJson-FAg3lvjl.mjs.map +1 -0
  290. package/dist/TermJson.d.mts +2 -0
  291. package/dist/TermJson.mjs +1 -0
  292. package/dist/TermSchema-Bn9CoaYA.mjs +30 -0
  293. package/dist/TermSchema-Bn9CoaYA.mjs.map +1 -0
  294. package/dist/TermSchema-DBO6MroX.d.mts +6 -0
  295. package/dist/Testing-B-aPCpmu.mjs +63 -0
  296. package/dist/Testing-B-aPCpmu.mjs.map +1 -0
  297. package/dist/Testing-CF6s8P3O.d.mts +53 -0
  298. package/dist/Tiff-CR-2QeSI.d.mts +148 -0
  299. package/dist/Tiff-DlsOlZPM.mjs +169 -0
  300. package/dist/Tiff-DlsOlZPM.mjs.map +1 -0
  301. package/dist/Tools-7MdRKccr.d.mts +583 -0
  302. package/dist/Tools-ryxphZbI.mjs +329 -0
  303. package/dist/Tools-ryxphZbI.mjs.map +1 -0
  304. package/dist/Translate-B0YKKANS.d.mts +37 -0
  305. package/dist/Translate-gzWPq0Ia.mjs +308 -0
  306. package/dist/Translate-gzWPq0Ia.mjs.map +1 -0
  307. package/dist/Translation-DC9rLm2y.mjs +1535 -0
  308. package/dist/Translation-DC9rLm2y.mjs.map +1 -0
  309. package/dist/Translation-K4L9XBqX.d.mts +103 -0
  310. package/dist/TriG-BkqtqZ6Y.mjs +125 -0
  311. package/dist/TriG-BkqtqZ6Y.mjs.map +1 -0
  312. package/dist/TriG-xDjdDatp.d.mts +86 -0
  313. package/dist/Turtle-Bv1_bisW.d.mts +85 -0
  314. package/dist/Turtle-CZVUOtwl.mjs +133 -0
  315. package/dist/Turtle-CZVUOtwl.mjs.map +1 -0
  316. package/dist/ValidationReport-DBdJshW5.mjs +285 -0
  317. package/dist/ValidationReport-DBdJshW5.mjs.map +1 -0
  318. package/dist/ValidationReport-Dx3WxY0h.d.mts +192 -0
  319. package/dist/Validator-227ff9Rn.d.mts +179 -0
  320. package/dist/Validator-BzXMKDeJ.mjs +1162 -0
  321. package/dist/Validator-BzXMKDeJ.mjs.map +1 -0
  322. package/dist/Validator-Dl8cih5V.d.mts +207 -0
  323. package/dist/Validator-DmUfMbpL.mjs +568 -0
  324. package/dist/Validator-DmUfMbpL.mjs.map +1 -0
  325. package/dist/Vocab-DceKywpq.mjs +168 -0
  326. package/dist/Vocab-DceKywpq.mjs.map +1 -0
  327. package/dist/Vocab-Df-L-IwZ.d.mts +46 -0
  328. package/dist/Vocab-Do56UgBX.d.mts +81 -0
  329. package/dist/Vocab-TfpWG1Ne.mjs +118 -0
  330. package/dist/Vocab-TfpWG1Ne.mjs.map +1 -0
  331. package/dist/Vocab.d.mts +2 -0
  332. package/dist/Vocab.mjs +1 -0
  333. package/dist/Vocabulary-C6-GPOy4.d.mts +22 -0
  334. package/dist/Vocabulary-CnQl-_Z4.mjs +179 -0
  335. package/dist/Vocabulary-CnQl-_Z4.mjs.map +1 -0
  336. package/dist/Xml-B7iihYCS.mjs +976 -0
  337. package/dist/Xml-B7iihYCS.mjs.map +1 -0
  338. package/dist/Xml-CmfHS7SW.d.mts +267 -0
  339. package/dist/Xmp-D7CKA7MZ.d.mts +111 -0
  340. package/dist/Xmp-DCGN9pOD.mjs +307 -0
  341. package/dist/Xmp-DCGN9pOD.mjs.map +1 -0
  342. package/dist/XmpBasic-CP38jpR_.mjs +73 -0
  343. package/dist/XmpBasic-CP38jpR_.mjs.map +1 -0
  344. package/dist/XmpBasic-Cmbe53rQ.d.mts +64 -0
  345. package/dist/XmpMM-BfL_TgJF.mjs +73 -0
  346. package/dist/XmpMM-BfL_TgJF.mjs.map +1 -0
  347. package/dist/XmpMM-Dqm3IX8p.d.mts +63 -0
  348. package/dist/XmpRights-BKPtoI5L.mjs +73 -0
  349. package/dist/XmpRights-BKPtoI5L.mjs.map +1 -0
  350. package/dist/XmpRights-CaALZQz2.d.mts +63 -0
  351. package/dist/Xsd-Cdgx5zRB.mjs +405 -0
  352. package/dist/Xsd-Cdgx5zRB.mjs.map +1 -0
  353. package/dist/Xsd-D2elNhSm.d.mts +187 -0
  354. package/dist/Xsd.d.mts +2 -0
  355. package/dist/Xsd.mjs +1 -0
  356. package/dist/accessors-CEjaojuQ.mjs +28 -0
  357. package/dist/accessors-CEjaojuQ.mjs.map +1 -0
  358. package/dist/codec-Lb2T96rv.d.mts +20 -0
  359. package/dist/codec-QNo7IdJF.mjs +389 -0
  360. package/dist/codec-QNo7IdJF.mjs.map +1 -0
  361. package/dist/csvw/Csv2Json.d.mts +2 -0
  362. package/dist/csvw/Csv2Json.mjs +1 -0
  363. package/dist/csvw/Csv2Rdf.d.mts +2 -0
  364. package/dist/csvw/Csv2Rdf.mjs +1 -0
  365. package/dist/csvw/Datatype.d.mts +2 -0
  366. package/dist/csvw/Datatype.mjs +1 -0
  367. package/dist/csvw/Metadata.d.mts +2 -0
  368. package/dist/csvw/Metadata.mjs +1 -0
  369. package/dist/csvw/Processor.d.mts +2 -0
  370. package/dist/csvw/Processor.mjs +1 -0
  371. package/dist/csvw/Report.d.mts +2 -0
  372. package/dist/csvw/Report.mjs +1 -0
  373. package/dist/csvw/Table.d.mts +2 -0
  374. package/dist/csvw/Table.mjs +1 -0
  375. package/dist/csvw/index.d.mts +8 -0
  376. package/dist/csvw/index.mjs +8 -0
  377. package/dist/index-Cms2TYfC.d.mts +16 -0
  378. package/dist/index-Ct8xFmRs.d.mts +7 -0
  379. package/dist/index-D4QFwOjm.d.mts +28 -0
  380. package/dist/index.d.mts +18 -0
  381. package/dist/index.mjs +17 -0
  382. package/dist/jsonld/DocumentLoader.d.mts +2 -0
  383. package/dist/jsonld/DocumentLoader.mjs +1 -0
  384. package/dist/jsonld/JsonLd.d.mts +2 -0
  385. package/dist/jsonld/JsonLd.mjs +1 -0
  386. package/dist/jsonld/JsonLdError.d.mts +2 -0
  387. package/dist/jsonld/JsonLdError.mjs +1 -0
  388. package/dist/jsonld/index.d.mts +4 -0
  389. package/dist/jsonld/index.mjs +4 -0
  390. package/dist/lists-D-OpQ0Ir.mjs +77 -0
  391. package/dist/lists-D-OpQ0Ir.mjs.map +1 -0
  392. package/dist/loop-D5-gNx9K.mjs +21 -0
  393. package/dist/loop-D5-gNx9K.mjs.map +1 -0
  394. package/dist/loop-DZ2hXlr_.mjs +21 -0
  395. package/dist/loop-DZ2hXlr_.mjs.map +1 -0
  396. package/dist/n3/Isomorphism.d.mts +2 -0
  397. package/dist/n3/Isomorphism.mjs +1 -0
  398. package/dist/n3/Mapping.d.mts +2 -0
  399. package/dist/n3/Mapping.mjs +1 -0
  400. package/dist/n3/Model.d.mts +2 -0
  401. package/dist/n3/Model.mjs +1 -0
  402. package/dist/n3/N3.d.mts +2 -0
  403. package/dist/n3/N3.mjs +1 -0
  404. package/dist/n3/Reasoner.d.mts +2 -0
  405. package/dist/n3/Reasoner.mjs +2 -0
  406. package/dist/n3/Vocab.d.mts +2 -0
  407. package/dist/n3/Vocab.mjs +1 -0
  408. package/dist/n3/index.d.mts +7 -0
  409. package/dist/n3/index.mjs +7 -0
  410. package/dist/ntriples/Grammar.d.mts +2 -0
  411. package/dist/ntriples/Grammar.mjs +1 -0
  412. package/dist/ntriples/Lexical.d.mts +2 -0
  413. package/dist/ntriples/Lexical.mjs +1 -0
  414. package/dist/ntriples/NQuads.d.mts +2 -0
  415. package/dist/ntriples/NQuads.mjs +1 -0
  416. package/dist/ntriples/NTriples.d.mts +2 -0
  417. package/dist/ntriples/NTriples.mjs +1 -0
  418. package/dist/ntriples/index.d.mts +5 -0
  419. package/dist/ntriples/index.mjs +5 -0
  420. package/dist/rdfjson/RdfJson.d.mts +2 -0
  421. package/dist/rdfjson/RdfJson.mjs +1 -0
  422. package/dist/rdfjson/index.d.mts +2 -0
  423. package/dist/rdfjson/index.mjs +1 -0
  424. package/dist/rdfxml/RdfXml.d.mts +2 -0
  425. package/dist/rdfxml/RdfXml.mjs +1 -0
  426. package/dist/rdfxml/Xml.d.mts +2 -0
  427. package/dist/rdfxml/Xml.mjs +1 -0
  428. package/dist/rdfxml/index.d.mts +3 -0
  429. package/dist/rdfxml/index.mjs +3 -0
  430. package/dist/rolldown-runtime-D8jQpDG7.mjs +12 -0
  431. package/dist/serialize-96KBvKaf.mjs +1463 -0
  432. package/dist/serialize-96KBvKaf.mjs.map +1 -0
  433. package/dist/serialize-DsoXdM6n.d.mts +37 -0
  434. package/dist/shacl/Message.d.mts +2 -0
  435. package/dist/shacl/Message.mjs +1 -0
  436. package/dist/shacl/Path.d.mts +2 -0
  437. package/dist/shacl/Path.mjs +1 -0
  438. package/dist/shacl/Shapes.d.mts +2 -0
  439. package/dist/shacl/Shapes.mjs +1 -0
  440. package/dist/shacl/Sparql.d.mts +2 -0
  441. package/dist/shacl/Sparql.mjs +1 -0
  442. package/dist/shacl/ValidationReport.d.mts +2 -0
  443. package/dist/shacl/ValidationReport.mjs +1 -0
  444. package/dist/shacl/Validator.d.mts +2 -0
  445. package/dist/shacl/Validator.mjs +1 -0
  446. package/dist/shacl/Vocabulary.d.mts +2 -0
  447. package/dist/shacl/Vocabulary.mjs +1 -0
  448. package/dist/shacl/index.d.mts +9 -0
  449. package/dist/shacl/index.mjs +8 -0
  450. package/dist/shex/SemAct.d.mts +2 -0
  451. package/dist/shex/SemAct.mjs +1 -0
  452. package/dist/shex/ShExC.d.mts +2 -0
  453. package/dist/shex/ShExC.mjs +1 -0
  454. package/dist/shex/ShExError.d.mts +2 -0
  455. package/dist/shex/ShExError.mjs +1 -0
  456. package/dist/shex/ShExJ.d.mts +2 -0
  457. package/dist/shex/ShExJ.mjs +2 -0
  458. package/dist/shex/ShExR.d.mts +2 -0
  459. package/dist/shex/ShExR.mjs +1 -0
  460. package/dist/shex/ShapeMap.d.mts +2 -0
  461. package/dist/shex/ShapeMap.mjs +1 -0
  462. package/dist/shex/Structure.d.mts +2 -0
  463. package/dist/shex/Structure.mjs +2 -0
  464. package/dist/shex/Validator.d.mts +2 -0
  465. package/dist/shex/Validator.mjs +4 -0
  466. package/dist/shex/index.d.mts +9 -0
  467. package/dist/shex/index.mjs +9 -0
  468. package/dist/sparql/Algebra.d.mts +2 -0
  469. package/dist/sparql/Algebra.mjs +1 -0
  470. package/dist/sparql/Ast.d.mts +2 -0
  471. package/dist/sparql/Ast.mjs +1 -0
  472. package/dist/sparql/Bindings.d.mts +2 -0
  473. package/dist/sparql/Bindings.mjs +1 -0
  474. package/dist/sparql/ClientErrors.d.mts +2 -0
  475. package/dist/sparql/ClientErrors.mjs +1 -0
  476. package/dist/sparql/ClientFormats.d.mts +2 -0
  477. package/dist/sparql/ClientFormats.mjs +1 -0
  478. package/dist/sparql/Engine.d.mts +2 -0
  479. package/dist/sparql/Engine.mjs +1 -0
  480. package/dist/sparql/Errors.d.mts +2 -0
  481. package/dist/sparql/Errors.mjs +1 -0
  482. package/dist/sparql/Expression.d.mts +2 -0
  483. package/dist/sparql/Expression.mjs +1 -0
  484. package/dist/sparql/Federation.d.mts +2 -0
  485. package/dist/sparql/Federation.mjs +1 -0
  486. package/dist/sparql/Functions.d.mts +2 -0
  487. package/dist/sparql/Functions.mjs +1 -0
  488. package/dist/sparql/Generator.d.mts +2 -0
  489. package/dist/sparql/Generator.mjs +1 -0
  490. package/dist/sparql/GraphStore.d.mts +2 -0
  491. package/dist/sparql/GraphStore.mjs +1 -0
  492. package/dist/sparql/Optimizer.d.mts +2 -0
  493. package/dist/sparql/Optimizer.mjs +1 -0
  494. package/dist/sparql/Options.d.mts +2 -0
  495. package/dist/sparql/Options.mjs +1 -0
  496. package/dist/sparql/Parser.d.mts +2 -0
  497. package/dist/sparql/Parser.mjs +1 -0
  498. package/dist/sparql/Protocol.d.mts +2 -0
  499. package/dist/sparql/Protocol.mjs +1 -0
  500. package/dist/sparql/ProtocolErrors.d.mts +2 -0
  501. package/dist/sparql/ProtocolErrors.mjs +1 -0
  502. package/dist/sparql/QueryBuilder.d.mts +2 -0
  503. package/dist/sparql/QueryBuilder.mjs +1 -0
  504. package/dist/sparql/Results.d.mts +2 -0
  505. package/dist/sparql/Results.mjs +1 -0
  506. package/dist/sparql/ResultsStream.d.mts +2 -0
  507. package/dist/sparql/ResultsStream.mjs +1 -0
  508. package/dist/sparql/ServerFormats.d.mts +2 -0
  509. package/dist/sparql/ServerFormats.mjs +1 -0
  510. package/dist/sparql/ServiceDescription.d.mts +2 -0
  511. package/dist/sparql/ServiceDescription.mjs +1 -0
  512. package/dist/sparql/SparqlClient.d.mts +2 -0
  513. package/dist/sparql/SparqlClient.mjs +1 -0
  514. package/dist/sparql/SparqlServer.d.mts +2 -0
  515. package/dist/sparql/SparqlServer.mjs +1 -0
  516. package/dist/sparql/Store.d.mts +2 -0
  517. package/dist/sparql/Store.mjs +1 -0
  518. package/dist/sparql/TermSchema.d.mts +3 -0
  519. package/dist/sparql/TermSchema.mjs +2 -0
  520. package/dist/sparql/Testing.d.mts +2 -0
  521. package/dist/sparql/Testing.mjs +1 -0
  522. package/dist/sparql/Translate.d.mts +2 -0
  523. package/dist/sparql/Translate.mjs +1 -0
  524. package/dist/sparql/ai/Mcp.d.mts +2 -0
  525. package/dist/sparql/ai/Mcp.mjs +1 -0
  526. package/dist/sparql/ai/Tools.d.mts +2 -0
  527. package/dist/sparql/ai/Tools.mjs +1 -0
  528. package/dist/sparql/ai/index.d.mts +3 -0
  529. package/dist/sparql/ai/index.mjs +3 -0
  530. package/dist/sparql/index.d.mts +30 -0
  531. package/dist/sparql/index.mjs +29 -0
  532. package/dist/sparql/shacl/Evaluator.d.mts +2 -0
  533. package/dist/sparql/shacl/Evaluator.mjs +1 -0
  534. package/dist/sparql/shacl/Query.d.mts +2 -0
  535. package/dist/sparql/shacl/Query.mjs +1 -0
  536. package/dist/sparql/shacl/index.d.mts +3 -0
  537. package/dist/sparql/shacl/index.mjs +3 -0
  538. package/dist/sparql/sql/Dialect.d.mts +2 -0
  539. package/dist/sparql/sql/Dialect.mjs +1 -0
  540. package/dist/sparql/sql/SqlStore.d.mts +2 -0
  541. package/dist/sparql/sql/SqlStore.mjs +1 -0
  542. package/dist/sparql/sql/Translation.d.mts +2 -0
  543. package/dist/sparql/sql/Translation.mjs +1 -0
  544. package/dist/sparql/sql/index.d.mts +4 -0
  545. package/dist/sparql/sql/index.mjs +4 -0
  546. package/dist/stringMap-D5YIpYtR.mjs +38 -0
  547. package/dist/stringMap-D5YIpYtR.mjs.map +1 -0
  548. package/dist/tokens-C6BzeodQ.mjs +24 -0
  549. package/dist/tokens-C6BzeodQ.mjs.map +1 -0
  550. package/dist/turtle/Grammar.d.mts +3 -0
  551. package/dist/turtle/Grammar.mjs +3 -0
  552. package/dist/turtle/Manifest.d.mts +2 -0
  553. package/dist/turtle/Manifest.mjs +1 -0
  554. package/dist/turtle/TriG.d.mts +2 -0
  555. package/dist/turtle/TriG.mjs +1 -0
  556. package/dist/turtle/Turtle.d.mts +2 -0
  557. package/dist/turtle/Turtle.mjs +1 -0
  558. package/dist/turtle/index.d.mts +5 -0
  559. package/dist/turtle/index.mjs +5 -0
  560. package/dist/xmp/DublinCore.d.mts +2 -0
  561. package/dist/xmp/DublinCore.mjs +1 -0
  562. package/dist/xmp/Exif.d.mts +2 -0
  563. package/dist/xmp/Exif.mjs +1 -0
  564. package/dist/xmp/Extract.d.mts +2 -0
  565. package/dist/xmp/Extract.mjs +1 -0
  566. package/dist/xmp/Metadata.d.mts +2 -0
  567. package/dist/xmp/Metadata.mjs +1 -0
  568. package/dist/xmp/Namespaces.d.mts +2 -0
  569. package/dist/xmp/Namespaces.mjs +1 -0
  570. package/dist/xmp/Packet.d.mts +2 -0
  571. package/dist/xmp/Packet.mjs +1 -0
  572. package/dist/xmp/Pdf.d.mts +2 -0
  573. package/dist/xmp/Pdf.mjs +1 -0
  574. package/dist/xmp/PdfA.d.mts +2 -0
  575. package/dist/xmp/PdfA.mjs +1 -0
  576. package/dist/xmp/Photoshop.d.mts +2 -0
  577. package/dist/xmp/Photoshop.mjs +1 -0
  578. package/dist/xmp/Tiff.d.mts +2 -0
  579. package/dist/xmp/Tiff.mjs +1 -0
  580. package/dist/xmp/Xmp.d.mts +2 -0
  581. package/dist/xmp/Xmp.mjs +3 -0
  582. package/dist/xmp/XmpBasic.d.mts +2 -0
  583. package/dist/xmp/XmpBasic.mjs +1 -0
  584. package/dist/xmp/XmpMM.d.mts +2 -0
  585. package/dist/xmp/XmpMM.mjs +1 -0
  586. package/dist/xmp/XmpRights.d.mts +2 -0
  587. package/dist/xmp/XmpRights.mjs +1 -0
  588. package/dist/xmp/index.d.mts +15 -0
  589. package/dist/xmp/index.mjs +15 -0
  590. package/package.json +195 -3
  591. package/src/Dataset.ts +1085 -0
  592. package/src/Iri.ts +322 -0
  593. package/src/Isomorphism.ts +319 -0
  594. package/src/LanguageTag.ts +98 -0
  595. package/src/Namespace.ts +100 -0
  596. package/src/PrefixMap.ts +117 -0
  597. package/src/RdfJs.ts +146 -0
  598. package/src/Rdfs.ts +241 -0
  599. package/src/Reification.ts +103 -0
  600. package/src/Resource.ts +873 -0
  601. package/src/Serialization.ts +775 -0
  602. package/src/Term.ts +1300 -0
  603. package/src/TermCodec.ts +505 -0
  604. package/src/TermJson.ts +313 -0
  605. package/src/Vocab.ts +161 -0
  606. package/src/Xsd.ts +573 -0
  607. package/src/csvw/Csv2Json.ts +265 -0
  608. package/src/csvw/Csv2Rdf.ts +268 -0
  609. package/src/csvw/Datatype.ts +589 -0
  610. package/src/csvw/Metadata.ts +1523 -0
  611. package/src/csvw/Processor.ts +276 -0
  612. package/src/csvw/Report.ts +135 -0
  613. package/src/csvw/Table.ts +759 -0
  614. package/src/csvw/index.ts +22 -0
  615. package/src/csvw/internal/dateFormat.ts +202 -0
  616. package/src/csvw/internal/json.ts +104 -0
  617. package/src/csvw/internal/numberFormat.ts +369 -0
  618. package/src/csvw/internal/object.ts +23 -0
  619. package/src/csvw/internal/uriTemplate.ts +130 -0
  620. package/src/csvw/internal/url.ts +93 -0
  621. package/src/csvw/internal/vocab.ts +282 -0
  622. package/src/index.ts +40 -0
  623. package/src/internal/arbitrary.ts +148 -0
  624. package/src/internal/loop.ts +24 -0
  625. package/src/internal/pending.ts +20 -0
  626. package/src/internal/textDecoder.ts +183 -0
  627. package/src/jsonld/DocumentLoader.ts +512 -0
  628. package/src/jsonld/JsonLd.ts +847 -0
  629. package/src/jsonld/JsonLdError.ts +105 -0
  630. package/src/jsonld/index.ts +13 -0
  631. package/src/jsonld/internal/compact.ts +852 -0
  632. package/src/jsonld/internal/context.ts +781 -0
  633. package/src/jsonld/internal/expand.ts +614 -0
  634. package/src/jsonld/internal/flatten.ts +243 -0
  635. package/src/jsonld/internal/frame.ts +559 -0
  636. package/src/jsonld/internal/iri.ts +52 -0
  637. package/src/jsonld/internal/json.ts +19 -0
  638. package/src/jsonld/internal/linkHeader.ts +60 -0
  639. package/src/jsonld/internal/rdf.ts +481 -0
  640. package/src/jsonld/internal/util.ts +367 -0
  641. package/src/n3/Isomorphism.ts +476 -0
  642. package/src/n3/Mapping.ts +332 -0
  643. package/src/n3/Model.ts +696 -0
  644. package/src/n3/N3.ts +237 -0
  645. package/src/n3/Reasoner.ts +568 -0
  646. package/src/n3/Vocab.ts +111 -0
  647. package/src/n3/index.ts +21 -0
  648. package/src/n3/internal/builtins.ts +668 -0
  649. package/src/n3/internal/guards.ts +23 -0
  650. package/src/n3/internal/lists.ts +106 -0
  651. package/src/n3/internal/loop.ts +28 -0
  652. package/src/n3/internal/parser.ts +1032 -0
  653. package/src/n3/internal/writer.ts +344 -0
  654. package/src/ntriples/Grammar.ts +317 -0
  655. package/src/ntriples/Lexical.ts +321 -0
  656. package/src/ntriples/NQuads.ts +140 -0
  657. package/src/ntriples/NTriples.ts +143 -0
  658. package/src/ntriples/index.ts +14 -0
  659. package/src/ntriples/internal/codec.ts +229 -0
  660. package/src/ntriples/internal/lineParser.ts +326 -0
  661. package/src/ntriples/internal/loop.ts +14 -0
  662. package/src/rdfjson/RdfJson.ts +806 -0
  663. package/src/rdfjson/index.ts +9 -0
  664. package/src/rdfjson/internal/json.ts +19 -0
  665. package/src/rdfxml/RdfXml.ts +1408 -0
  666. package/src/rdfxml/Xml.ts +419 -0
  667. package/src/rdfxml/index.ts +11 -0
  668. package/src/rdfxml/internal/chars.ts +73 -0
  669. package/src/rdfxml/internal/loop.ts +24 -0
  670. package/src/rdfxml/internal/parser.ts +1265 -0
  671. package/src/shacl/Message.ts +102 -0
  672. package/src/shacl/Path.ts +483 -0
  673. package/src/shacl/Shapes.ts +913 -0
  674. package/src/shacl/Sparql.ts +128 -0
  675. package/src/shacl/ValidationReport.ts +438 -0
  676. package/src/shacl/Validator.ts +1156 -0
  677. package/src/shacl/Vocabulary.ts +180 -0
  678. package/src/shacl/index.ts +22 -0
  679. package/src/shacl/internal/compare.ts +128 -0
  680. package/src/shacl/internal/regex.ts +56 -0
  681. package/src/shex/SemAct.ts +197 -0
  682. package/src/shex/ShExC.ts +415 -0
  683. package/src/shex/ShExError.ts +71 -0
  684. package/src/shex/ShExJ.ts +893 -0
  685. package/src/shex/ShExR.ts +640 -0
  686. package/src/shex/ShapeMap.ts +385 -0
  687. package/src/shex/Structure.ts +467 -0
  688. package/src/shex/Validator.ts +395 -0
  689. package/src/shex/index.ts +24 -0
  690. package/src/shex/internal/engine.ts +682 -0
  691. package/src/shex/internal/iterate.ts +14 -0
  692. package/src/shex/internal/json.ts +12 -0
  693. package/src/shex/internal/lexer.ts +56 -0
  694. package/src/shex/internal/nodeConstraint.ts +368 -0
  695. package/src/shex/internal/shexcLexer.ts +387 -0
  696. package/src/shex/internal/shexcParser.ts +1312 -0
  697. package/src/shex/internal/tokens.ts +41 -0
  698. package/src/shex/internal/xpathRegex.ts +290 -0
  699. package/src/sparql/Algebra.ts +914 -0
  700. package/src/sparql/Ast.ts +1344 -0
  701. package/src/sparql/Bindings.ts +272 -0
  702. package/src/sparql/ClientErrors.ts +156 -0
  703. package/src/sparql/ClientFormats.ts +70 -0
  704. package/src/sparql/Engine.ts +699 -0
  705. package/src/sparql/Errors.ts +30 -0
  706. package/src/sparql/Expression.ts +360 -0
  707. package/src/sparql/Federation.ts +187 -0
  708. package/src/sparql/Functions.ts +689 -0
  709. package/src/sparql/Generator.ts +426 -0
  710. package/src/sparql/GraphStore.ts +341 -0
  711. package/src/sparql/Optimizer.ts +230 -0
  712. package/src/sparql/Options.ts +191 -0
  713. package/src/sparql/Parser.ts +173 -0
  714. package/src/sparql/Protocol.ts +342 -0
  715. package/src/sparql/ProtocolErrors.ts +113 -0
  716. package/src/sparql/QueryBuilder.ts +953 -0
  717. package/src/sparql/Results.ts +844 -0
  718. package/src/sparql/ResultsStream.ts +771 -0
  719. package/src/sparql/ServerFormats.ts +75 -0
  720. package/src/sparql/ServiceDescription.ts +130 -0
  721. package/src/sparql/SparqlClient.ts +947 -0
  722. package/src/sparql/SparqlServer.ts +528 -0
  723. package/src/sparql/Store.ts +311 -0
  724. package/src/sparql/TermSchema.ts +20 -0
  725. package/src/sparql/Testing.ts +114 -0
  726. package/src/sparql/Translate.ts +407 -0
  727. package/src/sparql/ai/Mcp.ts +43 -0
  728. package/src/sparql/ai/Tools.ts +481 -0
  729. package/src/sparql/ai/index.ts +11 -0
  730. package/src/sparql/index.ts +64 -0
  731. package/src/sparql/internal/evaluator.ts +947 -0
  732. package/src/sparql/internal/hash.ts +418 -0
  733. package/src/sparql/internal/json.ts +12 -0
  734. package/src/sparql/internal/lexer.ts +488 -0
  735. package/src/sparql/internal/loop.ts +24 -0
  736. package/src/sparql/internal/parser.ts +2215 -0
  737. package/src/sparql/internal/prefetch.ts +46 -0
  738. package/src/sparql/internal/stringMap.ts +39 -0
  739. package/src/sparql/internal/textResults.ts +226 -0
  740. package/src/sparql/internal/values.ts +550 -0
  741. package/src/sparql/shacl/Evaluator.ts +478 -0
  742. package/src/sparql/shacl/Query.ts +574 -0
  743. package/src/sparql/shacl/index.ts +12 -0
  744. package/src/sparql/sql/Dialect.ts +246 -0
  745. package/src/sparql/sql/SqlStore.ts +1080 -0
  746. package/src/sparql/sql/Translation.ts +1898 -0
  747. package/src/sparql/sql/index.ts +17 -0
  748. package/src/sparql/sql/internal/encoding.ts +313 -0
  749. package/src/turtle/Grammar.ts +286 -0
  750. package/src/turtle/Manifest.ts +215 -0
  751. package/src/turtle/TriG.ts +158 -0
  752. package/src/turtle/Turtle.ts +166 -0
  753. package/src/turtle/index.ts +14 -0
  754. package/src/turtle/internal/loop.ts +23 -0
  755. package/src/turtle/internal/parse.ts +112 -0
  756. package/src/turtle/internal/parser.ts +1303 -0
  757. package/src/turtle/internal/serialize.ts +79 -0
  758. package/src/turtle/internal/streamWriter.ts +128 -0
  759. package/src/turtle/internal/writer.ts +898 -0
  760. package/src/xmp/DublinCore.ts +147 -0
  761. package/src/xmp/Exif.ts +109 -0
  762. package/src/xmp/Extract.ts +351 -0
  763. package/src/xmp/Metadata.ts +703 -0
  764. package/src/xmp/Namespaces.ts +228 -0
  765. package/src/xmp/Packet.ts +297 -0
  766. package/src/xmp/Pdf.ts +99 -0
  767. package/src/xmp/PdfA.ts +280 -0
  768. package/src/xmp/Photoshop.ts +275 -0
  769. package/src/xmp/Tiff.ts +196 -0
  770. package/src/xmp/Xmp.ts +430 -0
  771. package/src/xmp/XmpBasic.ts +90 -0
  772. package/src/xmp/XmpMM.ts +82 -0
  773. package/src/xmp/XmpRights.ts +83 -0
  774. package/src/xmp/index.ts +36 -0
  775. package/src/xmp/internal/accessors.ts +72 -0
  776. package/src/xmp/internal/xml.ts +63 -0
@@ -0,0 +1,898 @@
1
+ /**
2
+ * Pretty-printing writer shared by the Turtle and TriG serializers.
3
+ *
4
+ * @internal
5
+ */
6
+ import * as Dataset from '../../Dataset.ts';
7
+ import * as Iri from '../../Iri.ts';
8
+ import * as Isomorphism from '../../Isomorphism.ts';
9
+ import type * as PrefixMap from '../../PrefixMap.ts';
10
+ import * as Term from '../../Term.ts';
11
+ import { commonPrefixes, rdf, xsd } from '../../Vocab.ts';
12
+ import * as Lexical from '../../ntriples/Lexical.ts';
13
+ import * as Arr from 'effect/Array';
14
+ import * as Iterable from 'effect/Iterable';
15
+ import * as MutableHashMap from 'effect/MutableHashMap';
16
+ import * as MutableHashSet from 'effect/MutableHashSet';
17
+ import * as Option from 'effect/Option';
18
+ import * as Order from 'effect/Order';
19
+ import * as Predicate from 'effect/Predicate';
20
+ import * as Record from 'effect/Record';
21
+ import { loop } from './loop.ts';
22
+
23
+ /** @internal */
24
+ export class SerializeFailure extends Error {}
25
+
26
+ /** @internal */
27
+ export interface WriterOptions {
28
+ readonly trig: boolean;
29
+ readonly prefixes: Option.Option<PrefixMap.PrefixMap>;
30
+ readonly baseIri: Option.Option<string>;
31
+ readonly autoPrefixes: boolean;
32
+ readonly sparqlDirectives: boolean;
33
+ readonly indent: string;
34
+ }
35
+
36
+ const RDF_TYPE = rdf.type.value;
37
+ const RDF_FIRST = rdf.first.value;
38
+ const RDF_REST = rdf.rest.value;
39
+ const RDF_NIL = rdf.nil.value;
40
+ const RDF_REIFIES = rdf.reifies.value;
41
+ const XSD_INTEGER = xsd.integer.value;
42
+ const XSD_DECIMAL = xsd.decimal.value;
43
+ const XSD_DOUBLE = xsd.double.value;
44
+ const XSD_BOOLEAN = xsd.boolean.value;
45
+
46
+ const INTEGER = /^[+-]?[0-9]+$/;
47
+ const DECIMAL = /^[+-]?[0-9]*\.[0-9]+$/;
48
+ const DOUBLE =
49
+ /^[+-]?(?:[0-9]+\.[0-9]*[eE][+-]?[0-9]+|\.[0-9]+[eE][+-]?[0-9]+|[0-9]+[eE][+-]?[0-9]+)$/;
50
+
51
+ /** Characters that may be backslash-escaped in a local name (minus URL delimiters). */
52
+ const LOCAL_ESCAPABLE = "_~.-!$&'()*+,;=@";
53
+
54
+ /** An ASCII local name that is already a `PN_LOCAL` (or empty): no character needs encoding. */
55
+ const PLAIN_LOCAL = /^(?:[A-Za-z0-9_:](?:[A-Za-z0-9_:.-]*[A-Za-z0-9_:-])?)?$/;
56
+
57
+ /**
58
+ * The characters a long (`"""`) string escapes: `\`, `"`, controls other than
59
+ * tab and line feed, and the noncharacters U+FFFE and U+FFFF. Written as what
60
+ * is kept, so that it names no control character.
61
+ */
62
+ const LONG_ESCAPED = /[\\"]|[^\t\n -~\x80-\u{fffd}\u{10000}-\u{10ffff}]/gu;
63
+
64
+ // -----------------------------------------------------------------------------
65
+ // Lexical helpers
66
+ // -----------------------------------------------------------------------------
67
+
68
+ /** The code point of a one-character string. */
69
+ const codePoint = (ch: string): number => ch.codePointAt(0) ?? 0;
70
+
71
+ /** Whether `prefix` is a valid `PN_PREFIX` (or empty). */
72
+ export const isPrefixName = (prefix: string): boolean => {
73
+ if (prefix === '') return true;
74
+ const chars = Array.from(prefix, codePoint);
75
+ return (
76
+ Arr.isReadonlyArrayNonEmpty(chars) &&
77
+ Lexical.isPnCharsBase(Arr.headNonEmpty(chars)) &&
78
+ Arr.lastNonEmpty(chars) !== 0x2e &&
79
+ chars.every((c) => Lexical.isPnChars(c) || c === 0x2e)
80
+ );
81
+ };
82
+
83
+ /** Encodes a local name character by character, escaping what `PN_LOCAL` needs escaped. */
84
+ const encodeLocalChars = (local: string): Option.Option<string> => {
85
+ const chars = Array.from(local);
86
+ const last = chars.length - 1;
87
+ let out = '';
88
+ let i = 0;
89
+ let ok = true;
90
+ loop(() => {
91
+ if (i > last) return false;
92
+ const ch = chars[i] ?? '';
93
+ const c = codePoint(ch);
94
+ const plain =
95
+ i === 0
96
+ ? Lexical.isPnCharsU(c) || c === 0x3a || Lexical.isDigit(c)
97
+ : Lexical.isPnChars(c) || c === 0x3a || (c === 0x2e && i !== last);
98
+ if (plain) {
99
+ out += ch;
100
+ i += 1;
101
+ return true;
102
+ }
103
+ const h1 = chars[i + 1] ?? '';
104
+ const h2 = chars[i + 2] ?? '';
105
+ if (
106
+ c === 0x25 &&
107
+ i + 2 < chars.length &&
108
+ Lexical.isHex(h1.charCodeAt(0)) &&
109
+ Lexical.isHex(h2.charCodeAt(0))
110
+ ) {
111
+ out += ch + h1 + h2;
112
+ i += 3;
113
+ return true;
114
+ }
115
+ if (LOCAL_ESCAPABLE.includes(ch)) {
116
+ out += `\\${ch}`;
117
+ i += 1;
118
+ return true;
119
+ }
120
+ ok = false;
121
+ return false;
122
+ });
123
+ return ok ? Option.some(out) : Option.none();
124
+ };
125
+
126
+ /** Encodes a local name as `PN_LOCAL`, or returns `None` if it cannot be. */
127
+ export const encodeLocalName = (local: string): Option.Option<string> =>
128
+ PLAIN_LOCAL.test(local) ? Option.some(local) : encodeLocalChars(local);
129
+
130
+ const hex4 = (c: number): string => `\\u${c.toString(16).toUpperCase().padStart(4, '0')}`;
131
+
132
+ const escapeLong = (ch: string): string =>
133
+ ch === '\\' ? '\\\\' : ch === '"' ? '\\"' : ch === '\r' ? '\\r' : hex4(ch.charCodeAt(0));
134
+
135
+ /** Formats a string as a Turtle string literal, using `"""` for multi-line text. */
136
+ export const quoteString = (value: string): string =>
137
+ value.includes('\n')
138
+ ? `"""${value.replace(LONG_ESCAPED, escapeLong)}"""`
139
+ : `"${Term.escapeString(value)}"`;
140
+
141
+ // -----------------------------------------------------------------------------
142
+ // Analysis
143
+ // -----------------------------------------------------------------------------
144
+
145
+ interface BlankInfo {
146
+ readonly objectRefs: Array<Term.Quad>;
147
+ inTripleTerm: boolean;
148
+ asGraph: boolean;
149
+ /** The graph the node is first a subject in, and whether it is a subject in any other. */
150
+ subjectGraph: Option.Option<string>;
151
+ manyGraphs: boolean;
152
+ }
153
+
154
+ /** Calls `f` for every blank node in `t`, looking inside triple terms. */
155
+ const visitBlankNodes = (t: Term.Term, f: (b: Term.BlankNode) => void): void => {
156
+ if (Term.isBlankNode(t)) {
157
+ f(t);
158
+ } else if (Term.isTriple(t)) {
159
+ visitBlankNodes(t.subject, f);
160
+ visitBlankNodes(t.object, f);
161
+ }
162
+ };
163
+
164
+ /** Throws when a triple term's subject is itself a triple term, at any depth of objects. */
165
+ const checkTriple = (t: Term.Triple): void => {
166
+ if (Term.isTriple(t.subject)) {
167
+ throw new SerializeFailure(
168
+ `Triple terms cannot be the subject of a triple term in Turtle 1.2: ${t.key}`,
169
+ );
170
+ }
171
+ if (Term.isTriple(t.object)) checkTriple(t.object);
172
+ };
173
+
174
+ /** @internal */
175
+ export const checkQuad = (q: Term.Quad, trig: boolean): void => {
176
+ if (Term.isTriple(q.subject)) {
177
+ throw new SerializeFailure(`Triple terms cannot be subjects in Turtle 1.2: ${q.key}`);
178
+ }
179
+ if (!Term.isGround(q)) throw new SerializeFailure(`Cannot serialise non-ground quad ${q.key}`);
180
+ if (Term.isTriple(q.object)) checkTriple(q.object);
181
+ if (!trig && !Term.isDefaultGraph(q.graph)) {
182
+ throw new SerializeFailure(`Turtle cannot represent quads in named graphs: ${q.key}`);
183
+ }
184
+ };
185
+
186
+ type Annotation =
187
+ | { readonly _tag: 'Block'; readonly reifier: Term.BlankNode }
188
+ | { readonly _tag: 'Id'; readonly reifier: Term.NamedNode | Term.BlankNode };
189
+
190
+ const isIdAnnotation = Predicate.isTagged('Id');
191
+
192
+ type StringSet = MutableHashSet.MutableHashSet<string>;
193
+
194
+ interface GraphPlan {
195
+ readonly graph: Term.Graph;
196
+ readonly bySubject: MutableHashMap.MutableHashMap<string, Array<Term.Quad>>;
197
+ readonly subjects: MutableHashMap.MutableHashMap<string, Term.Subject>;
198
+ /** Blank nodes rendered inline as `[ ... ]` at their single reference. */
199
+ readonly inline: StringSet;
200
+ /** List heads rendered as `( ... )`, with their items. */
201
+ readonly lists: MutableHashMap.MutableHashMap<string, ReadonlyArray<Term.Object>>;
202
+ /** Blank nodes consumed as list cells (including heads). */
203
+ readonly listCells: StringSet;
204
+ /** Annotations keyed by the asserted quad's key. */
205
+ readonly annotations: MutableHashMap.MutableHashMap<string, Array<Annotation>>;
206
+ /** Blank reifiers rendered inside `{| ... |}` blocks. */
207
+ readonly blockReifiers: StringSet;
208
+ /** Reifiers referenced as `~ id`. */
209
+ readonly idReifiers: StringSet;
210
+ /** Blank reifiers rendered as `<< s p o >>` subjects. */
211
+ readonly reifiedSubjects: MutableHashMap.MutableHashMap<string, Term.Triple>;
212
+ /** Quads represented by syntax (annotations, lists) rather than written out (by identity). */
213
+ readonly consumed: WeakSet<Term.Quad>;
214
+ }
215
+
216
+ /** Appends `value` to the list at `key`, creating the list on first use. */
217
+ const pushAt = <V>(
218
+ map: MutableHashMap.MutableHashMap<string, Array<V>>,
219
+ key: string,
220
+ value: V,
221
+ ): void => {
222
+ const list = MutableHashMap.get(map, key);
223
+ if (Option.isSome(list)) list.value.push(value);
224
+ else MutableHashMap.set(map, key, [value]);
225
+ };
226
+
227
+ /**
228
+ * Groups `values` by key, in order of first appearance, calling `onFirst`
229
+ * with the first value of each group. A run of values with the same key
230
+ * (statements arrive grouped) is appended without a lookup.
231
+ */
232
+ const groupBy = <V>(
233
+ values: ReadonlyArray<V>,
234
+ keyOf: (value: V) => string,
235
+ onFirst: (value: V, key: string) => void = () => undefined,
236
+ ): MutableHashMap.MutableHashMap<string, Array<V>> => {
237
+ const groups = MutableHashMap.empty<string, Array<V>>();
238
+ let lastKey = '';
239
+ let last: Array<V> = [];
240
+ values.forEach((value) => {
241
+ const key = keyOf(value);
242
+ if (Arr.isReadonlyArrayNonEmpty(last) && key === lastKey) {
243
+ last.push(value);
244
+ return;
245
+ }
246
+ const found = MutableHashMap.get(groups, key);
247
+ if (Option.isSome(found)) {
248
+ found.value.push(value);
249
+ last = found.value;
250
+ } else {
251
+ last = [value];
252
+ MutableHashMap.set(groups, key, last);
253
+ onFirst(value, key);
254
+ }
255
+ lastKey = key;
256
+ });
257
+ return groups;
258
+ };
259
+
260
+ /** The list at `key`, or an empty one. */
261
+ const listAt = <V>(
262
+ map: MutableHashMap.MutableHashMap<string, Array<V>>,
263
+ key: string,
264
+ ): ReadonlyArray<V> => Option.getOrElse(MutableHashMap.get(map, key), () => []);
265
+
266
+ /** A declared prefix, with its index among the declarations. */
267
+ interface PrefixCandidate {
268
+ readonly prefix: string;
269
+ readonly ns: string;
270
+ readonly index: number;
271
+ }
272
+
273
+ const byNamespaceLength: Order.Order<PrefixCandidate> = Order.flip(
274
+ Order.mapInput(Order.Number, (c: PrefixCandidate) => c.ns.length),
275
+ );
276
+
277
+ /** `rdf:type` first (written `a`), then by IRI. */
278
+ const byVerb: Order.Order<string> = (a, b) =>
279
+ a === RDF_TYPE ? -1 : b === RDF_TYPE ? 1 : a < b ? -1 : a > b ? 1 : 0;
280
+
281
+ // -----------------------------------------------------------------------------
282
+ // Writer
283
+ // -----------------------------------------------------------------------------
284
+
285
+ /** @internal */
286
+ export class Writer {
287
+ private readonly prefixes: Array<readonly [string, string]>;
288
+ /** Whether each of `prefixes` has been written. */
289
+ private readonly usedPrefixes: Array<boolean> = [];
290
+ /** The prefixes, longest namespace first (in declaration order for equal lengths). */
291
+ private readonly byLength: ReadonlyArray<PrefixCandidate>;
292
+ private readonly blanks = MutableHashMap.empty<string, BlankInfo>();
293
+ /** The keys of the quads written, built when the first reifier is planned. */
294
+ private assertedKeys: Option.Option<StringSet> = Option.none();
295
+ private plan!: GraphPlan;
296
+ private readonly labels = MutableHashMap.empty<string, string>();
297
+ private rendered: StringSet = MutableHashSet.empty();
298
+
299
+ readonly options: WriterOptions;
300
+ private readonly quads: ReadonlyArray<Term.Quad>;
301
+ private readonly relabel;
302
+ constructor(options: WriterOptions, quads: ReadonlyArray<Term.Quad>, relabel = true) {
303
+ this.options = options;
304
+ this.quads = quads;
305
+ this.relabel = relabel;
306
+ const declared = MutableHashMap.empty<string, string>();
307
+ if (options.autoPrefixes) {
308
+ Arr.forEach(detectPrefixes(quads, options.baseIri), ([p, ns]) => {
309
+ MutableHashMap.set(declared, p, ns);
310
+ });
311
+ }
312
+ if (Option.isSome(options.prefixes)) {
313
+ Iterable.forEach(options.prefixes.value.prefixes, ([p, ns]) => {
314
+ // A declared prefix replaces any detected one for the same namespace
315
+ Arr.forEach(
316
+ Arr.filter(Arr.fromIterable(declared), ([q, other]) => other === ns && q !== p),
317
+ ([q]) => {
318
+ MutableHashMap.remove(declared, q);
319
+ },
320
+ );
321
+ MutableHashMap.set(declared, p, ns);
322
+ });
323
+ }
324
+ this.prefixes = Arr.filter(
325
+ Arr.fromIterable(declared),
326
+ ([p, ns]) => isPrefixName(p) && Lexical.isWritableIri(ns),
327
+ );
328
+ this.byLength = Arr.sort(
329
+ this.prefixes.map(([prefix, ns], index): PrefixCandidate => ({ prefix, ns, index })),
330
+ byNamespaceLength,
331
+ );
332
+ if (Option.isSome(options.baseIri) && !Lexical.isWritableIri(options.baseIri.value)) {
333
+ throw new SerializeFailure(`Invalid base IRI <${options.baseIri.value}>`);
334
+ }
335
+ }
336
+
337
+ write(): string {
338
+ this.quads.forEach((q) => {
339
+ checkQuad(q, this.options.trig);
340
+ this.index(q);
341
+ });
342
+ const names = MutableHashMap.empty<string, Term.Graph>();
343
+ const byGraph = groupBy(
344
+ this.quads,
345
+ (q) => q.graph.key,
346
+ (q, key) => MutableHashMap.set(names, key, q.graph),
347
+ );
348
+ const graphs = Arr.sort(
349
+ Arr.fromIterable(names),
350
+ Order.mapInput(compareTerms, ([, graph]: readonly [string, Term.Graph]) => graph),
351
+ ).map(([key, graph]) => ({ graph, quads: listAt(byGraph, key) }));
352
+ const body = Arr.reduce(graphs, '', (out, { graph, quads }) =>
353
+ Term.isDefaultGraph(graph)
354
+ ? out + this.writeGraph(graph, quads, 0)
355
+ : // The graph name is labelled before its content
356
+ `${out}${out === '' ? '' : '\n'}${this.term(graph)} {\n${this.writeGraph(graph, quads, 1)}}\n`,
357
+ );
358
+ return this.header() + body;
359
+ }
360
+
361
+ private asserted(): StringSet {
362
+ if (Option.isSome(this.assertedKeys)) return this.assertedKeys.value;
363
+ const keys: StringSet = MutableHashSet.empty();
364
+ this.quads.forEach((q) => MutableHashSet.add(keys, q.key));
365
+ this.assertedKeys = Option.some(keys);
366
+ return keys;
367
+ }
368
+
369
+ private header(): string {
370
+ const sparql = this.options.sparqlDirectives;
371
+ const base = Option.match(this.options.baseIri, {
372
+ onNone: () => '',
373
+ onSome: (iri) =>
374
+ sparql ? `BASE <${Term.escapeIri(iri)}>\n` : `@base <${Term.escapeIri(iri)}> .\n`,
375
+ });
376
+ const used = Arr.sort(
377
+ this.prefixes.filter((_, i) => this.usedPrefixes[i] === true),
378
+ byPrefixName,
379
+ );
380
+ const out =
381
+ base +
382
+ used
383
+ .map(([p, ns]) =>
384
+ sparql
385
+ ? `PREFIX ${p}: <${Term.escapeIri(ns)}>\n`
386
+ : `@prefix ${p}: <${Term.escapeIri(ns)}> .\n`,
387
+ )
388
+ .join('');
389
+ return out === '' ? '' : `${out}\n`;
390
+ }
391
+
392
+ private info(b: Term.BlankNode): BlankInfo {
393
+ const found = MutableHashMap.get(this.blanks, b.value);
394
+ if (Option.isSome(found)) return found.value;
395
+ const info: BlankInfo = {
396
+ objectRefs: [],
397
+ inTripleTerm: false,
398
+ asGraph: false,
399
+ subjectGraph: Option.none(),
400
+ manyGraphs: false,
401
+ };
402
+ MutableHashMap.set(this.blanks, b.value, info);
403
+ return info;
404
+ }
405
+
406
+ private index(q: Term.Quad): void {
407
+ if (Term.isBlankNode(q.subject)) {
408
+ const info = this.info(q.subject);
409
+ if (Option.isNone(info.subjectGraph)) info.subjectGraph = Option.some(q.graph.key);
410
+ else if (info.subjectGraph.value !== q.graph.key) info.manyGraphs = true;
411
+ }
412
+ if (Term.isBlankNode(q.object)) this.info(q.object).objectRefs.push(q);
413
+ if (Term.isTriple(q.object)) {
414
+ visitBlankNodes(q.object, (b) => {
415
+ this.info(b).inTripleTerm = true;
416
+ });
417
+ }
418
+ if (Term.isBlankNode(q.graph)) this.info(q.graph).asGraph = true;
419
+ }
420
+
421
+ /** Whether a blank node is local to `graph` and appears in no triple term or graph name. */
422
+ private isLocal(b: Term.BlankNode, graph: Term.Graph): boolean {
423
+ const info = this.info(b);
424
+ return (
425
+ !info.inTripleTerm &&
426
+ !info.asGraph &&
427
+ !info.manyGraphs &&
428
+ (Option.isNone(info.subjectGraph) || info.subjectGraph.value === graph.key)
429
+ );
430
+ }
431
+
432
+ private planGraph(
433
+ graph: Term.Graph,
434
+ quads: ReadonlyArray<Term.Quad>,
435
+ demoted: StringSet,
436
+ ): GraphPlan {
437
+ const subjects = MutableHashMap.empty<string, Term.Subject>();
438
+ const bySubject = groupBy(
439
+ quads,
440
+ (q) => q.subject.key,
441
+ (q, key) => MutableHashMap.set(subjects, key, q.subject),
442
+ );
443
+ const consumed = new WeakSet<Term.Quad>();
444
+
445
+ // Blank nodes referenced exactly once (as an object, in this graph), rendered inline.
446
+ const inline: StringSet = MutableHashSet.empty();
447
+ quads.forEach((q) => {
448
+ const o = q.object;
449
+ if (!Term.isBlankNode(o) || MutableHashSet.has(demoted, o.value) || !this.isLocal(o, graph))
450
+ return;
451
+ const refs = this.info(o).objectRefs;
452
+ if (refs.length === 1 && refs[0]?.graph.key === graph.key)
453
+ MutableHashSet.add(inline, o.value);
454
+ });
455
+
456
+ // Well-formed collections.
457
+ const lists = MutableHashMap.empty<string, ReadonlyArray<Term.Object>>();
458
+ const listCells: StringSet = MutableHashSet.empty();
459
+ const listShape = (label: string): Option.Option<readonly [Term.Object, Term.Object]> => {
460
+ if (!MutableHashSet.has(inline, label)) return Option.none();
461
+ const own = listAt(bySubject, `_:${label}`);
462
+ if (own.length !== 2) return Option.none();
463
+ const first = Arr.findFirst(own, (q) => q.predicate.value === RDF_FIRST);
464
+ const rest = Arr.findFirst(own, (q) => q.predicate.value === RDF_REST);
465
+ return Option.isSome(first) && Option.isSome(rest)
466
+ ? Option.some<readonly [Term.Object, Term.Object]>([first.value.object, rest.value.object])
467
+ : Option.none();
468
+ };
469
+ Iterable.forEach(inline, (label) => {
470
+ if (Option.isNone(listShape(label))) return;
471
+ const ref = Arr.head(this.info(Term.blankNode(label)).objectRefs);
472
+ // Not the tail of another list cell.
473
+ if (
474
+ Option.isNone(ref) ||
475
+ (ref.value.predicate.value === RDF_REST &&
476
+ Term.isBlankNode(ref.value.subject) &&
477
+ Option.isSome(listShape(ref.value.subject.value)))
478
+ ) {
479
+ return;
480
+ }
481
+ const items: Array<Term.Object> = [];
482
+ const cells: Array<string> = [];
483
+ let current: string = label;
484
+ let ok = false;
485
+ loop(() => {
486
+ const shape = listShape(current);
487
+ if (Option.isNone(shape) || cells.includes(current)) return false;
488
+ const [item, next] = shape.value;
489
+ cells.push(current);
490
+ items.push(item);
491
+ if (Term.isNamedNode(next) && next.value === RDF_NIL) {
492
+ ok = true;
493
+ return false;
494
+ }
495
+ if (!Term.isBlankNode(next)) return false;
496
+ current = next.value;
497
+ return true;
498
+ });
499
+ if (!ok) return;
500
+ MutableHashMap.set(lists, label, items);
501
+ Arr.forEach(cells, (cell) => {
502
+ MutableHashSet.add(listCells, cell);
503
+ Arr.forEach(listAt(bySubject, `_:${cell}`), (q) => {
504
+ consumed.add(q);
505
+ });
506
+ });
507
+ });
508
+
509
+ // Annotations and reified-triple subjects.
510
+ const annotations = MutableHashMap.empty<string, Array<Annotation>>();
511
+ const blockReifiers: StringSet = MutableHashSet.empty();
512
+ const reifiedSubjects = MutableHashMap.empty<string, Term.Triple>();
513
+ const idReifiers: StringSet = MutableHashSet.empty();
514
+ /** A blank reifier of nothing else, described only here: written as a block or a subject. */
515
+ const isStandalone = (r: Term.BlankNode): boolean =>
516
+ !MutableHashSet.has(demoted, r.value) &&
517
+ this.isLocal(r, graph) &&
518
+ Arr.isReadonlyArrayEmpty(this.info(r).objectRefs) &&
519
+ listAt(bySubject, r.key).filter((x) => x.predicate.value === RDF_REIFIES && !consumed.has(x))
520
+ .length === 1;
521
+ quads.forEach((q) => {
522
+ if (q.predicate.value !== RDF_REIFIES || !Term.isTriple(q.object)) return;
523
+ const t = q.object;
524
+ if (Term.isTriple(t.subject)) return;
525
+ const r = q.subject;
526
+ if (Term.isTriple(r)) return;
527
+ const assertedKey = new Term.Quad(t.subject, t.predicate, t.object, graph).key;
528
+ const isAsserted = MutableHashSet.has(this.asserted(), assertedKey);
529
+ if (Term.isBlankNode(r) && isStandalone(r)) {
530
+ consumed.add(q);
531
+ if (isAsserted) {
532
+ MutableHashSet.add(blockReifiers, r.value);
533
+ pushAt(annotations, assertedKey, { _tag: 'Block', reifier: r });
534
+ } else {
535
+ MutableHashMap.set(reifiedSubjects, r.value, t);
536
+ }
537
+ } else if (
538
+ isAsserted &&
539
+ (Term.isNamedNode(r) ||
540
+ (!MutableHashSet.has(inline, r.value) && !MutableHashSet.has(listCells, r.value)))
541
+ ) {
542
+ consumed.add(q);
543
+ if (Term.isBlankNode(r)) MutableHashSet.add(idReifiers, r.value);
544
+ pushAt(annotations, assertedKey, { _tag: 'Id', reifier: r });
545
+ }
546
+ });
547
+
548
+ return {
549
+ graph,
550
+ bySubject,
551
+ subjects,
552
+ inline,
553
+ lists,
554
+ listCells,
555
+ annotations,
556
+ blockReifiers,
557
+ idReifiers,
558
+ reifiedSubjects,
559
+ consumed,
560
+ };
561
+ }
562
+
563
+ private writeGraph(graph: Term.Graph, quads: ReadonlyArray<Term.Quad>, level: number): string {
564
+ // Inline blank nodes and lists that rendering did not reach are written out, and re-planned
565
+ const demoted: StringSet = MutableHashSet.empty();
566
+ let out = '';
567
+ loop(() => {
568
+ this.plan = this.planGraph(graph, quads, demoted);
569
+ this.rendered = MutableHashSet.empty();
570
+ out = this.renderGraph(level);
571
+ const before = MutableHashSet.size(demoted);
572
+ Iterable.forEach(this.plan.inline, (label) => {
573
+ if (
574
+ !MutableHashSet.has(this.rendered, label) &&
575
+ !MutableHashSet.has(this.plan.listCells, label)
576
+ ) {
577
+ MutableHashSet.add(demoted, label);
578
+ }
579
+ });
580
+ Iterable.forEach(MutableHashMap.keys(this.plan.lists), (label) => {
581
+ if (!MutableHashSet.has(this.rendered, label)) MutableHashSet.add(demoted, label);
582
+ });
583
+ return MutableHashSet.size(demoted) !== before;
584
+ });
585
+ return out;
586
+ }
587
+
588
+ private renderGraph(level: number): string {
589
+ const plan = this.plan;
590
+ const unsorted = Arr.filter(
591
+ Arr.fromIterable(MutableHashMap.values(plan.subjects)),
592
+ (s) =>
593
+ !(
594
+ Term.isBlankNode(s) &&
595
+ (MutableHashSet.has(plan.inline, s.value) ||
596
+ MutableHashSet.has(plan.listCells, s.value) ||
597
+ MutableHashSet.has(plan.blockReifiers, s.value))
598
+ ),
599
+ );
600
+ const roots = Arr.sort(unsorted, compareTerms);
601
+ const blocks = Arr.flatMap(roots, (s): ReadonlyArray<string> => {
602
+ const quads = listAt(plan.bySubject, s.key).filter((q) => !plan.consumed.has(q));
603
+ const reified = Term.isBlankNode(s)
604
+ ? MutableHashMap.get(plan.reifiedSubjects, s.value)
605
+ : Option.none<Term.Triple>();
606
+ const head = Option.isSome(reified) ? this.reifiedTriple(reified.value) : this.term(s);
607
+ if (Arr.isReadonlyArrayEmpty(quads)) {
608
+ return Option.isSome(reified) ? [`${this.pad(level)}${head} .\n`] : [];
609
+ }
610
+ if (
611
+ Term.isBlankNode(s) &&
612
+ Option.isNone(reified) &&
613
+ !MutableHashSet.has(plan.idReifiers, s.value) &&
614
+ Arr.isReadonlyArrayEmpty(this.info(s).objectRefs) &&
615
+ this.isLocal(s, plan.graph)
616
+ ) {
617
+ // An unreferenced blank node: `[ p o ] .`
618
+ return [`${this.pad(level)}${this.bracketed('[', ']', quads, level)} .\n`];
619
+ }
620
+ return [`${this.pad(level)}${head} ${this.predicateObjectList(quads, level + 1)} .\n`];
621
+ });
622
+ return blocks.join(level === 0 ? '\n' : '');
623
+ }
624
+
625
+ private pad(level: number): string {
626
+ return this.options.indent.repeat(level);
627
+ }
628
+
629
+ /** Renders `p o, o ; p o` with continuation lines at `level`. */
630
+ private predicateObjectList(quads: ReadonlyArray<Term.Quad>, level: number): string {
631
+ const byPredicate = groupBy(quads, (q) => q.predicate.value);
632
+ const predicates = Arr.sort(
633
+ byPredicate,
634
+ Order.mapInput(byVerb, ([p]: readonly [string, Array<Term.Quad>]) => p),
635
+ );
636
+ const parts = predicates.map(([p, list]) => {
637
+ const objects = Arr.sort(
638
+ list,
639
+ Order.mapInput(compareTerms, (q: Term.Quad) => q.object),
640
+ ).map((q) => this.objectWithAnnotations(q, level));
641
+ const verb = p === RDF_TYPE ? 'a' : this.iri(p);
642
+ return `${verb} ${objects.join(', ')}`;
643
+ });
644
+ return parts.join(` ;\n${this.pad(level)}`);
645
+ }
646
+
647
+ private objectWithAnnotations(q: Term.Quad, level: number): string {
648
+ let out = this.object(q.object, level);
649
+ const annotations = MutableHashMap.get(this.plan.annotations, q.key);
650
+ if (Option.isNone(annotations)) return out;
651
+ // An annotation block directly after a reifier would describe that
652
+ // reifier, so blocks come first, then bare `~`, then `~ id`.
653
+ let bare = '';
654
+ let ids = '';
655
+ Arr.forEach(
656
+ Arr.sort(
657
+ annotations.value,
658
+ Order.mapInput(compareTerms, (x: Annotation) => x.reifier),
659
+ ),
660
+ (annotation) => {
661
+ if (isIdAnnotation(annotation)) {
662
+ ids += ` ~ ${this.term(annotation.reifier)}`;
663
+ return;
664
+ }
665
+ const own = listAt(this.plan.bySubject, annotation.reifier.key).filter(
666
+ (x) => !this.plan.consumed.has(x),
667
+ );
668
+ if (Arr.isReadonlyArrayEmpty(own)) bare += ' ~';
669
+ else out += ` ${this.bracketed('{|', '|}', own, level)}`;
670
+ },
671
+ );
672
+ return out + bare + ids;
673
+ }
674
+
675
+ /** Renders a bracketed property list (`[ ... ]` or `{| ... |}`). */
676
+ private bracketed(
677
+ open: string,
678
+ close: string,
679
+ quads: ReadonlyArray<Term.Quad>,
680
+ level: number,
681
+ ): string {
682
+ const single = this.predicateObjectList(quads, level + 1);
683
+ if (!single.includes('\n') && single.length <= 60) return `${open} ${single} ${close}`;
684
+ return `${open}\n${this.pad(level + 1)}${single}\n${this.pad(level)}${close}`;
685
+ }
686
+
687
+ private object(o: Term.Object, level: number): string {
688
+ if (Term.isBlankNode(o)) {
689
+ const items = MutableHashMap.get(this.plan.lists, o.value);
690
+ if (Option.isSome(items) && !MutableHashSet.has(this.rendered, o.value)) {
691
+ MutableHashSet.add(this.rendered, o.value);
692
+ const rendered = items.value.map((item) => this.object(item, level));
693
+ const oneLine = `( ${rendered.join(' ')} )`;
694
+ return oneLine.length <= 80 && !oneLine.includes('\n')
695
+ ? oneLine
696
+ : `(\n${rendered.map((r) => this.pad(level + 1) + r).join('\n')}\n${this.pad(level)})`;
697
+ }
698
+ if (
699
+ MutableHashSet.has(this.plan.inline, o.value) &&
700
+ !MutableHashSet.has(this.rendered, o.value)
701
+ ) {
702
+ MutableHashSet.add(this.rendered, o.value);
703
+ const own = listAt(this.plan.bySubject, o.key).filter((x) => !this.plan.consumed.has(x));
704
+ if (Arr.isReadonlyArrayEmpty(own)) return '[]';
705
+ const only = own.length === 1 ? Arr.head(own) : Option.none<Term.Quad>();
706
+ if (
707
+ Option.isSome(only) &&
708
+ only.value.predicate.value === RDF_REIFIES &&
709
+ Term.isTriple(only.value.object) &&
710
+ !Term.isTriple(only.value.object.subject)
711
+ ) {
712
+ // A blank node whose only statement reifies a triple: `<< s p o >>`.
713
+ return this.reifiedTriple(only.value.object);
714
+ }
715
+ return this.bracketed('[', ']', own, level);
716
+ }
717
+ }
718
+ if (Term.isNamedNode(o) && o.value === RDF_NIL) return '()';
719
+ return this.term(o);
720
+ }
721
+
722
+ private reifiedTriple(t: Term.Triple): string {
723
+ return `<< ${this.term(t.subject)} ${this.predicate(t.predicate)} ${this.term(t.object)} >>`;
724
+ }
725
+
726
+ private predicate(p: Term.NamedNode): string {
727
+ return p.value === RDF_TYPE ? 'a' : this.iri(p.value);
728
+ }
729
+
730
+ /** Renders a term without any abbreviation that depends on context. */
731
+ term(t: Term.Term): string {
732
+ // Plain guards rather than a `Match`: this runs for every term written
733
+ if (Term.isNamedNode(t)) return this.iri(t.value);
734
+ if (Term.isBlankNode(t)) return `_:${this.label(t.value)}`;
735
+ if (Term.isLiteral(t)) return this.literal(t);
736
+ if (Term.isTriple(t)) {
737
+ return `<<( ${this.term(t.subject)} ${this.predicate(t.predicate)} ${this.term(t.object)} )>>`;
738
+ }
739
+ throw new SerializeFailure(`Cannot serialise ${t._tag}`);
740
+ }
741
+
742
+ /** Output labels are assigned in order of first appearance. */
743
+ private label(value: string): string {
744
+ if (!this.relabel) return Lexical.blankNodeLabel(value);
745
+ const found = MutableHashMap.get(this.labels, value);
746
+ if (Option.isSome(found)) return found.value;
747
+ const label = `b${MutableHashMap.size(this.labels)}`;
748
+ MutableHashMap.set(this.labels, value, label);
749
+ return label;
750
+ }
751
+
752
+ private literal(l: Term.Literal): string {
753
+ const dt = l.datatype.value;
754
+ if (l.language === '') {
755
+ if (
756
+ (dt === XSD_INTEGER && INTEGER.test(l.value)) ||
757
+ (dt === XSD_DECIMAL && DECIMAL.test(l.value)) ||
758
+ (dt === XSD_DOUBLE && DOUBLE.test(l.value)) ||
759
+ (dt === XSD_BOOLEAN && (l.value === 'true' || l.value === 'false'))
760
+ ) {
761
+ return l.value;
762
+ }
763
+ }
764
+ const lexical = quoteString(l.value);
765
+ if (l.language !== '') {
766
+ const language = l.language.toLowerCase();
767
+ return l.direction === undefined
768
+ ? `${lexical}@${language}`
769
+ : `${lexical}@${language}--${l.direction}`;
770
+ }
771
+ if (dt === Term.XSD_STRING) return lexical;
772
+ return `${lexical}^^${this.iri(dt)}`;
773
+ }
774
+
775
+ iri(iri: string): string {
776
+ if (!Lexical.isWritableIri(iri)) throw new SerializeFailure(`Invalid or relative IRI <${iri}>`);
777
+ // The longest namespace whose local part can be written as a prefixed name
778
+ const best = this.byLength.find(
779
+ (c) => iri.startsWith(c.ns) && Option.isSome(encodeLocalName(iri.slice(c.ns.length))),
780
+ );
781
+ if (best !== undefined) {
782
+ this.usedPrefixes[best.index] = true;
783
+ return `${best.prefix}:${Option.getOrElse(encodeLocalName(iri.slice(best.ns.length)), () => '')}`;
784
+ }
785
+ if (Option.isSome(this.options.baseIri)) {
786
+ const relative = Iri.relativize(iri, this.options.baseIri.value);
787
+ if (Option.isSome(relative)) return `<${Term.escapeIri(relative.value)}>`;
788
+ }
789
+ return `<${Term.escapeIri(iri)}>`;
790
+ }
791
+ }
792
+
793
+ /** Term kinds in writing order; anything else (a variable) sorts last. */
794
+ const tagRank: Record.ReadonlyRecord<string, number> = {
795
+ DefaultGraph: 0,
796
+ NamedNode: 1,
797
+ BlankNode: 2,
798
+ Literal: 3,
799
+ Triple: 4,
800
+ };
801
+
802
+ /** The value of a numeric literal, or `NaN`. */
803
+ const numericValue = (l: Term.Literal): number => {
804
+ const dt = l.datatype.value;
805
+ return dt === XSD_INTEGER || dt === XSD_DECIMAL || dt === XSD_DOUBLE ? Number(l.value) : NaN;
806
+ };
807
+
808
+ const compareTerms: Order.Order<Term.Term> = (a, b) => {
809
+ const ra = tagRank[a._tag] ?? 5;
810
+ const rb = tagRank[b._tag] ?? 5;
811
+ if (ra !== rb) return ra < rb ? -1 : 1;
812
+ if (Term.isLiteral(a) && Term.isLiteral(b)) {
813
+ const na = numericValue(a);
814
+ const nb = numericValue(b);
815
+ if (!Number.isNaN(na) && !Number.isNaN(nb) && na !== nb) return na < nb ? -1 : 1;
816
+ }
817
+ return a.key < b.key ? -1 : a.key > b.key ? 1 : 0;
818
+ };
819
+
820
+ /** Prefix declarations by prefix name. */
821
+ export const byPrefixName: Order.Order<readonly [string, string]> = Order.mapInput(
822
+ Order.String,
823
+ ([prefix]: readonly [string, string]) => prefix,
824
+ );
825
+
826
+ /** Counts the namespaces of the IRIs in `t` (and in its datatype and triple terms). */
827
+ const countNamespaces = (
828
+ t: Term.Term,
829
+ counts: MutableHashMap.MutableHashMap<string, { count: number }>,
830
+ ): void => {
831
+ // Plain guards rather than a `Match`: this runs for every term of every quad
832
+ if (Term.isNamedNode(t)) {
833
+ const i = Math.max(t.value.lastIndexOf('#'), t.value.lastIndexOf('/'));
834
+ if (i <= 0) return;
835
+ const ns = t.value.slice(0, i + 1);
836
+ if (!Lexical.isAbsoluteIri(ns) || Option.isNone(encodeLocalName(t.value.slice(i + 1)))) {
837
+ return;
838
+ }
839
+ const found = MutableHashMap.get(counts, ns);
840
+ if (Option.isSome(found)) found.value.count += 1;
841
+ else MutableHashMap.set(counts, ns, { count: 1 });
842
+ } else if (Term.isLiteral(t)) {
843
+ if (t.language === '' && t.datatype.value !== Term.XSD_STRING) {
844
+ countNamespaces(t.datatype, counts);
845
+ }
846
+ } else if (Term.isTriple(t)) {
847
+ countNamespaces(t.subject, counts);
848
+ countNamespaces(t.predicate, counts);
849
+ countNamespaces(t.object, counts);
850
+ }
851
+ };
852
+
853
+ /** Well-known namespaces by IRI, with their usual prefixes. */
854
+ const knownPrefixes = MutableHashMap.fromIterable(
855
+ Record.toEntries(commonPrefixes).map(([p, ns]): readonly [string, string] => [ns, p]),
856
+ );
857
+
858
+ /**
859
+ * Finds namespaces worth declaring: well-known vocabularies that are used,
860
+ * plus any namespace used by at least two IRIs.
861
+ */
862
+ const detectPrefixes = (
863
+ quads: ReadonlyArray<Term.Quad>,
864
+ baseIri: Option.Option<string>,
865
+ ): Array<readonly [string, string]> => {
866
+ // Namespaces under the base IRI are better written as relative IRIs.
867
+ const baseDir = Option.map(baseIri, (iri) => iri.slice(0, iri.lastIndexOf('/') + 1));
868
+ const counts = MutableHashMap.empty<string, { count: number }>();
869
+ quads.forEach((q) => {
870
+ countNamespaces(q.subject, counts);
871
+ countNamespaces(q.predicate, counts);
872
+ countNamespaces(q.object, counts);
873
+ countNamespaces(q.graph, counts);
874
+ });
875
+ let n = 0;
876
+ return Arr.flatMap(
877
+ Arr.sort(
878
+ counts,
879
+ Order.mapInput(Order.String, ([ns]: readonly [string, { count: number }]) => ns),
880
+ ),
881
+ ([ns, { count }]): ReadonlyArray<readonly [string, string]> => {
882
+ const name = MutableHashMap.get(knownPrefixes, ns);
883
+ if (Option.isSome(name)) return [[name.value, ns]];
884
+ if (Option.isSome(baseDir) && baseDir.value.includes('//') && ns.startsWith(baseDir.value)) {
885
+ return [];
886
+ }
887
+ return count >= 2 ? [[`ns${n++}`, ns]] : [];
888
+ },
889
+ );
890
+ };
891
+
892
+ /**
893
+ * Normalises quads for writing: relabels blank nodes deterministically.
894
+ *
895
+ * @internal
896
+ */
897
+ export const prepare = (quads: Iterable<Term.Quad>): ReadonlyArray<Term.Quad> =>
898
+ Array.from(Isomorphism.relabel(Dataset.fromIterable(quads), 'b'));