@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,844 @@
1
+ /**
2
+ * SPARQL query results: the result models returned by the engine and the
3
+ * standard results formats — JSON (`application/sparql-results+json`), XML
4
+ * (`application/sparql-results+xml`), CSV and TSV — with streaming
5
+ * serialisers and parsers, including SPARQL 1.2 triple terms and directional
6
+ * language-tagged strings.
7
+ *
8
+ * @since 0.1.0
9
+ */
10
+ import * as Arr from 'effect/Array';
11
+ import * as Effect from 'effect/Effect';
12
+ import * as Match from 'effect/Match';
13
+ import * as Option from 'effect/Option';
14
+ import * as Predicate from 'effect/Predicate';
15
+ import * as Record from 'effect/Record';
16
+ import * as Result from 'effect/Result';
17
+ import * as Schema from 'effect/Schema';
18
+ import * as Stream from 'effect/Stream';
19
+ import type * as ParseError from '@thomasfosterau/effect-parse/ParseError';
20
+ import * as Parser from '@thomasfosterau/effect-parse/Parser';
21
+ import * as Serialization from '../Serialization.ts';
22
+ import * as Term from '../Term.ts';
23
+ import * as TermJson from '../TermJson.ts';
24
+ import * as XmlParser from '../rdfxml/Xml.ts';
25
+ import * as B from './Bindings.ts';
26
+ import * as JsonText from './internal/json.ts';
27
+ import * as TextResults from './internal/textResults.ts';
28
+
29
+ type Bindings = B.Bindings;
30
+
31
+ // -----------------------------------------------------------------------------
32
+ // Models
33
+ // -----------------------------------------------------------------------------
34
+
35
+ /**
36
+ * The result of a `SELECT` query: the projected variables and a (lazy)
37
+ * stream of solutions.
38
+ *
39
+ * @since 0.1.0
40
+ * @category models
41
+ */
42
+ export interface SelectResult<E = never> {
43
+ readonly _tag: 'Select';
44
+ readonly variables: ReadonlyArray<Term.Variable>;
45
+ readonly bindings: Stream.Stream<Bindings, E>;
46
+ }
47
+
48
+ /**
49
+ * The result of an `ASK` query.
50
+ *
51
+ * @since 0.1.0
52
+ * @category models
53
+ */
54
+ export interface AskResult {
55
+ readonly _tag: 'Ask';
56
+ readonly value: boolean;
57
+ }
58
+
59
+ /**
60
+ * The result of a `CONSTRUCT` or `DESCRIBE` query: a (lazy, duplicate-free)
61
+ * stream of triples (as quads in the default graph).
62
+ *
63
+ * @since 0.1.0
64
+ * @category models
65
+ */
66
+ export interface GraphResult<E = never> {
67
+ readonly _tag: 'Graph';
68
+ readonly quads: Stream.Stream<Term.Quad, E>;
69
+ }
70
+
71
+ /**
72
+ * Any query result.
73
+ *
74
+ * @since 0.1.0
75
+ * @category models
76
+ */
77
+ export type QueryResult<E = never> = SelectResult<E> | AskResult | GraphResult<E>;
78
+
79
+ /**
80
+ * A fully materialised solution sequence (e.g. a parsed results document).
81
+ *
82
+ * @since 0.1.0
83
+ * @category models
84
+ */
85
+ export interface ResultSet {
86
+ readonly _tag: 'ResultSet';
87
+ readonly variables: ReadonlyArray<string>;
88
+ readonly bindings: ReadonlyArray<Bindings>;
89
+ }
90
+
91
+ /**
92
+ * A boolean (`ASK`) result document.
93
+ *
94
+ * @since 0.1.0
95
+ * @category models
96
+ */
97
+ export interface BooleanResult {
98
+ readonly _tag: 'Boolean';
99
+ readonly value: boolean;
100
+ }
101
+
102
+ /**
103
+ * A parsed results document.
104
+ *
105
+ * @since 0.1.0
106
+ * @category models
107
+ */
108
+ export type ParsedResult = ResultSet | BooleanResult;
109
+
110
+ /**
111
+ * Materialises a `SELECT` result.
112
+ *
113
+ * @since 0.1.0
114
+ * @category conversions
115
+ */
116
+ export const collect = <E>(result: SelectResult<E>): Effect.Effect<ResultSet, E> =>
117
+ Effect.map(Stream.runCollect(result.bindings), (bindings) => ({
118
+ _tag: 'ResultSet' as const,
119
+ variables: result.variables.map((v) => v.value),
120
+ bindings,
121
+ }));
122
+
123
+ /**
124
+ * Turns a materialised result set back into a streaming `SelectResult`.
125
+ *
126
+ * @since 0.1.0
127
+ * @category conversions
128
+ */
129
+ export const fromResultSet = (set: ResultSet): SelectResult => ({
130
+ _tag: 'Select',
131
+ variables: set.variables.map((v) => Term.variable(v)),
132
+ bindings: Stream.fromIterable(set.bindings),
133
+ });
134
+
135
+ // -----------------------------------------------------------------------------
136
+ // Errors and formats
137
+ // -----------------------------------------------------------------------------
138
+
139
+ /**
140
+ * An error parsing a results document. The text formats (TSV and CSV)
141
+ * report the 1-based `line` and `column` of the error.
142
+ *
143
+ * @since 0.1.0
144
+ * @category errors
145
+ */
146
+ export class ResultsParseError extends Schema.TaggedError<ResultsParseError>()(
147
+ 'ResultsParseError',
148
+ {
149
+ format: Schema.String,
150
+ message: Schema.String,
151
+ line: Schema.optional(Schema.Number),
152
+ column: Schema.optional(Schema.Number),
153
+ },
154
+ ) {}
155
+
156
+ /** The last line of a rendered `ParseError`: what was expected and found. */
157
+ const parseErrorSummary = (error: ParseError.ParseError): string =>
158
+ error.message.slice(error.message.lastIndexOf('\n') + 1);
159
+
160
+ /**
161
+ * Metadata of a results format.
162
+ *
163
+ * @since 0.1.0
164
+ * @category models
165
+ */
166
+ export interface ResultsFormat {
167
+ readonly name: string;
168
+ readonly mediaType: string;
169
+ readonly mediaTypes: ReadonlyArray<string>;
170
+ readonly extensions: ReadonlyArray<string>;
171
+ /** Whether the format can represent boolean (`ASK`) results. */
172
+ readonly booleans: boolean;
173
+ }
174
+
175
+ /**
176
+ * A results format: streaming serialiser and parser.
177
+ *
178
+ * @since 0.1.0
179
+ * @category models
180
+ */
181
+ export interface ResultsCodec {
182
+ readonly format: ResultsFormat;
183
+ /** Serialises a (streaming) select or ask result to text chunks. */
184
+ readonly serialize: <E>(result: SelectResult<E> | AskResult) => Stream.Stream<string, E>;
185
+ /** Serialises a materialised result to a string. */
186
+ readonly serializeString: (result: ParsedResult | AskResult) => string;
187
+ /** Parses a complete document. */
188
+ readonly parse: (input: string) => Effect.Effect<ParsedResult, ResultsParseError>;
189
+ }
190
+
191
+ const toSelect = (result: ParsedResult | AskResult): SelectResult | AskResult =>
192
+ Predicate.isTagged(result, 'ResultSet')
193
+ ? fromResultSet(result)
194
+ : Predicate.isTagged(result, 'Boolean')
195
+ ? { _tag: 'Ask', value: result.value }
196
+ : result;
197
+
198
+ // The chunks come from an in-memory serializer that does not fail, so `runSync` returns.
199
+ const stringify = <E>(chunks: Stream.Stream<string, E>): string =>
200
+ Effect.runSync(Stream.mkString(chunks));
201
+
202
+ const ordered = <E>(
203
+ result: SelectResult<E>,
204
+ row: (b: Bindings, index: number) => string,
205
+ ): Stream.Stream<string, E> => Stream.map(result.bindings, (b, i) => row(b, i));
206
+
207
+ // -----------------------------------------------------------------------------
208
+ // JSON
209
+ // -----------------------------------------------------------------------------
210
+
211
+ /**
212
+ * The JSON encoding of an RDF term in SPARQL results (re-exported from core's
213
+ * `TermJson.GroundTerm`).
214
+ *
215
+ * @since 0.1.0
216
+ * @category json
217
+ */
218
+ export type JsonTerm = TermJson.GroundTerm;
219
+
220
+ /**
221
+ * Schema of an RDF term in SPARQL JSON results (SPARQL 1.2, including
222
+ * triple terms; core's `TermJson.GroundTermSchema`).
223
+ *
224
+ * @since 0.1.0
225
+ * @category json
226
+ */
227
+ export const JsonTermSchema: Schema.Codec<JsonTerm> = TermJson.GroundTermSchema;
228
+
229
+ /**
230
+ * The type `JsonTermSchema` decodes to (the same as `JsonTerm`).
231
+ *
232
+ * @since 0.1.0
233
+ * @category json
234
+ */
235
+ export type JsonTermSchema = typeof JsonTermSchema.Type;
236
+
237
+ /**
238
+ * Schema of a SPARQL JSON results document.
239
+ *
240
+ * @since 0.1.0
241
+ * @category json
242
+ */
243
+ export const JsonResultsSchema = Schema.Struct({
244
+ head: Schema.Struct({
245
+ vars: Schema.optional(Schema.Array(Schema.String)),
246
+ link: Schema.optional(Schema.Array(Schema.String)),
247
+ }),
248
+ results: Schema.optional(
249
+ Schema.Struct({
250
+ bindings: Schema.Array(Schema.Record(Schema.String, JsonTermSchema)),
251
+ }),
252
+ ),
253
+ boolean: Schema.optional(Schema.Boolean),
254
+ });
255
+
256
+ /**
257
+ * @since 0.1.0
258
+ * @category json
259
+ */
260
+ export type JsonResults = typeof JsonResultsSchema.Type;
261
+
262
+ /**
263
+ * The type `JsonResultsSchema` decodes to (the same as `JsonResults`).
264
+ *
265
+ * @since 0.1.0
266
+ * @category json
267
+ */
268
+ export type JsonResultsSchema = typeof JsonResultsSchema.Type;
269
+
270
+ /**
271
+ * Encodes a term as SPARQL JSON (core's `Term.toJson`).
272
+ *
273
+ * @since 0.1.0
274
+ * @category json
275
+ */
276
+ export const termToJson = (t: Term.GroundTerm): JsonTerm => Term.toJson(t);
277
+
278
+ /**
279
+ * Decodes a SPARQL JSON term (core's `Term.fromJson`); the positions of a
280
+ * triple term are trusted.
281
+ *
282
+ * @since 0.1.0
283
+ * @category json
284
+ */
285
+ export const termFromJson = (j: JsonTerm): Term.GroundTerm => Term.fromJson(j);
286
+
287
+ const decodeJsonResults = Schema.decodeUnknownResult(JsonResultsSchema);
288
+
289
+ // Any JSON value as its text (exactly `JSON.stringify`).
290
+ const encodeJsonText = Schema.encodeSync(Schema.fromJsonString(Schema.Unknown));
291
+
292
+ const jsonFormat: ResultsFormat = {
293
+ name: 'SPARQL Results JSON',
294
+ mediaType: 'application/sparql-results+json',
295
+ mediaTypes: ['application/sparql-results+json', 'application/json'],
296
+ extensions: ['srj', 'json'],
297
+ booleans: true,
298
+ };
299
+
300
+ const serializeJson = <E>(result: SelectResult<E> | AskResult): Stream.Stream<string, E> => {
301
+ if (Predicate.isTagged(result, 'Ask')) {
302
+ return Stream.succeed(`{"head":{},"boolean":${result.value}}\n`);
303
+ }
304
+ const vars = result.variables.map((v) => v.value);
305
+ const head = `{"head":{"vars":${encodeJsonText(vars)}},"results":{"bindings":[`;
306
+ return Stream.concat(
307
+ Stream.concat(
308
+ Stream.succeed(head),
309
+ ordered(result, (b, i) => {
310
+ const row: Record<string, JsonTerm> = {};
311
+ vars.forEach((v) => {
312
+ const t = b.map.get(v);
313
+ if (t !== undefined) row[v] = termToJson(t);
314
+ });
315
+ // Variables bound but not projected are not serialised.
316
+ return `${i > 0 ? ',' : ''}\n${encodeJsonText(row)}`;
317
+ }),
318
+ ),
319
+ Stream.succeed('\n]}}\n'),
320
+ );
321
+ };
322
+
323
+ const parseJson = (input: string): Effect.Effect<ParsedResult, ResultsParseError> =>
324
+ Effect.suspend((): Effect.Effect<ParsedResult, ResultsParseError> => {
325
+ const err = (message: string) =>
326
+ Effect.fail(new ResultsParseError({ format: 'json', message }));
327
+ const raw = JsonText.parse(input);
328
+ if (Result.isFailure(raw)) return err(`Invalid JSON: ${raw.failure}`);
329
+ const decoded = decodeJsonResults(raw.success);
330
+ if (Result.isFailure(decoded)) return err(decoded.failure.message);
331
+ const doc = decoded.success;
332
+ if (doc.boolean !== undefined)
333
+ return Effect.succeed({ _tag: 'Boolean', value: doc.boolean } as const);
334
+ if (doc.results === undefined) return err('Missing results');
335
+ return Effect.succeed({
336
+ _tag: 'ResultSet',
337
+ variables: doc.head.vars ?? [],
338
+ bindings: doc.results.bindings.map((row) =>
339
+ B.fromEntries(Record.toEntries(row).map(([k, v]) => [k, termFromJson(v)] as const)),
340
+ ),
341
+ } as const);
342
+ });
343
+
344
+ /**
345
+ * SPARQL 1.1 Query Results JSON Format.
346
+ *
347
+ * @since 0.1.0
348
+ * @category formats
349
+ */
350
+ export const Json: ResultsCodec = {
351
+ format: jsonFormat,
352
+ serialize: serializeJson,
353
+ serializeString: (r) => stringify(serializeJson(toSelect(r))),
354
+ parse: parseJson,
355
+ };
356
+
357
+ // -----------------------------------------------------------------------------
358
+ // XML
359
+ // -----------------------------------------------------------------------------
360
+
361
+ const SRX = 'http://www.w3.org/2005/sparql-results#';
362
+ const ITS = 'http://www.w3.org/2005/11/its';
363
+
364
+ const xmlLiteral = (l: Term.Literal): string => {
365
+ const attrs =
366
+ l.language !== ''
367
+ ? ` xml:lang="${XmlParser.escapeAttribute(l.language)}"${l.direction !== undefined ? ` its:dir="${l.direction}"` : ''}`
368
+ : l.datatype.value !== Term.XSD_STRING
369
+ ? ` datatype="${XmlParser.escapeAttribute(l.datatype.value)}"`
370
+ : '';
371
+ return `<literal${attrs}>${XmlParser.escapeText(l.value)}</literal>`;
372
+ };
373
+
374
+ /** A term as an XML results element. Plain branches: it runs for every term of every row. */
375
+ const xmlTerm = (t: Term.GroundTerm): string => {
376
+ if (Term.isLiteral(t)) return xmlLiteral(t);
377
+ if (Term.isNamedNode(t)) return `<uri>${XmlParser.escapeText(t.value)}</uri>`;
378
+ if (Term.isBlankNode(t)) return `<bnode>${XmlParser.escapeText(t.value)}</bnode>`;
379
+ return `<triple><subject>${xmlTerm(t.subject)}</subject><predicate>${xmlTerm(t.predicate)}</predicate><object>${xmlTerm(t.object)}</object></triple>`;
380
+ };
381
+
382
+ const serializeXml = <E>(result: SelectResult<E> | AskResult): Stream.Stream<string, E> => {
383
+ const open = `<?xml version="1.0"?>\n<sparql xmlns="${SRX}" xmlns:its="${ITS}">\n`;
384
+ if (Predicate.isTagged(result, 'Ask')) {
385
+ return Stream.succeed(`${open}<head/>\n<boolean>${result.value}</boolean>\n</sparql>\n`);
386
+ }
387
+ const vars = result.variables.map((v) => v.value);
388
+ const head = `${open}<head>${vars.map((v) => `<variable name="${XmlParser.escapeAttribute(v)}"/>`).join('')}</head>\n<results>\n`;
389
+ return Stream.concat(
390
+ Stream.concat(
391
+ Stream.succeed(head),
392
+ ordered(result, (b) => {
393
+ const cells = vars.map((v) => {
394
+ const t = b.map.get(v);
395
+ return t === undefined
396
+ ? ''
397
+ : `<binding name="${XmlParser.escapeAttribute(v)}">${xmlTerm(t)}</binding>`;
398
+ });
399
+ return `<result>${cells.join('')}</result>\n`;
400
+ }),
401
+ ),
402
+ Stream.succeed('</results>\n</sparql>\n'),
403
+ );
404
+ };
405
+
406
+ const elements = (e: XmlParser.Element): Array<XmlParser.Element> =>
407
+ e.children.filter((c): c is XmlParser.Element => Predicate.isTagged(c, 'Element'));
408
+
409
+ const textOf = (e: XmlParser.Element): string =>
410
+ e.children.map((c) => (Predicate.isTagged(c, 'Text') ? c.value : '')).join('');
411
+
412
+ /** An attribute's value, by local name (and namespace, when given). */
413
+ const attribute = (e: XmlParser.Element, local: string, ns?: string): Option.Option<string> =>
414
+ Option.map(
415
+ Arr.findFirst(
416
+ e.attributes,
417
+ (a) => a.localName === local && (ns === undefined || a.namespace === ns),
418
+ ),
419
+ (a) => a.value,
420
+ );
421
+
422
+ const XML_NS = 'http://www.w3.org/XML/1998/namespace';
423
+
424
+ const xmlTriplePart = (e: XmlParser.Element, name: string): Term.GroundTerm => {
425
+ const p = elements(e).find((c) => c.localName === name);
426
+ const inner = p === undefined ? undefined : elements(p)[0];
427
+ if (inner === undefined) {
428
+ throw new ResultsParseError({ format: 'xml', message: `Missing ${name} in triple term` });
429
+ }
430
+ return xmlToTerm(inner);
431
+ };
432
+
433
+ const xmlToTerm = (e: XmlParser.Element): Term.GroundTerm => {
434
+ return Match.value(e.localName).pipe(
435
+ Match.when('uri', (): Term.GroundTerm => Term.namedNode(textOf(e))),
436
+ Match.when('bnode', () => Term.blankNode(textOf(e))),
437
+ Match.when('literal', () => {
438
+ const lang = Option.getOrElse(attribute(e, 'lang', XML_NS), () => '');
439
+ const dir = Option.orElse(attribute(e, 'dir', ITS), () => attribute(e, 'dir'));
440
+ const datatype = attribute(e, 'datatype');
441
+ if (lang !== '') {
442
+ return Option.isSome(dir) && (dir.value === 'ltr' || dir.value === 'rtl')
443
+ ? Term.literal(textOf(e), { language: lang, direction: dir.value })
444
+ : Term.literal(textOf(e), lang);
445
+ }
446
+ return Option.isSome(datatype)
447
+ ? Term.literal(textOf(e), Term.namedNode(datatype.value))
448
+ : Term.literal(textOf(e));
449
+ }),
450
+ // The XML results grammar puts a subject, an IRI predicate and an object in a triple
451
+ // term's three parts; like the other formats, the parts are not checked again.
452
+ Match.when('triple', () =>
453
+ Term.triple<any, any, any>(
454
+ xmlTriplePart(e, 'subject'),
455
+ xmlTriplePart(e, 'predicate'),
456
+ xmlTriplePart(e, 'object'),
457
+ ),
458
+ ),
459
+ Match.orElse((name) => {
460
+ throw new ResultsParseError({
461
+ format: 'xml',
462
+ message: `Unexpected element <${name}>`,
463
+ });
464
+ }),
465
+ );
466
+ };
467
+
468
+ const parseXml = (input: string): Effect.Effect<ParsedResult, ResultsParseError> =>
469
+ Effect.suspend((): Effect.Effect<ParsedResult, ResultsParseError> => {
470
+ const doc = XmlParser.parseResult(input);
471
+ if (Result.isFailure(doc)) {
472
+ return Effect.fail(new ResultsParseError({ format: 'xml', message: doc.failure.message }));
473
+ }
474
+ return Effect.try({
475
+ try: (): ParsedResult => {
476
+ const root = doc.success.root;
477
+ const head = elements(root).find((c) => c.localName === 'head');
478
+ const vars =
479
+ head === undefined
480
+ ? []
481
+ : elements(head)
482
+ .filter((c) => c.localName === 'variable')
483
+ .map((c) => Option.getOrElse(attribute(c, 'name'), () => ''));
484
+ const boolean = elements(root).find((c) => c.localName === 'boolean');
485
+ if (boolean !== undefined) {
486
+ return { _tag: 'Boolean', value: textOf(boolean).trim() === 'true' } as const;
487
+ }
488
+ const results = elements(root).find((c) => c.localName === 'results');
489
+ const bindings = (results === undefined ? [] : elements(results)).map((r) =>
490
+ B.fromEntries(
491
+ elements(r)
492
+ .filter((c) => c.localName === 'binding')
493
+ .map(
494
+ (c) =>
495
+ [
496
+ Option.getOrElse(attribute(c, 'name'), () => ''),
497
+ xmlToTerm(
498
+ Option.getOrThrowWith(
499
+ Arr.head(elements(c)),
500
+ () =>
501
+ new ResultsParseError({
502
+ format: 'xml',
503
+ message: 'Missing term in binding',
504
+ }),
505
+ ),
506
+ ),
507
+ ] as const,
508
+ ),
509
+ ),
510
+ );
511
+ return { _tag: 'ResultSet', variables: vars, bindings } as const;
512
+ },
513
+ catch: (cause) =>
514
+ new ResultsParseError({
515
+ format: 'xml',
516
+ message: Predicate.isError(cause) ? cause.message : String(cause),
517
+ }),
518
+ });
519
+ });
520
+
521
+ /**
522
+ * SPARQL Query Results XML Format.
523
+ *
524
+ * @since 0.1.0
525
+ * @category formats
526
+ */
527
+ export const Xml: ResultsCodec = {
528
+ format: {
529
+ name: 'SPARQL Results XML',
530
+ mediaType: 'application/sparql-results+xml',
531
+ mediaTypes: ['application/sparql-results+xml', 'application/xml', 'text/xml'],
532
+ extensions: ['srx', 'xml'],
533
+ booleans: true,
534
+ },
535
+ serialize: serializeXml,
536
+ serializeString: (r) => stringify(serializeXml(toSelect(r))),
537
+ parse: parseXml,
538
+ };
539
+
540
+ // -----------------------------------------------------------------------------
541
+ // TSV
542
+ // -----------------------------------------------------------------------------
543
+
544
+ const XSD = 'http://www.w3.org/2001/XMLSchema#';
545
+
546
+ /**
547
+ * Formats a term in the Turtle / SPARQL syntax used by TSV results.
548
+ *
549
+ * @since 0.1.0
550
+ * @category tsv
551
+ */
552
+ export const termToTsv = (t: Term.GroundTerm): string => {
553
+ if (Term.isLiteral(t) && t.language === '') {
554
+ const dt = t.datatype.value;
555
+ if (dt === `${XSD}integer` && /^[+-]?\d+$/.test(t.value)) return t.value;
556
+ if (dt === `${XSD}decimal` && /^[+-]?\d*\.\d+$/.test(t.value)) return t.value;
557
+ if (dt === `${XSD}double` && /^[+-]?(\d+\.?\d*|\.\d+)[eE][+-]?\d+$/.test(t.value))
558
+ return t.value;
559
+ if (dt === `${XSD}boolean` && (t.value === 'true' || t.value === 'false')) return t.value;
560
+ }
561
+ if (Term.isTriple(t)) {
562
+ return `<<( ${termToTsv(t.subject)} ${termToTsv(t.predicate)} ${termToTsv(t.object)} )>>`;
563
+ }
564
+ return t.key.replace(/\t/g, '\\t');
565
+ };
566
+
567
+ /**
568
+ * Parses a term written in the Turtle / SPARQL syntax used by TSV results
569
+ * (IRIs in `<>`, blank nodes, quoted literals, numbers, booleans, triple
570
+ * terms).
571
+ *
572
+ * @since 0.1.0
573
+ * @category tsv
574
+ */
575
+ export const parseTerm = (text: string): Option.Option<Term.GroundTerm> =>
576
+ Result.getSuccess(Parser.parse(TextResults.groundTerm, text));
577
+
578
+ /** The layout of a delimited (TSV / CSV) results document. */
579
+ interface Delimited {
580
+ readonly separator: string;
581
+ readonly newline: string;
582
+ readonly header: (variable: string) => string;
583
+ readonly cell: (t: Term.GroundTerm) => string;
584
+ }
585
+
586
+ const serializeDelimited =
587
+ (layout: Delimited) =>
588
+ <E>(result: SelectResult<E> | AskResult): Stream.Stream<string, E> => {
589
+ if (Predicate.isTagged(result, 'Ask'))
590
+ return Stream.succeed(`${result.value}${layout.newline}`);
591
+ const vars = result.variables.map((v) => v.value);
592
+ return Stream.concat(
593
+ Stream.succeed(`${vars.map(layout.header).join(layout.separator)}${layout.newline}`),
594
+ ordered(result, (b) => {
595
+ const cells = vars.map((v) => {
596
+ const t = b.map.get(v);
597
+ return t === undefined ? '' : layout.cell(t);
598
+ });
599
+ return `${cells.join(layout.separator)}${layout.newline}`;
600
+ }),
601
+ );
602
+ };
603
+
604
+ const serializeTsv = serializeDelimited({
605
+ separator: '\t',
606
+ newline: '\n',
607
+ header: (v) => `?${v}`,
608
+ cell: termToTsv,
609
+ });
610
+
611
+ const splitLines = (input: string): Array<string> => {
612
+ const lines = input.split(/\r?\n/);
613
+ if (lines[lines.length - 1] === '') lines.pop();
614
+ return lines;
615
+ };
616
+
617
+ const parseTsv = (input: string): Effect.Effect<ParsedResult, ResultsParseError> =>
618
+ Effect.suspend((): Effect.Effect<ParsedResult, ResultsParseError> => {
619
+ const [header, ...rows] = splitLines(input);
620
+ if (header === undefined) {
621
+ return Effect.fail(new ResultsParseError({ format: 'tsv', message: 'Empty document' }));
622
+ }
623
+ const first = header.trim();
624
+ if (first === 'true' || first === 'false') {
625
+ return Effect.succeed({ _tag: 'Boolean', value: first === 'true' } as const);
626
+ }
627
+ const vars = header.split('\t').map((v) => v.trim().replace(/^[?$]/, ''));
628
+ const bindings: Array<Bindings> = [];
629
+ // The first invalid cell, if any (the rows before it are parsed on the way).
630
+ const failure = Arr.findFirst(rows, (line, index) =>
631
+ Result.match(tsvRow(vars, line, index + 2), {
632
+ onFailure: Option.some,
633
+ onSuccess: (b) => {
634
+ bindings.push(b);
635
+ return Option.none();
636
+ },
637
+ }),
638
+ );
639
+ return Option.isSome(failure)
640
+ ? Effect.fail(failure.value)
641
+ : Effect.succeed({ _tag: 'ResultSet', variables: vars, bindings } as const);
642
+ });
643
+
644
+ /** A TSV row (on 1-based line `line`) as a solution, or the error at its first invalid cell. */
645
+ const tsvRow = (
646
+ vars: ReadonlyArray<string>,
647
+ line: string,
648
+ lineNumber: number,
649
+ ): Result.Result<Bindings, ResultsParseError> => {
650
+ const cells = line.split('\t');
651
+ const entries: Array<readonly [string, Term.GroundTerm]> = [];
652
+ let offset = 0;
653
+ const failure = Arr.findFirst(vars, (v, i) => {
654
+ const cell = cells[i] ?? '';
655
+ const start = offset;
656
+ offset += cell.length + 1;
657
+ if (cell.trim() === '') return Option.none();
658
+ const t = Parser.parse(TextResults.groundTerm, cell);
659
+ if (Result.isFailure(t)) {
660
+ return Option.some(
661
+ new ResultsParseError({
662
+ format: 'tsv',
663
+ message: `Invalid term: ${cell.trim()}: ${parseErrorSummary(t.failure)}`,
664
+ line: lineNumber,
665
+ column: start + t.failure.position.column,
666
+ }),
667
+ );
668
+ }
669
+ entries.push([v, t.success]);
670
+ return Option.none();
671
+ });
672
+ return Option.isSome(failure)
673
+ ? Result.fail(failure.value)
674
+ : Result.succeed(B.fromEntries(entries));
675
+ };
676
+
677
+ /**
678
+ * SPARQL 1.1 Query Results TSV Format.
679
+ *
680
+ * @since 0.1.0
681
+ * @category formats
682
+ */
683
+ export const Tsv: ResultsCodec = {
684
+ format: {
685
+ name: 'SPARQL Results TSV',
686
+ mediaType: 'text/tab-separated-values',
687
+ mediaTypes: ['text/tab-separated-values'],
688
+ extensions: ['tsv'],
689
+ booleans: true,
690
+ },
691
+ serialize: serializeTsv,
692
+ serializeString: (r) => stringify(serializeTsv(toSelect(r))),
693
+ parse: parseTsv,
694
+ };
695
+
696
+ // -----------------------------------------------------------------------------
697
+ // CSV
698
+ // -----------------------------------------------------------------------------
699
+
700
+ const csvField = (s: string): string => (/[",\r\n]/.test(s) ? `"${s.replace(/"/g, '""')}"` : s);
701
+
702
+ /** A term as a CSV cell. Plain branches: it runs for every term of every row. */
703
+ const csvTerm = (t: Term.GroundTerm): string => {
704
+ if (Term.isNamedNode(t) || Term.isLiteral(t)) return t.value;
705
+ if (Term.isBlankNode(t)) return `_:${t.value}`;
706
+ return `<<( ${termToTsv(t.subject)} ${termToTsv(t.predicate)} ${termToTsv(t.object)} )>>`;
707
+ };
708
+
709
+ const serializeCsv = serializeDelimited({
710
+ separator: ',',
711
+ newline: '\r\n',
712
+ header: csvField,
713
+ cell: (t) => csvField(csvTerm(t)),
714
+ });
715
+
716
+ /**
717
+ * Interprets a CSV cell. The CSV format is lossy: blank nodes are recognised
718
+ * by `_:`, absolute IRIs (with a scheme) become IRIs, numbers and booleans
719
+ * become typed literals and everything else a plain string.
720
+ */
721
+ const csvCell = (cell: string): Term.GroundTerm => {
722
+ if (cell.startsWith('_:')) return Term.blankNode(cell.slice(2));
723
+ if (/^[a-zA-Z][a-zA-Z0-9+.-]*:[^\s]*$/.test(cell) && !/^\d/.test(cell)) {
724
+ return Term.namedNode(cell);
725
+ }
726
+ if (/^[+-]?\d+$/.test(cell)) return Term.literal(cell, Term.namedNode(`${XSD}integer`));
727
+ if (/^[+-]?\d*\.\d+$/.test(cell)) return Term.literal(cell, Term.namedNode(`${XSD}decimal`));
728
+ if (/^[+-]?(\d+\.?\d*|\.\d+)[eE][+-]?\d+$/.test(cell)) {
729
+ return Term.literal(cell, Term.namedNode(`${XSD}double`));
730
+ }
731
+ return Term.literal(cell);
732
+ };
733
+
734
+ const parseCsv = (input: string): Effect.Effect<ParsedResult, ResultsParseError> =>
735
+ Effect.suspend((): Effect.Effect<ParsedResult, ResultsParseError> => {
736
+ const parsed = Parser.parse(TextResults.csvRows, input);
737
+ if (Result.isFailure(parsed)) {
738
+ const { line, column } = parsed.failure.position;
739
+ return Effect.fail(
740
+ new ResultsParseError({
741
+ format: 'csv',
742
+ message: parseErrorSummary(parsed.failure),
743
+ line,
744
+ column,
745
+ }),
746
+ );
747
+ }
748
+ const [first, ...rows] = parsed.success;
749
+ if (first === undefined) {
750
+ return Effect.fail(new ResultsParseError({ format: 'csv', message: 'Empty document' }));
751
+ }
752
+ const [only, ...others] = first;
753
+ if (
754
+ only !== undefined &&
755
+ Arr.isReadonlyArrayEmpty(others) &&
756
+ (only.value === 'true' || only.value === 'false')
757
+ ) {
758
+ return Effect.succeed({ _tag: 'Boolean', value: only.value === 'true' } as const);
759
+ }
760
+ const vars = first.map((c) => c.value);
761
+ const bindings = rows.map((r) =>
762
+ B.fromEntries(
763
+ vars.map((v, i) => {
764
+ const cell = r[i];
765
+ return [
766
+ v,
767
+ cell === undefined || (cell.value === '' && !cell.quoted)
768
+ ? undefined
769
+ : csvCell(cell.value),
770
+ ] as const;
771
+ }),
772
+ ),
773
+ );
774
+ return Effect.succeed({ _tag: 'ResultSet', variables: vars, bindings } as const);
775
+ });
776
+
777
+ /**
778
+ * SPARQL 1.1 Query Results CSV Format (lossy: parsing recovers IRIs, blank
779
+ * nodes, numbers and strings heuristically).
780
+ *
781
+ * @since 0.1.0
782
+ * @category formats
783
+ */
784
+ export const Csv: ResultsCodec = {
785
+ format: {
786
+ name: 'SPARQL Results CSV',
787
+ mediaType: 'text/csv',
788
+ mediaTypes: ['text/csv'],
789
+ extensions: ['csv'],
790
+ booleans: true,
791
+ },
792
+ serialize: serializeCsv,
793
+ serializeString: (r) => stringify(serializeCsv(toSelect(r))),
794
+ parse: parseCsv,
795
+ };
796
+
797
+ // -----------------------------------------------------------------------------
798
+ // Registry and negotiation
799
+ // -----------------------------------------------------------------------------
800
+
801
+ /**
802
+ * All results formats, in order of preference.
803
+ *
804
+ * @since 0.1.0
805
+ * @category formats
806
+ */
807
+ export const codecs: ReadonlyArray<ResultsCodec> = [Json, Xml, Csv, Tsv];
808
+
809
+ /**
810
+ * Finds a results codec for a media type (parameters are ignored).
811
+ *
812
+ * @since 0.1.0
813
+ * @category formats
814
+ */
815
+ export const codecFor = (mediaType: string): Option.Option<ResultsCodec> => {
816
+ const mt = (mediaType.split(';')[0] ?? '').trim().toLowerCase();
817
+ return Option.fromNullishOr(codecs.find((c) => c.format.mediaTypes.includes(mt)));
818
+ };
819
+
820
+ /**
821
+ * Finds a results codec for a file extension.
822
+ *
823
+ * @since 0.1.0
824
+ * @category formats
825
+ */
826
+ export const codecForExtension = (extension: string): Option.Option<ResultsCodec> => {
827
+ const ext = extension.replace(/^\./, '').toLowerCase();
828
+ return Option.fromNullishOr(codecs.find((c) => c.format.extensions.includes(ext)));
829
+ };
830
+
831
+ /**
832
+ * Chooses the best results codec for an HTTP `Accept` header.
833
+ *
834
+ * @since 0.1.0
835
+ * @category formats
836
+ */
837
+ export const negotiate = (accept: string | undefined): Option.Option<ResultsCodec> =>
838
+ Option.flatMap(
839
+ Serialization.negotiate(
840
+ accept,
841
+ codecs.flatMap((c) => c.format.mediaTypes),
842
+ ),
843
+ codecFor,
844
+ );