@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.
- package/LICENSE +21 -0
- package/README.md +2251 -2
- package/dist/Algebra-CGG4oae3.mjs +433 -0
- package/dist/Algebra-CGG4oae3.mjs.map +1 -0
- package/dist/Algebra-uGsIEOUA.d.mts +446 -0
- package/dist/Ast-CPRZmBvk.mjs +552 -0
- package/dist/Ast-CPRZmBvk.mjs.map +1 -0
- package/dist/Ast-vcw2W-lf.d.mts +827 -0
- package/dist/Bindings-Ck3m7JRC.mjs +249 -0
- package/dist/Bindings-Ck3m7JRC.mjs.map +1 -0
- package/dist/Bindings-DiKpBd7f.d.mts +153 -0
- package/dist/ClientErrors-CpXdFX5u.mjs +128 -0
- package/dist/ClientErrors-CpXdFX5u.mjs.map +1 -0
- package/dist/ClientErrors-D4IZHUM-.d.mts +101 -0
- package/dist/ClientFormats-CXomkXLV.mjs +73 -0
- package/dist/ClientFormats-CXomkXLV.mjs.map +1 -0
- package/dist/ClientFormats-Dm57ZPwR.d.mts +36 -0
- package/dist/Csv2Json-DynEcwCh.mjs +194 -0
- package/dist/Csv2Json-DynEcwCh.mjs.map +1 -0
- package/dist/Csv2Json-aXNVDoXQ.d.mts +40 -0
- package/dist/Csv2Rdf-8maXP6mt.d.mts +41 -0
- package/dist/Csv2Rdf-DuSEkaKE.mjs +161 -0
- package/dist/Csv2Rdf-DuSEkaKE.mjs.map +1 -0
- package/dist/Dataset-BlmlcI7J.mjs +782 -0
- package/dist/Dataset-BlmlcI7J.mjs.map +1 -0
- package/dist/Dataset-DS3ESOcO.d.mts +426 -0
- package/dist/Dataset.d.mts +2 -0
- package/dist/Dataset.mjs +1 -0
- package/dist/Datatype-CxMpamHC.d.mts +212 -0
- package/dist/Datatype-DQvkNkiH.mjs +1001 -0
- package/dist/Datatype-DQvkNkiH.mjs.map +1 -0
- package/dist/Dialect-8ChFj5EX.d.mts +113 -0
- package/dist/Dialect-CzVH38uo.mjs +165 -0
- package/dist/Dialect-CzVH38uo.mjs.map +1 -0
- package/dist/DocumentLoader-D3lZREnB.mjs +346 -0
- package/dist/DocumentLoader-D3lZREnB.mjs.map +1 -0
- package/dist/DocumentLoader-ZUCEVrW5.d.mts +178 -0
- package/dist/DublinCore-AnwqxRx6.mjs +137 -0
- package/dist/DublinCore-AnwqxRx6.mjs.map +1 -0
- package/dist/DublinCore-Dq-tVA5d.d.mts +119 -0
- package/dist/Engine-CYPB3g4h.d.mts +144 -0
- package/dist/Engine-DF8PN7g-.mjs +872 -0
- package/dist/Engine-DF8PN7g-.mjs.map +1 -0
- package/dist/Errors-CMdV1RhU.mjs +37 -0
- package/dist/Errors-CMdV1RhU.mjs.map +1 -0
- package/dist/Errors-u2bDjUeM.d.mts +30 -0
- package/dist/Evaluator-DEsU4d1o.d.mts +50 -0
- package/dist/Evaluator-DOY2-guC.mjs +281 -0
- package/dist/Evaluator-DOY2-guC.mjs.map +1 -0
- package/dist/Exif-CpqniYQd.d.mts +78 -0
- package/dist/Exif-DjkCfEB-.mjs +89 -0
- package/dist/Exif-DjkCfEB-.mjs.map +1 -0
- package/dist/Expression-BIMMvduQ.mjs +230 -0
- package/dist/Expression-BIMMvduQ.mjs.map +1 -0
- package/dist/Expression-W8A9cyX7.d.mts +89 -0
- package/dist/Extract-Bop85jES.mjs +220 -0
- package/dist/Extract-Bop85jES.mjs.map +1 -0
- package/dist/Extract-C_pCvuTC.d.mts +88 -0
- package/dist/Federation-BcNrozc1.d.mts +52 -0
- package/dist/Federation-CHScBkaK.mjs +130 -0
- package/dist/Federation-CHScBkaK.mjs.map +1 -0
- package/dist/Functions-AvjNcId_.mjs +1346 -0
- package/dist/Functions-AvjNcId_.mjs.map +1 -0
- package/dist/Functions-OQJZP-F6.d.mts +111 -0
- package/dist/Generator-C52mmq01.d.mts +50 -0
- package/dist/Generator-D3utCJC7.mjs +205 -0
- package/dist/Generator-D3utCJC7.mjs.map +1 -0
- package/dist/Grammar-CPlSxGH6.mjs +200 -0
- package/dist/Grammar-CPlSxGH6.mjs.map +1 -0
- package/dist/Grammar-CRhnRoCu.d.mts +148 -0
- package/dist/Grammar-D6jZdJQ3.d.mts +169 -0
- package/dist/Grammar-mQ8CgE1M.mjs +258 -0
- package/dist/Grammar-mQ8CgE1M.mjs.map +1 -0
- package/dist/GraphStore-DhUa4nFO.d.mts +45 -0
- package/dist/GraphStore-DvbqwKy1.mjs +212 -0
- package/dist/GraphStore-DvbqwKy1.mjs.map +1 -0
- package/dist/Iri-BB8Ks-BF.d.mts +84 -0
- package/dist/Iri-Cr92gsQV.mjs +232 -0
- package/dist/Iri-Cr92gsQV.mjs.map +1 -0
- package/dist/Iri.d.mts +2 -0
- package/dist/Iri.mjs +1 -0
- package/dist/Isomorphism-B6qTY-xy.d.mts +28 -0
- package/dist/Isomorphism-BmqxhKyJ.mjs +232 -0
- package/dist/Isomorphism-BmqxhKyJ.mjs.map +1 -0
- package/dist/Isomorphism-DInKnWIy.mjs +390 -0
- package/dist/Isomorphism-DInKnWIy.mjs.map +1 -0
- package/dist/Isomorphism-DvSfZXLR.d.mts +37 -0
- package/dist/Isomorphism.d.mts +2 -0
- package/dist/Isomorphism.mjs +1 -0
- package/dist/JsonLd-DOwS2FHg.mjs +2836 -0
- package/dist/JsonLd-DOwS2FHg.mjs.map +1 -0
- package/dist/JsonLd-DobFrQNa.d.mts +242 -0
- package/dist/JsonLdError-C9J-BxfG.mjs +106 -0
- package/dist/JsonLdError-C9J-BxfG.mjs.map +1 -0
- package/dist/JsonLdError-DSOfHkOy.d.mts +43 -0
- package/dist/LanguageTag-BCu8rcmX.d.mts +38 -0
- package/dist/LanguageTag-BcOpMGZ4.mjs +89 -0
- package/dist/LanguageTag-BcOpMGZ4.mjs.map +1 -0
- package/dist/LanguageTag.d.mts +2 -0
- package/dist/LanguageTag.mjs +1 -0
- package/dist/Lexical-Cg0JHrf6.mjs +243 -0
- package/dist/Lexical-Cg0JHrf6.mjs.map +1 -0
- package/dist/Lexical-D3zySYVS.d.mts +163 -0
- package/dist/Manifest-B6xf6mUc.mjs +148 -0
- package/dist/Manifest-B6xf6mUc.mjs.map +1 -0
- package/dist/Manifest-DQUMRBFr.d.mts +98 -0
- package/dist/Mapping-BgG74x3U.d.mts +63 -0
- package/dist/Mapping-Dc1ZGirk.mjs +259 -0
- package/dist/Mapping-Dc1ZGirk.mjs.map +1 -0
- package/dist/Mcp-1DwTTKOK.mjs +48 -0
- package/dist/Mcp-1DwTTKOK.mjs.map +1 -0
- package/dist/Mcp-d-pX9erx.d.mts +25 -0
- package/dist/Message-CK_DGQuu.mjs +95 -0
- package/dist/Message-CK_DGQuu.mjs.map +1 -0
- package/dist/Message-fIvTJSXM.d.mts +49 -0
- package/dist/Metadata-BbffwGDZ.mjs +445 -0
- package/dist/Metadata-BbffwGDZ.mjs.map +1 -0
- package/dist/Metadata-CEt3yc1-.d.mts +901 -0
- package/dist/Metadata-D4HsQNXr.mjs +1273 -0
- package/dist/Metadata-D4HsQNXr.mjs.map +1 -0
- package/dist/Metadata-nzS7QKRj.d.mts +350 -0
- package/dist/Model-DaMmxurZ.d.mts +293 -0
- package/dist/Model-DlPzRYhF.mjs +528 -0
- package/dist/Model-DlPzRYhF.mjs.map +1 -0
- package/dist/N3-BzyV-KIH.mjs +974 -0
- package/dist/N3-BzyV-KIH.mjs.map +1 -0
- package/dist/N3-DSLnonDn.d.mts +100 -0
- package/dist/NQuads-C1VBOJ3-.mjs +117 -0
- package/dist/NQuads-C1VBOJ3-.mjs.map +1 -0
- package/dist/NQuads-FjFZikFg.d.mts +76 -0
- package/dist/NTriples-D-kLSEAf.mjs +120 -0
- package/dist/NTriples-D-kLSEAf.mjs.map +1 -0
- package/dist/NTriples-D34OspfW.d.mts +76 -0
- package/dist/Namespace-ClTUO_ya.d.mts +42 -0
- package/dist/Namespace-DHFIsORd.mjs +75 -0
- package/dist/Namespace-DHFIsORd.mjs.map +1 -0
- package/dist/Namespace.d.mts +2 -0
- package/dist/Namespace.mjs +1 -0
- package/dist/Namespaces-Bz85vpjW.mjs +235 -0
- package/dist/Namespaces-Bz85vpjW.mjs.map +1 -0
- package/dist/Namespaces-C1jW6EDo.d.mts +178 -0
- package/dist/Optimizer-BWWQRQPY.mjs +168 -0
- package/dist/Optimizer-BWWQRQPY.mjs.map +1 -0
- package/dist/Optimizer-DUpUow6k.d.mts +26 -0
- package/dist/Options-BLBGL4HE.mjs +72 -0
- package/dist/Options-BLBGL4HE.mjs.map +1 -0
- package/dist/Options-BommQwP9.d.mts +127 -0
- package/dist/Packet-CA76wVX3.mjs +197 -0
- package/dist/Packet-CA76wVX3.mjs.map +1 -0
- package/dist/Packet-Cy5g6XuW.d.mts +130 -0
- package/dist/Parser-p1Gyr0QN.d.mts +85 -0
- package/dist/Parser-xARsOWXk.mjs +1317 -0
- package/dist/Parser-xARsOWXk.mjs.map +1 -0
- package/dist/Path-B20Yp8KE.mjs +284 -0
- package/dist/Path-B20Yp8KE.mjs.map +1 -0
- package/dist/Path-DRB8e-Zn.d.mts +181 -0
- package/dist/Pdf-B9RZn--8.d.mts +77 -0
- package/dist/Pdf-CKK6dkZn.mjs +89 -0
- package/dist/Pdf-CKK6dkZn.mjs.map +1 -0
- package/dist/PdfA-CUjSuntT.d.mts +109 -0
- package/dist/PdfA-CleOhuL6.mjs +124 -0
- package/dist/PdfA-CleOhuL6.mjs.map +1 -0
- package/dist/Photoshop-CiHo80qV.mjs +233 -0
- package/dist/Photoshop-CiHo80qV.mjs.map +1 -0
- package/dist/Photoshop-udKZ0I3N.d.mts +204 -0
- package/dist/PrefixMap-BHFPDLO-.mjs +103 -0
- package/dist/PrefixMap-BHFPDLO-.mjs.map +1 -0
- package/dist/PrefixMap-BMlXrWNd.d.mts +64 -0
- package/dist/PrefixMap.d.mts +2 -0
- package/dist/PrefixMap.mjs +1 -0
- package/dist/Processor-CMmecFsb.mjs +198 -0
- package/dist/Processor-CMmecFsb.mjs.map +1 -0
- package/dist/Processor-FJPvO0CB.d.mts +435 -0
- package/dist/Protocol-BA7OkNgp.mjs +202 -0
- package/dist/Protocol-BA7OkNgp.mjs.map +1 -0
- package/dist/Protocol-DlSoiIKB.d.mts +108 -0
- package/dist/ProtocolErrors-Ckfejnl6.d.mts +84 -0
- package/dist/ProtocolErrors-czDPVcX5.mjs +129 -0
- package/dist/ProtocolErrors-czDPVcX5.mjs.map +1 -0
- package/dist/Query-D9A6LOpP.mjs +364 -0
- package/dist/Query-D9A6LOpP.mjs.map +1 -0
- package/dist/Query-KqSkTYyG.d.mts +96 -0
- package/dist/QueryBuilder-BLK9Vfbz.mjs +674 -0
- package/dist/QueryBuilder-BLK9Vfbz.mjs.map +1 -0
- package/dist/QueryBuilder-DUqh4ECe.d.mts +529 -0
- package/dist/RdfJs-D6-49XB5.mjs +86 -0
- package/dist/RdfJs-D6-49XB5.mjs.map +1 -0
- package/dist/RdfJs-DXFqdWrd.d.mts +76 -0
- package/dist/RdfJs.d.mts +2 -0
- package/dist/RdfJs.mjs +1 -0
- package/dist/RdfJson-5aKPDlPS.d.mts +297 -0
- package/dist/RdfJson-BNocgW4f.mjs +548 -0
- package/dist/RdfJson-BNocgW4f.mjs.map +1 -0
- package/dist/RdfXml-DJ9G4gOq.mjs +1014 -0
- package/dist/RdfXml-DJ9G4gOq.mjs.map +1 -0
- package/dist/RdfXml-_N7yxWEp.d.mts +149 -0
- package/dist/Rdfs-BRVPsAjc.d.mts +84 -0
- package/dist/Rdfs-CyY2wVHI.mjs +167 -0
- package/dist/Rdfs-CyY2wVHI.mjs.map +1 -0
- package/dist/Rdfs.d.mts +2 -0
- package/dist/Rdfs.mjs +1 -0
- package/dist/Reasoner-BxYhx9s7.d.mts +94 -0
- package/dist/Reasoner-Cw90zrjv.mjs +798 -0
- package/dist/Reasoner-Cw90zrjv.mjs.map +1 -0
- package/dist/Reification-BmN4EfnM.d.mts +40 -0
- package/dist/Reification-dpqQvjDE.mjs +82 -0
- package/dist/Reification-dpqQvjDE.mjs.map +1 -0
- package/dist/Reification.d.mts +2 -0
- package/dist/Reification.mjs +1 -0
- package/dist/Report-XHs8htzK.mjs +121 -0
- package/dist/Report-XHs8htzK.mjs.map +1 -0
- package/dist/Report-hcXsc_19.d.mts +115 -0
- package/dist/Resource-B1cI8FyJ.d.mts +218 -0
- package/dist/Resource-sIEeNh15.mjs +374 -0
- package/dist/Resource-sIEeNh15.mjs.map +1 -0
- package/dist/Resource.d.mts +2 -0
- package/dist/Resource.mjs +1 -0
- package/dist/Results-BVNEC-Wt.d.mts +277 -0
- package/dist/Results-peJjGA2V.mjs +621 -0
- package/dist/Results-peJjGA2V.mjs.map +1 -0
- package/dist/ResultsStream-BhF0OcNn.mjs +639 -0
- package/dist/ResultsStream-BhF0OcNn.mjs.map +1 -0
- package/dist/ResultsStream-toYMXrOe.d.mts +100 -0
- package/dist/SemAct-CDchtk49.d.mts +96 -0
- package/dist/SemAct-CmyT4yI8.mjs +118 -0
- package/dist/SemAct-CmyT4yI8.mjs.map +1 -0
- package/dist/Serialization-DP9H5bYQ.mjs +514 -0
- package/dist/Serialization-DP9H5bYQ.mjs.map +1 -0
- package/dist/Serialization-Df8iVauT.d.mts +392 -0
- package/dist/Serialization.d.mts +2 -0
- package/dist/Serialization.mjs +1 -0
- package/dist/ServerFormats-CrRnjjf6.mjs +64 -0
- package/dist/ServerFormats-CrRnjjf6.mjs.map +1 -0
- package/dist/ServerFormats-DjC9NsO_.d.mts +36 -0
- package/dist/ServiceDescription-BERsvg-k.d.mts +54 -0
- package/dist/ServiceDescription-Dq5hxeGy.mjs +97 -0
- package/dist/ServiceDescription-Dq5hxeGy.mjs.map +1 -0
- package/dist/ShExC-Ctf-06CL.d.mts +67 -0
- package/dist/ShExC-DJbB19i3.mjs +1181 -0
- package/dist/ShExC-DJbB19i3.mjs.map +1 -0
- package/dist/ShExError-BeYFD9rv.d.mts +61 -0
- package/dist/ShExError-CVtq2NnM.mjs +64 -0
- package/dist/ShExError-CVtq2NnM.mjs.map +1 -0
- package/dist/ShExJ-C1u_wgyD.d.mts +531 -0
- package/dist/ShExJ-COiPd9Xw.mjs +532 -0
- package/dist/ShExJ-COiPd9Xw.mjs.map +1 -0
- package/dist/ShExR-ByR4mCh-.mjs +480 -0
- package/dist/ShExR-ByR4mCh-.mjs.map +1 -0
- package/dist/ShExR-CqONNNBz.d.mts +40 -0
- package/dist/ShapeMap-C422pxKl.d.mts +140 -0
- package/dist/ShapeMap-CsgKxB2G.mjs +181 -0
- package/dist/ShapeMap-CsgKxB2G.mjs.map +1 -0
- package/dist/Shapes-18GjfyBV.mjs +597 -0
- package/dist/Shapes-18GjfyBV.mjs.map +1 -0
- package/dist/Shapes-BQFDFc4Q.d.mts +306 -0
- package/dist/Sparql-BiYFMSpl.mjs +29 -0
- package/dist/Sparql-BiYFMSpl.mjs.map +1 -0
- package/dist/Sparql-DecpWTPh.d.mts +97 -0
- package/dist/SparqlClient-C_CjXbwj.mjs +333 -0
- package/dist/SparqlClient-C_CjXbwj.mjs.map +1 -0
- package/dist/SparqlClient-UPc88SHy.d.mts +290 -0
- package/dist/SparqlServer-CbUW-pVj.d.mts +71 -0
- package/dist/SparqlServer-Db7w7Cll.mjs +308 -0
- package/dist/SparqlServer-Db7w7Cll.mjs.map +1 -0
- package/dist/SqlStore-BBqFx-Wl.mjs +684 -0
- package/dist/SqlStore-BBqFx-Wl.mjs.map +1 -0
- package/dist/SqlStore-CCJo5I-e.d.mts +117 -0
- package/dist/Store-D0jmVfb3.d.mts +166 -0
- package/dist/Store-DH3Ow1GO.mjs +162 -0
- package/dist/Store-DH3Ow1GO.mjs.map +1 -0
- package/dist/Structure-BjMo4Bkc.mjs +334 -0
- package/dist/Structure-BjMo4Bkc.mjs.map +1 -0
- package/dist/Structure-n4CmDiab.d.mts +63 -0
- package/dist/Table-BGgm9nbM.mjs +538 -0
- package/dist/Table-BGgm9nbM.mjs.map +1 -0
- package/dist/Table-C3reiVrb.d.mts +261 -0
- package/dist/Term-B_4ezyXq.d.mts +619 -0
- package/dist/Term-CFLG1qu4.mjs +991 -0
- package/dist/Term-CFLG1qu4.mjs.map +1 -0
- package/dist/Term.d.mts +2 -0
- package/dist/Term.mjs +1 -0
- package/dist/TermCodec-CDZiEztW.mjs +397 -0
- package/dist/TermCodec-CDZiEztW.mjs.map +1 -0
- package/dist/TermCodec-_03bDXr0.d.mts +209 -0
- package/dist/TermCodec.d.mts +2 -0
- package/dist/TermCodec.mjs +1 -0
- package/dist/TermJson-BOPe0yve.d.mts +232 -0
- package/dist/TermJson-FAg3lvjl.mjs +142 -0
- package/dist/TermJson-FAg3lvjl.mjs.map +1 -0
- package/dist/TermJson.d.mts +2 -0
- package/dist/TermJson.mjs +1 -0
- package/dist/TermSchema-Bn9CoaYA.mjs +30 -0
- package/dist/TermSchema-Bn9CoaYA.mjs.map +1 -0
- package/dist/TermSchema-DBO6MroX.d.mts +6 -0
- package/dist/Testing-B-aPCpmu.mjs +63 -0
- package/dist/Testing-B-aPCpmu.mjs.map +1 -0
- package/dist/Testing-CF6s8P3O.d.mts +53 -0
- package/dist/Tiff-CR-2QeSI.d.mts +148 -0
- package/dist/Tiff-DlsOlZPM.mjs +169 -0
- package/dist/Tiff-DlsOlZPM.mjs.map +1 -0
- package/dist/Tools-7MdRKccr.d.mts +583 -0
- package/dist/Tools-ryxphZbI.mjs +329 -0
- package/dist/Tools-ryxphZbI.mjs.map +1 -0
- package/dist/Translate-B0YKKANS.d.mts +37 -0
- package/dist/Translate-gzWPq0Ia.mjs +308 -0
- package/dist/Translate-gzWPq0Ia.mjs.map +1 -0
- package/dist/Translation-DC9rLm2y.mjs +1535 -0
- package/dist/Translation-DC9rLm2y.mjs.map +1 -0
- package/dist/Translation-K4L9XBqX.d.mts +103 -0
- package/dist/TriG-BkqtqZ6Y.mjs +125 -0
- package/dist/TriG-BkqtqZ6Y.mjs.map +1 -0
- package/dist/TriG-xDjdDatp.d.mts +86 -0
- package/dist/Turtle-Bv1_bisW.d.mts +85 -0
- package/dist/Turtle-CZVUOtwl.mjs +133 -0
- package/dist/Turtle-CZVUOtwl.mjs.map +1 -0
- package/dist/ValidationReport-DBdJshW5.mjs +285 -0
- package/dist/ValidationReport-DBdJshW5.mjs.map +1 -0
- package/dist/ValidationReport-Dx3WxY0h.d.mts +192 -0
- package/dist/Validator-227ff9Rn.d.mts +179 -0
- package/dist/Validator-BzXMKDeJ.mjs +1162 -0
- package/dist/Validator-BzXMKDeJ.mjs.map +1 -0
- package/dist/Validator-Dl8cih5V.d.mts +207 -0
- package/dist/Validator-DmUfMbpL.mjs +568 -0
- package/dist/Validator-DmUfMbpL.mjs.map +1 -0
- package/dist/Vocab-DceKywpq.mjs +168 -0
- package/dist/Vocab-DceKywpq.mjs.map +1 -0
- package/dist/Vocab-Df-L-IwZ.d.mts +46 -0
- package/dist/Vocab-Do56UgBX.d.mts +81 -0
- package/dist/Vocab-TfpWG1Ne.mjs +118 -0
- package/dist/Vocab-TfpWG1Ne.mjs.map +1 -0
- package/dist/Vocab.d.mts +2 -0
- package/dist/Vocab.mjs +1 -0
- package/dist/Vocabulary-C6-GPOy4.d.mts +22 -0
- package/dist/Vocabulary-CnQl-_Z4.mjs +179 -0
- package/dist/Vocabulary-CnQl-_Z4.mjs.map +1 -0
- package/dist/Xml-B7iihYCS.mjs +976 -0
- package/dist/Xml-B7iihYCS.mjs.map +1 -0
- package/dist/Xml-CmfHS7SW.d.mts +267 -0
- package/dist/Xmp-D7CKA7MZ.d.mts +111 -0
- package/dist/Xmp-DCGN9pOD.mjs +307 -0
- package/dist/Xmp-DCGN9pOD.mjs.map +1 -0
- package/dist/XmpBasic-CP38jpR_.mjs +73 -0
- package/dist/XmpBasic-CP38jpR_.mjs.map +1 -0
- package/dist/XmpBasic-Cmbe53rQ.d.mts +64 -0
- package/dist/XmpMM-BfL_TgJF.mjs +73 -0
- package/dist/XmpMM-BfL_TgJF.mjs.map +1 -0
- package/dist/XmpMM-Dqm3IX8p.d.mts +63 -0
- package/dist/XmpRights-BKPtoI5L.mjs +73 -0
- package/dist/XmpRights-BKPtoI5L.mjs.map +1 -0
- package/dist/XmpRights-CaALZQz2.d.mts +63 -0
- package/dist/Xsd-Cdgx5zRB.mjs +405 -0
- package/dist/Xsd-Cdgx5zRB.mjs.map +1 -0
- package/dist/Xsd-D2elNhSm.d.mts +187 -0
- package/dist/Xsd.d.mts +2 -0
- package/dist/Xsd.mjs +1 -0
- package/dist/accessors-CEjaojuQ.mjs +28 -0
- package/dist/accessors-CEjaojuQ.mjs.map +1 -0
- package/dist/codec-Lb2T96rv.d.mts +20 -0
- package/dist/codec-QNo7IdJF.mjs +389 -0
- package/dist/codec-QNo7IdJF.mjs.map +1 -0
- package/dist/csvw/Csv2Json.d.mts +2 -0
- package/dist/csvw/Csv2Json.mjs +1 -0
- package/dist/csvw/Csv2Rdf.d.mts +2 -0
- package/dist/csvw/Csv2Rdf.mjs +1 -0
- package/dist/csvw/Datatype.d.mts +2 -0
- package/dist/csvw/Datatype.mjs +1 -0
- package/dist/csvw/Metadata.d.mts +2 -0
- package/dist/csvw/Metadata.mjs +1 -0
- package/dist/csvw/Processor.d.mts +2 -0
- package/dist/csvw/Processor.mjs +1 -0
- package/dist/csvw/Report.d.mts +2 -0
- package/dist/csvw/Report.mjs +1 -0
- package/dist/csvw/Table.d.mts +2 -0
- package/dist/csvw/Table.mjs +1 -0
- package/dist/csvw/index.d.mts +8 -0
- package/dist/csvw/index.mjs +8 -0
- package/dist/index-Cms2TYfC.d.mts +16 -0
- package/dist/index-Ct8xFmRs.d.mts +7 -0
- package/dist/index-D4QFwOjm.d.mts +28 -0
- package/dist/index.d.mts +18 -0
- package/dist/index.mjs +17 -0
- package/dist/jsonld/DocumentLoader.d.mts +2 -0
- package/dist/jsonld/DocumentLoader.mjs +1 -0
- package/dist/jsonld/JsonLd.d.mts +2 -0
- package/dist/jsonld/JsonLd.mjs +1 -0
- package/dist/jsonld/JsonLdError.d.mts +2 -0
- package/dist/jsonld/JsonLdError.mjs +1 -0
- package/dist/jsonld/index.d.mts +4 -0
- package/dist/jsonld/index.mjs +4 -0
- package/dist/lists-D-OpQ0Ir.mjs +77 -0
- package/dist/lists-D-OpQ0Ir.mjs.map +1 -0
- package/dist/loop-D5-gNx9K.mjs +21 -0
- package/dist/loop-D5-gNx9K.mjs.map +1 -0
- package/dist/loop-DZ2hXlr_.mjs +21 -0
- package/dist/loop-DZ2hXlr_.mjs.map +1 -0
- package/dist/n3/Isomorphism.d.mts +2 -0
- package/dist/n3/Isomorphism.mjs +1 -0
- package/dist/n3/Mapping.d.mts +2 -0
- package/dist/n3/Mapping.mjs +1 -0
- package/dist/n3/Model.d.mts +2 -0
- package/dist/n3/Model.mjs +1 -0
- package/dist/n3/N3.d.mts +2 -0
- package/dist/n3/N3.mjs +1 -0
- package/dist/n3/Reasoner.d.mts +2 -0
- package/dist/n3/Reasoner.mjs +2 -0
- package/dist/n3/Vocab.d.mts +2 -0
- package/dist/n3/Vocab.mjs +1 -0
- package/dist/n3/index.d.mts +7 -0
- package/dist/n3/index.mjs +7 -0
- package/dist/ntriples/Grammar.d.mts +2 -0
- package/dist/ntriples/Grammar.mjs +1 -0
- package/dist/ntriples/Lexical.d.mts +2 -0
- package/dist/ntriples/Lexical.mjs +1 -0
- package/dist/ntriples/NQuads.d.mts +2 -0
- package/dist/ntriples/NQuads.mjs +1 -0
- package/dist/ntriples/NTriples.d.mts +2 -0
- package/dist/ntriples/NTriples.mjs +1 -0
- package/dist/ntriples/index.d.mts +5 -0
- package/dist/ntriples/index.mjs +5 -0
- package/dist/rdfjson/RdfJson.d.mts +2 -0
- package/dist/rdfjson/RdfJson.mjs +1 -0
- package/dist/rdfjson/index.d.mts +2 -0
- package/dist/rdfjson/index.mjs +1 -0
- package/dist/rdfxml/RdfXml.d.mts +2 -0
- package/dist/rdfxml/RdfXml.mjs +1 -0
- package/dist/rdfxml/Xml.d.mts +2 -0
- package/dist/rdfxml/Xml.mjs +1 -0
- package/dist/rdfxml/index.d.mts +3 -0
- package/dist/rdfxml/index.mjs +3 -0
- package/dist/rolldown-runtime-D8jQpDG7.mjs +12 -0
- package/dist/serialize-96KBvKaf.mjs +1463 -0
- package/dist/serialize-96KBvKaf.mjs.map +1 -0
- package/dist/serialize-DsoXdM6n.d.mts +37 -0
- package/dist/shacl/Message.d.mts +2 -0
- package/dist/shacl/Message.mjs +1 -0
- package/dist/shacl/Path.d.mts +2 -0
- package/dist/shacl/Path.mjs +1 -0
- package/dist/shacl/Shapes.d.mts +2 -0
- package/dist/shacl/Shapes.mjs +1 -0
- package/dist/shacl/Sparql.d.mts +2 -0
- package/dist/shacl/Sparql.mjs +1 -0
- package/dist/shacl/ValidationReport.d.mts +2 -0
- package/dist/shacl/ValidationReport.mjs +1 -0
- package/dist/shacl/Validator.d.mts +2 -0
- package/dist/shacl/Validator.mjs +1 -0
- package/dist/shacl/Vocabulary.d.mts +2 -0
- package/dist/shacl/Vocabulary.mjs +1 -0
- package/dist/shacl/index.d.mts +9 -0
- package/dist/shacl/index.mjs +8 -0
- package/dist/shex/SemAct.d.mts +2 -0
- package/dist/shex/SemAct.mjs +1 -0
- package/dist/shex/ShExC.d.mts +2 -0
- package/dist/shex/ShExC.mjs +1 -0
- package/dist/shex/ShExError.d.mts +2 -0
- package/dist/shex/ShExError.mjs +1 -0
- package/dist/shex/ShExJ.d.mts +2 -0
- package/dist/shex/ShExJ.mjs +2 -0
- package/dist/shex/ShExR.d.mts +2 -0
- package/dist/shex/ShExR.mjs +1 -0
- package/dist/shex/ShapeMap.d.mts +2 -0
- package/dist/shex/ShapeMap.mjs +1 -0
- package/dist/shex/Structure.d.mts +2 -0
- package/dist/shex/Structure.mjs +2 -0
- package/dist/shex/Validator.d.mts +2 -0
- package/dist/shex/Validator.mjs +4 -0
- package/dist/shex/index.d.mts +9 -0
- package/dist/shex/index.mjs +9 -0
- package/dist/sparql/Algebra.d.mts +2 -0
- package/dist/sparql/Algebra.mjs +1 -0
- package/dist/sparql/Ast.d.mts +2 -0
- package/dist/sparql/Ast.mjs +1 -0
- package/dist/sparql/Bindings.d.mts +2 -0
- package/dist/sparql/Bindings.mjs +1 -0
- package/dist/sparql/ClientErrors.d.mts +2 -0
- package/dist/sparql/ClientErrors.mjs +1 -0
- package/dist/sparql/ClientFormats.d.mts +2 -0
- package/dist/sparql/ClientFormats.mjs +1 -0
- package/dist/sparql/Engine.d.mts +2 -0
- package/dist/sparql/Engine.mjs +1 -0
- package/dist/sparql/Errors.d.mts +2 -0
- package/dist/sparql/Errors.mjs +1 -0
- package/dist/sparql/Expression.d.mts +2 -0
- package/dist/sparql/Expression.mjs +1 -0
- package/dist/sparql/Federation.d.mts +2 -0
- package/dist/sparql/Federation.mjs +1 -0
- package/dist/sparql/Functions.d.mts +2 -0
- package/dist/sparql/Functions.mjs +1 -0
- package/dist/sparql/Generator.d.mts +2 -0
- package/dist/sparql/Generator.mjs +1 -0
- package/dist/sparql/GraphStore.d.mts +2 -0
- package/dist/sparql/GraphStore.mjs +1 -0
- package/dist/sparql/Optimizer.d.mts +2 -0
- package/dist/sparql/Optimizer.mjs +1 -0
- package/dist/sparql/Options.d.mts +2 -0
- package/dist/sparql/Options.mjs +1 -0
- package/dist/sparql/Parser.d.mts +2 -0
- package/dist/sparql/Parser.mjs +1 -0
- package/dist/sparql/Protocol.d.mts +2 -0
- package/dist/sparql/Protocol.mjs +1 -0
- package/dist/sparql/ProtocolErrors.d.mts +2 -0
- package/dist/sparql/ProtocolErrors.mjs +1 -0
- package/dist/sparql/QueryBuilder.d.mts +2 -0
- package/dist/sparql/QueryBuilder.mjs +1 -0
- package/dist/sparql/Results.d.mts +2 -0
- package/dist/sparql/Results.mjs +1 -0
- package/dist/sparql/ResultsStream.d.mts +2 -0
- package/dist/sparql/ResultsStream.mjs +1 -0
- package/dist/sparql/ServerFormats.d.mts +2 -0
- package/dist/sparql/ServerFormats.mjs +1 -0
- package/dist/sparql/ServiceDescription.d.mts +2 -0
- package/dist/sparql/ServiceDescription.mjs +1 -0
- package/dist/sparql/SparqlClient.d.mts +2 -0
- package/dist/sparql/SparqlClient.mjs +1 -0
- package/dist/sparql/SparqlServer.d.mts +2 -0
- package/dist/sparql/SparqlServer.mjs +1 -0
- package/dist/sparql/Store.d.mts +2 -0
- package/dist/sparql/Store.mjs +1 -0
- package/dist/sparql/TermSchema.d.mts +3 -0
- package/dist/sparql/TermSchema.mjs +2 -0
- package/dist/sparql/Testing.d.mts +2 -0
- package/dist/sparql/Testing.mjs +1 -0
- package/dist/sparql/Translate.d.mts +2 -0
- package/dist/sparql/Translate.mjs +1 -0
- package/dist/sparql/ai/Mcp.d.mts +2 -0
- package/dist/sparql/ai/Mcp.mjs +1 -0
- package/dist/sparql/ai/Tools.d.mts +2 -0
- package/dist/sparql/ai/Tools.mjs +1 -0
- package/dist/sparql/ai/index.d.mts +3 -0
- package/dist/sparql/ai/index.mjs +3 -0
- package/dist/sparql/index.d.mts +30 -0
- package/dist/sparql/index.mjs +29 -0
- package/dist/sparql/shacl/Evaluator.d.mts +2 -0
- package/dist/sparql/shacl/Evaluator.mjs +1 -0
- package/dist/sparql/shacl/Query.d.mts +2 -0
- package/dist/sparql/shacl/Query.mjs +1 -0
- package/dist/sparql/shacl/index.d.mts +3 -0
- package/dist/sparql/shacl/index.mjs +3 -0
- package/dist/sparql/sql/Dialect.d.mts +2 -0
- package/dist/sparql/sql/Dialect.mjs +1 -0
- package/dist/sparql/sql/SqlStore.d.mts +2 -0
- package/dist/sparql/sql/SqlStore.mjs +1 -0
- package/dist/sparql/sql/Translation.d.mts +2 -0
- package/dist/sparql/sql/Translation.mjs +1 -0
- package/dist/sparql/sql/index.d.mts +4 -0
- package/dist/sparql/sql/index.mjs +4 -0
- package/dist/stringMap-D5YIpYtR.mjs +38 -0
- package/dist/stringMap-D5YIpYtR.mjs.map +1 -0
- package/dist/tokens-C6BzeodQ.mjs +24 -0
- package/dist/tokens-C6BzeodQ.mjs.map +1 -0
- package/dist/turtle/Grammar.d.mts +3 -0
- package/dist/turtle/Grammar.mjs +3 -0
- package/dist/turtle/Manifest.d.mts +2 -0
- package/dist/turtle/Manifest.mjs +1 -0
- package/dist/turtle/TriG.d.mts +2 -0
- package/dist/turtle/TriG.mjs +1 -0
- package/dist/turtle/Turtle.d.mts +2 -0
- package/dist/turtle/Turtle.mjs +1 -0
- package/dist/turtle/index.d.mts +5 -0
- package/dist/turtle/index.mjs +5 -0
- package/dist/xmp/DublinCore.d.mts +2 -0
- package/dist/xmp/DublinCore.mjs +1 -0
- package/dist/xmp/Exif.d.mts +2 -0
- package/dist/xmp/Exif.mjs +1 -0
- package/dist/xmp/Extract.d.mts +2 -0
- package/dist/xmp/Extract.mjs +1 -0
- package/dist/xmp/Metadata.d.mts +2 -0
- package/dist/xmp/Metadata.mjs +1 -0
- package/dist/xmp/Namespaces.d.mts +2 -0
- package/dist/xmp/Namespaces.mjs +1 -0
- package/dist/xmp/Packet.d.mts +2 -0
- package/dist/xmp/Packet.mjs +1 -0
- package/dist/xmp/Pdf.d.mts +2 -0
- package/dist/xmp/Pdf.mjs +1 -0
- package/dist/xmp/PdfA.d.mts +2 -0
- package/dist/xmp/PdfA.mjs +1 -0
- package/dist/xmp/Photoshop.d.mts +2 -0
- package/dist/xmp/Photoshop.mjs +1 -0
- package/dist/xmp/Tiff.d.mts +2 -0
- package/dist/xmp/Tiff.mjs +1 -0
- package/dist/xmp/Xmp.d.mts +2 -0
- package/dist/xmp/Xmp.mjs +3 -0
- package/dist/xmp/XmpBasic.d.mts +2 -0
- package/dist/xmp/XmpBasic.mjs +1 -0
- package/dist/xmp/XmpMM.d.mts +2 -0
- package/dist/xmp/XmpMM.mjs +1 -0
- package/dist/xmp/XmpRights.d.mts +2 -0
- package/dist/xmp/XmpRights.mjs +1 -0
- package/dist/xmp/index.d.mts +15 -0
- package/dist/xmp/index.mjs +15 -0
- package/package.json +195 -3
- package/src/Dataset.ts +1085 -0
- package/src/Iri.ts +322 -0
- package/src/Isomorphism.ts +319 -0
- package/src/LanguageTag.ts +98 -0
- package/src/Namespace.ts +100 -0
- package/src/PrefixMap.ts +117 -0
- package/src/RdfJs.ts +146 -0
- package/src/Rdfs.ts +241 -0
- package/src/Reification.ts +103 -0
- package/src/Resource.ts +873 -0
- package/src/Serialization.ts +775 -0
- package/src/Term.ts +1300 -0
- package/src/TermCodec.ts +505 -0
- package/src/TermJson.ts +313 -0
- package/src/Vocab.ts +161 -0
- package/src/Xsd.ts +573 -0
- package/src/csvw/Csv2Json.ts +265 -0
- package/src/csvw/Csv2Rdf.ts +268 -0
- package/src/csvw/Datatype.ts +589 -0
- package/src/csvw/Metadata.ts +1523 -0
- package/src/csvw/Processor.ts +276 -0
- package/src/csvw/Report.ts +135 -0
- package/src/csvw/Table.ts +759 -0
- package/src/csvw/index.ts +22 -0
- package/src/csvw/internal/dateFormat.ts +202 -0
- package/src/csvw/internal/json.ts +104 -0
- package/src/csvw/internal/numberFormat.ts +369 -0
- package/src/csvw/internal/object.ts +23 -0
- package/src/csvw/internal/uriTemplate.ts +130 -0
- package/src/csvw/internal/url.ts +93 -0
- package/src/csvw/internal/vocab.ts +282 -0
- package/src/index.ts +40 -0
- package/src/internal/arbitrary.ts +148 -0
- package/src/internal/loop.ts +24 -0
- package/src/internal/pending.ts +20 -0
- package/src/internal/textDecoder.ts +183 -0
- package/src/jsonld/DocumentLoader.ts +512 -0
- package/src/jsonld/JsonLd.ts +847 -0
- package/src/jsonld/JsonLdError.ts +105 -0
- package/src/jsonld/index.ts +13 -0
- package/src/jsonld/internal/compact.ts +852 -0
- package/src/jsonld/internal/context.ts +781 -0
- package/src/jsonld/internal/expand.ts +614 -0
- package/src/jsonld/internal/flatten.ts +243 -0
- package/src/jsonld/internal/frame.ts +559 -0
- package/src/jsonld/internal/iri.ts +52 -0
- package/src/jsonld/internal/json.ts +19 -0
- package/src/jsonld/internal/linkHeader.ts +60 -0
- package/src/jsonld/internal/rdf.ts +481 -0
- package/src/jsonld/internal/util.ts +367 -0
- package/src/n3/Isomorphism.ts +476 -0
- package/src/n3/Mapping.ts +332 -0
- package/src/n3/Model.ts +696 -0
- package/src/n3/N3.ts +237 -0
- package/src/n3/Reasoner.ts +568 -0
- package/src/n3/Vocab.ts +111 -0
- package/src/n3/index.ts +21 -0
- package/src/n3/internal/builtins.ts +668 -0
- package/src/n3/internal/guards.ts +23 -0
- package/src/n3/internal/lists.ts +106 -0
- package/src/n3/internal/loop.ts +28 -0
- package/src/n3/internal/parser.ts +1032 -0
- package/src/n3/internal/writer.ts +344 -0
- package/src/ntriples/Grammar.ts +317 -0
- package/src/ntriples/Lexical.ts +321 -0
- package/src/ntriples/NQuads.ts +140 -0
- package/src/ntriples/NTriples.ts +143 -0
- package/src/ntriples/index.ts +14 -0
- package/src/ntriples/internal/codec.ts +229 -0
- package/src/ntriples/internal/lineParser.ts +326 -0
- package/src/ntriples/internal/loop.ts +14 -0
- package/src/rdfjson/RdfJson.ts +806 -0
- package/src/rdfjson/index.ts +9 -0
- package/src/rdfjson/internal/json.ts +19 -0
- package/src/rdfxml/RdfXml.ts +1408 -0
- package/src/rdfxml/Xml.ts +419 -0
- package/src/rdfxml/index.ts +11 -0
- package/src/rdfxml/internal/chars.ts +73 -0
- package/src/rdfxml/internal/loop.ts +24 -0
- package/src/rdfxml/internal/parser.ts +1265 -0
- package/src/shacl/Message.ts +102 -0
- package/src/shacl/Path.ts +483 -0
- package/src/shacl/Shapes.ts +913 -0
- package/src/shacl/Sparql.ts +128 -0
- package/src/shacl/ValidationReport.ts +438 -0
- package/src/shacl/Validator.ts +1156 -0
- package/src/shacl/Vocabulary.ts +180 -0
- package/src/shacl/index.ts +22 -0
- package/src/shacl/internal/compare.ts +128 -0
- package/src/shacl/internal/regex.ts +56 -0
- package/src/shex/SemAct.ts +197 -0
- package/src/shex/ShExC.ts +415 -0
- package/src/shex/ShExError.ts +71 -0
- package/src/shex/ShExJ.ts +893 -0
- package/src/shex/ShExR.ts +640 -0
- package/src/shex/ShapeMap.ts +385 -0
- package/src/shex/Structure.ts +467 -0
- package/src/shex/Validator.ts +395 -0
- package/src/shex/index.ts +24 -0
- package/src/shex/internal/engine.ts +682 -0
- package/src/shex/internal/iterate.ts +14 -0
- package/src/shex/internal/json.ts +12 -0
- package/src/shex/internal/lexer.ts +56 -0
- package/src/shex/internal/nodeConstraint.ts +368 -0
- package/src/shex/internal/shexcLexer.ts +387 -0
- package/src/shex/internal/shexcParser.ts +1312 -0
- package/src/shex/internal/tokens.ts +41 -0
- package/src/shex/internal/xpathRegex.ts +290 -0
- package/src/sparql/Algebra.ts +914 -0
- package/src/sparql/Ast.ts +1344 -0
- package/src/sparql/Bindings.ts +272 -0
- package/src/sparql/ClientErrors.ts +156 -0
- package/src/sparql/ClientFormats.ts +70 -0
- package/src/sparql/Engine.ts +699 -0
- package/src/sparql/Errors.ts +30 -0
- package/src/sparql/Expression.ts +360 -0
- package/src/sparql/Federation.ts +187 -0
- package/src/sparql/Functions.ts +689 -0
- package/src/sparql/Generator.ts +426 -0
- package/src/sparql/GraphStore.ts +341 -0
- package/src/sparql/Optimizer.ts +230 -0
- package/src/sparql/Options.ts +191 -0
- package/src/sparql/Parser.ts +173 -0
- package/src/sparql/Protocol.ts +342 -0
- package/src/sparql/ProtocolErrors.ts +113 -0
- package/src/sparql/QueryBuilder.ts +953 -0
- package/src/sparql/Results.ts +844 -0
- package/src/sparql/ResultsStream.ts +771 -0
- package/src/sparql/ServerFormats.ts +75 -0
- package/src/sparql/ServiceDescription.ts +130 -0
- package/src/sparql/SparqlClient.ts +947 -0
- package/src/sparql/SparqlServer.ts +528 -0
- package/src/sparql/Store.ts +311 -0
- package/src/sparql/TermSchema.ts +20 -0
- package/src/sparql/Testing.ts +114 -0
- package/src/sparql/Translate.ts +407 -0
- package/src/sparql/ai/Mcp.ts +43 -0
- package/src/sparql/ai/Tools.ts +481 -0
- package/src/sparql/ai/index.ts +11 -0
- package/src/sparql/index.ts +64 -0
- package/src/sparql/internal/evaluator.ts +947 -0
- package/src/sparql/internal/hash.ts +418 -0
- package/src/sparql/internal/json.ts +12 -0
- package/src/sparql/internal/lexer.ts +488 -0
- package/src/sparql/internal/loop.ts +24 -0
- package/src/sparql/internal/parser.ts +2215 -0
- package/src/sparql/internal/prefetch.ts +46 -0
- package/src/sparql/internal/stringMap.ts +39 -0
- package/src/sparql/internal/textResults.ts +226 -0
- package/src/sparql/internal/values.ts +550 -0
- package/src/sparql/shacl/Evaluator.ts +478 -0
- package/src/sparql/shacl/Query.ts +574 -0
- package/src/sparql/shacl/index.ts +12 -0
- package/src/sparql/sql/Dialect.ts +246 -0
- package/src/sparql/sql/SqlStore.ts +1080 -0
- package/src/sparql/sql/Translation.ts +1898 -0
- package/src/sparql/sql/index.ts +17 -0
- package/src/sparql/sql/internal/encoding.ts +313 -0
- package/src/turtle/Grammar.ts +286 -0
- package/src/turtle/Manifest.ts +215 -0
- package/src/turtle/TriG.ts +158 -0
- package/src/turtle/Turtle.ts +166 -0
- package/src/turtle/index.ts +14 -0
- package/src/turtle/internal/loop.ts +23 -0
- package/src/turtle/internal/parse.ts +112 -0
- package/src/turtle/internal/parser.ts +1303 -0
- package/src/turtle/internal/serialize.ts +79 -0
- package/src/turtle/internal/streamWriter.ts +128 -0
- package/src/turtle/internal/writer.ts +898 -0
- package/src/xmp/DublinCore.ts +147 -0
- package/src/xmp/Exif.ts +109 -0
- package/src/xmp/Extract.ts +351 -0
- package/src/xmp/Metadata.ts +703 -0
- package/src/xmp/Namespaces.ts +228 -0
- package/src/xmp/Packet.ts +297 -0
- package/src/xmp/Pdf.ts +99 -0
- package/src/xmp/PdfA.ts +280 -0
- package/src/xmp/Photoshop.ts +275 -0
- package/src/xmp/Tiff.ts +196 -0
- package/src/xmp/Xmp.ts +430 -0
- package/src/xmp/XmpBasic.ts +90 -0
- package/src/xmp/XmpMM.ts +82 -0
- package/src/xmp/XmpRights.ts +83 -0
- package/src/xmp/index.ts +36 -0
- package/src/xmp/internal/accessors.ts +72 -0
- package/src/xmp/internal/xml.ts +63 -0
|
@@ -0,0 +1,806 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RDF/JSON (https://www.w3.org/TR/rdf-json/), media type
|
|
3
|
+
* `application/rdf+json`.
|
|
4
|
+
*
|
|
5
|
+
* The document structure is described with Effect `Schema`s, so decoding
|
|
6
|
+
* validates the JSON shape and reports precise errors. `RdfJsonFromString`
|
|
7
|
+
* decodes JSON text into a typed `Document`, and `DatasetFromRdfJson` /
|
|
8
|
+
* `DatasetFromString` transform documents into core `Dataset`s and back.
|
|
9
|
+
*
|
|
10
|
+
* ## RDF 1.2 extensions
|
|
11
|
+
*
|
|
12
|
+
* RDF/JSON predates RDF 1.2. This module defines two backwards-compatible
|
|
13
|
+
* extensions, accepted when parsing by default and written only when
|
|
14
|
+
* `extensions: true` is passed to the serializer:
|
|
15
|
+
*
|
|
16
|
+
* - **Base direction**: a literal object with a `"lang"` may carry
|
|
17
|
+
* `"direction": "ltr" | "rtl"`, denoting a directional language-tagged
|
|
18
|
+
* string (`rdf:dirLangString`).
|
|
19
|
+
* - **Triple terms**: an object value `{ "type": "triple", "value": { … } }`
|
|
20
|
+
* whose `value` has `"subject"` (a `uri` or `bnode` value), `"predicate"`
|
|
21
|
+
* (a `uri` value) and `"object"` (any object value, including another
|
|
22
|
+
* triple term) members.
|
|
23
|
+
*
|
|
24
|
+
* ```json
|
|
25
|
+
* {
|
|
26
|
+
* "http://example.org/s": {
|
|
27
|
+
* "http://example.org/says": [
|
|
28
|
+
* { "type": "literal", "value": "שלום", "lang": "he", "direction": "rtl" },
|
|
29
|
+
* { "type": "triple", "value": {
|
|
30
|
+
* "subject": { "type": "uri", "value": "http://example.org/a" },
|
|
31
|
+
* "predicate": { "type": "uri", "value": "http://example.org/b" },
|
|
32
|
+
* "object": { "type": "literal", "value": "c" } } }
|
|
33
|
+
* ]
|
|
34
|
+
* }
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* RDF/JSON describes a single graph: serialising quads in named graphs fails
|
|
39
|
+
* unless `mergeGraphs: true` is given.
|
|
40
|
+
*
|
|
41
|
+
* @since 0.1.0
|
|
42
|
+
*/
|
|
43
|
+
import * as Arr from 'effect/Array';
|
|
44
|
+
import * as Effect from 'effect/Effect';
|
|
45
|
+
import { constVoid } from 'effect/Function';
|
|
46
|
+
import * as Iterable from 'effect/Iterable';
|
|
47
|
+
import * as Match from 'effect/Match';
|
|
48
|
+
import * as MutableHashSet from 'effect/MutableHashSet';
|
|
49
|
+
import * as Option from 'effect/Option';
|
|
50
|
+
import * as Order from 'effect/Order';
|
|
51
|
+
import * as Record from 'effect/Record';
|
|
52
|
+
import * as Result from 'effect/Result';
|
|
53
|
+
import * as Schema from 'effect/Schema';
|
|
54
|
+
import * as SchemaIssue from 'effect/SchemaIssue';
|
|
55
|
+
import * as SchemaTransformation from 'effect/SchemaTransformation';
|
|
56
|
+
import * as Dataset from '../Dataset.ts';
|
|
57
|
+
import * as PrefixMap from '../PrefixMap.ts';
|
|
58
|
+
import * as Serialization from '../Serialization.ts';
|
|
59
|
+
import * as Term from '../Term.ts';
|
|
60
|
+
import { parseJson } from './internal/json.ts';
|
|
61
|
+
|
|
62
|
+
const FORMAT_NAME = 'RDF/JSON';
|
|
63
|
+
const XSD_STRING = 'http://www.w3.org/2001/XMLSchema#string';
|
|
64
|
+
const RDF_LANG_STRING = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#langString';
|
|
65
|
+
const RDF_DIR_LANG_STRING = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#dirLangString';
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The RDF/JSON format description.
|
|
69
|
+
*
|
|
70
|
+
* @since 0.1.0
|
|
71
|
+
* @category formats
|
|
72
|
+
*/
|
|
73
|
+
export const format: Serialization.Format = Serialization.makeFormat({
|
|
74
|
+
name: FORMAT_NAME,
|
|
75
|
+
mediaType: 'application/rdf+json',
|
|
76
|
+
extensions: ['rj'],
|
|
77
|
+
datasets: false,
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
// Spans are named `RdfJson.parse`, `RdfJson.serialize`.
|
|
81
|
+
const trace: Serialization.SpanTarget = { module: 'RdfJson', format };
|
|
82
|
+
|
|
83
|
+
// -----------------------------------------------------------------------------
|
|
84
|
+
// Document model
|
|
85
|
+
// -----------------------------------------------------------------------------
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* An IRI value: `{ "type": "uri", "value": "http://…" }`.
|
|
89
|
+
*
|
|
90
|
+
* @since 0.1.0
|
|
91
|
+
* @category models
|
|
92
|
+
*/
|
|
93
|
+
export type UriValue = {
|
|
94
|
+
readonly type: 'uri';
|
|
95
|
+
readonly value: string;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* A blank node value: `{ "type": "bnode", "value": "_:label" }`.
|
|
100
|
+
*
|
|
101
|
+
* @since 0.1.0
|
|
102
|
+
* @category models
|
|
103
|
+
*/
|
|
104
|
+
export type BlankNodeValue = {
|
|
105
|
+
readonly type: 'bnode';
|
|
106
|
+
readonly value: string;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* A literal value. `lang` and `datatype` are mutually exclusive;
|
|
111
|
+
* `direction` is an RDF 1.2 extension that requires `lang`.
|
|
112
|
+
*
|
|
113
|
+
* @since 0.1.0
|
|
114
|
+
* @category models
|
|
115
|
+
*/
|
|
116
|
+
export type LiteralValue = {
|
|
117
|
+
readonly type: 'literal';
|
|
118
|
+
readonly value: string;
|
|
119
|
+
readonly lang?: string;
|
|
120
|
+
readonly datatype?: string;
|
|
121
|
+
readonly direction?: Term.Direction;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* An RDF 1.2 triple term value (extension).
|
|
126
|
+
*
|
|
127
|
+
* @since 0.1.0
|
|
128
|
+
* @category models
|
|
129
|
+
*/
|
|
130
|
+
export type TripleTermValue = {
|
|
131
|
+
readonly type: 'triple';
|
|
132
|
+
readonly value: {
|
|
133
|
+
readonly subject: UriValue | BlankNodeValue;
|
|
134
|
+
readonly predicate: UriValue;
|
|
135
|
+
readonly object: ObjectValue;
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Any value in the object position.
|
|
141
|
+
*
|
|
142
|
+
* @since 0.1.0
|
|
143
|
+
* @category models
|
|
144
|
+
*/
|
|
145
|
+
export type ObjectValue = UriValue | BlankNodeValue | LiteralValue | TripleTermValue;
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* An RDF/JSON document: subject → predicate → array of object values.
|
|
149
|
+
* Subjects are IRIs or blank node labels (`"_:label"`).
|
|
150
|
+
*
|
|
151
|
+
* @since 0.1.0
|
|
152
|
+
* @category models
|
|
153
|
+
*/
|
|
154
|
+
export interface Document {
|
|
155
|
+
readonly [subject: string]: { readonly [predicate: string]: ReadonlyArray<ObjectValue> };
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// -----------------------------------------------------------------------------
|
|
159
|
+
// Schemas
|
|
160
|
+
// -----------------------------------------------------------------------------
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* @since 0.1.0
|
|
164
|
+
* @category schemas
|
|
165
|
+
*/
|
|
166
|
+
export const UriValue: Schema.Codec<UriValue> = Schema.Struct({
|
|
167
|
+
type: Schema.Literal('uri'),
|
|
168
|
+
value: Schema.String,
|
|
169
|
+
}).annotate({ identifier: 'UriValue', description: 'An RDF/JSON IRI value' });
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* @since 0.1.0
|
|
173
|
+
* @category schemas
|
|
174
|
+
*/
|
|
175
|
+
export const BlankNodeValue: Schema.Codec<BlankNodeValue> = Schema.Struct({
|
|
176
|
+
type: Schema.Literal('bnode'),
|
|
177
|
+
value: Schema.String.check(
|
|
178
|
+
Schema.isPattern(/^_:.+$/s, { message: 'Blank node values must have the form "_:label"' }),
|
|
179
|
+
),
|
|
180
|
+
}).annotate({ identifier: 'BlankNodeValue', description: 'An RDF/JSON blank node value' });
|
|
181
|
+
|
|
182
|
+
const Direction = Schema.Literals(['ltr', 'rtl']);
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* @since 0.1.0
|
|
186
|
+
* @category schemas
|
|
187
|
+
*/
|
|
188
|
+
export const LiteralValue: Schema.Codec<LiteralValue> = Schema.Struct({
|
|
189
|
+
type: Schema.Literal('literal'),
|
|
190
|
+
value: Schema.String,
|
|
191
|
+
lang: Schema.optionalKey(
|
|
192
|
+
Schema.String.check(
|
|
193
|
+
Schema.isPattern(/^[a-zA-Z]+(-[a-zA-Z0-9]+)*$/, { message: 'Invalid language tag' }),
|
|
194
|
+
),
|
|
195
|
+
),
|
|
196
|
+
datatype: Schema.optionalKey(Schema.String),
|
|
197
|
+
direction: Schema.optionalKey(Direction),
|
|
198
|
+
})
|
|
199
|
+
.check(
|
|
200
|
+
Schema.makeFilter(
|
|
201
|
+
(l) =>
|
|
202
|
+
l.lang !== undefined &&
|
|
203
|
+
l.datatype !== undefined &&
|
|
204
|
+
l.datatype !== RDF_LANG_STRING &&
|
|
205
|
+
l.datatype !== RDF_DIR_LANG_STRING
|
|
206
|
+
? { path: ['datatype'], issue: '"datatype" cannot be combined with "lang"' }
|
|
207
|
+
: undefined,
|
|
208
|
+
{
|
|
209
|
+
identifier: 'LiteralLangDatatype',
|
|
210
|
+
title: 'Language or datatype',
|
|
211
|
+
description: 'A literal with a "lang" has no "datatype" other than rdf:langString',
|
|
212
|
+
},
|
|
213
|
+
),
|
|
214
|
+
Schema.makeFilter(
|
|
215
|
+
(l) =>
|
|
216
|
+
l.direction !== undefined && l.lang === undefined
|
|
217
|
+
? { path: ['direction'], issue: '"direction" requires "lang"' }
|
|
218
|
+
: undefined,
|
|
219
|
+
{
|
|
220
|
+
identifier: 'LiteralDirectionLang',
|
|
221
|
+
title: 'Direction requires language',
|
|
222
|
+
description: 'A literal with a "direction" also has a "lang"',
|
|
223
|
+
},
|
|
224
|
+
),
|
|
225
|
+
)
|
|
226
|
+
.annotate({ identifier: 'LiteralValue', description: 'An RDF/JSON literal value' });
|
|
227
|
+
|
|
228
|
+
const SubjectValue = Schema.Union([UriValue, BlankNodeValue]);
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* An RDF 1.2 triple term (extension).
|
|
232
|
+
*
|
|
233
|
+
* @since 0.1.0
|
|
234
|
+
* @category schemas
|
|
235
|
+
*/
|
|
236
|
+
export const TripleTermValue: Schema.Codec<TripleTermValue> = Schema.Struct({
|
|
237
|
+
type: Schema.Literal('triple'),
|
|
238
|
+
value: Schema.Struct({
|
|
239
|
+
subject: SubjectValue,
|
|
240
|
+
predicate: UriValue,
|
|
241
|
+
object: Schema.suspend((): Schema.Codec<ObjectValue> => ObjectValue),
|
|
242
|
+
}),
|
|
243
|
+
}).annotate({ identifier: 'TripleTermValue', description: 'An RDF 1.2 triple term (extension)' });
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Any object value, including the RDF 1.2 extensions.
|
|
247
|
+
*
|
|
248
|
+
* @since 0.1.0
|
|
249
|
+
* @category schemas
|
|
250
|
+
*/
|
|
251
|
+
export const ObjectValue: Schema.Codec<ObjectValue> = Schema.Union([
|
|
252
|
+
UriValue,
|
|
253
|
+
BlankNodeValue,
|
|
254
|
+
LiteralValue,
|
|
255
|
+
TripleTermValue,
|
|
256
|
+
]).annotate({
|
|
257
|
+
expected: 'an RDF/JSON value ("type" must be "uri", "bnode", "literal" or "triple")',
|
|
258
|
+
});
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* The type of an object value in strict RDF/JSON (the `StrictObjectValue`
|
|
262
|
+
* schema's decoded type).
|
|
263
|
+
*
|
|
264
|
+
* @since 0.1.0
|
|
265
|
+
* @category models
|
|
266
|
+
*/
|
|
267
|
+
export type StrictObjectValue = typeof StrictObjectValue.Type;
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* An object value in strict RDF/JSON: no triple terms and no base
|
|
271
|
+
* direction.
|
|
272
|
+
*
|
|
273
|
+
* @since 0.1.0
|
|
274
|
+
* @category schemas
|
|
275
|
+
*/
|
|
276
|
+
export const StrictObjectValue: Schema.Codec<UriValue | BlankNodeValue | LiteralValue> =
|
|
277
|
+
Schema.Union([
|
|
278
|
+
UriValue,
|
|
279
|
+
BlankNodeValue,
|
|
280
|
+
LiteralValue.check(
|
|
281
|
+
Schema.makeFilter(
|
|
282
|
+
(l) =>
|
|
283
|
+
l.direction !== undefined
|
|
284
|
+
? {
|
|
285
|
+
path: ['direction'],
|
|
286
|
+
issue: '"direction" is an RDF 1.2 extension (disabled in strict mode)',
|
|
287
|
+
}
|
|
288
|
+
: undefined,
|
|
289
|
+
{
|
|
290
|
+
identifier: 'StrictLiteralDirection',
|
|
291
|
+
title: 'No base direction',
|
|
292
|
+
description: 'A strict RDF/JSON literal has no "direction"',
|
|
293
|
+
},
|
|
294
|
+
),
|
|
295
|
+
),
|
|
296
|
+
]).annotate({
|
|
297
|
+
expected: 'an RDF/JSON value ("type" must be "uri", "bnode" or "literal")',
|
|
298
|
+
});
|
|
299
|
+
|
|
300
|
+
const makeDocument = (value: Schema.Codec<ObjectValue>): Schema.Codec<Document> =>
|
|
301
|
+
Schema.Record(Schema.String, Schema.Record(Schema.String, Schema.Array(value)));
|
|
302
|
+
|
|
303
|
+
/**
|
|
304
|
+
* An RDF/JSON document, accepting the RDF 1.2 extensions.
|
|
305
|
+
*
|
|
306
|
+
* @since 0.1.0
|
|
307
|
+
* @category schemas
|
|
308
|
+
*/
|
|
309
|
+
export const Document: Schema.Codec<Document> = makeDocument(ObjectValue).annotate({
|
|
310
|
+
description: 'An RDF/JSON document (with the RDF 1.2 extensions)',
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* A strict RDF/JSON document, rejecting the RDF 1.2 extensions.
|
|
315
|
+
*
|
|
316
|
+
* @since 0.1.0
|
|
317
|
+
* @category schemas
|
|
318
|
+
*/
|
|
319
|
+
export const StrictDocument: Schema.Codec<Document> = makeDocument(StrictObjectValue).annotate({
|
|
320
|
+
description: 'A strict RDF/JSON document',
|
|
321
|
+
});
|
|
322
|
+
|
|
323
|
+
/**
|
|
324
|
+
* The decoded type of `RdfJsonFromString`: a validated `Document`.
|
|
325
|
+
*
|
|
326
|
+
* @since 0.1.0
|
|
327
|
+
* @category models
|
|
328
|
+
*/
|
|
329
|
+
export type RdfJsonFromString = typeof RdfJsonFromString.Type;
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* Decodes RDF/JSON text into a validated `Document` (and encodes documents
|
|
333
|
+
* as JSON text).
|
|
334
|
+
*
|
|
335
|
+
* @since 0.1.0
|
|
336
|
+
* @category schemas
|
|
337
|
+
*/
|
|
338
|
+
export const RdfJsonFromString: Schema.Codec<Document, string> = Schema.fromJsonString(Document);
|
|
339
|
+
|
|
340
|
+
// -----------------------------------------------------------------------------
|
|
341
|
+
// Conversions
|
|
342
|
+
// -----------------------------------------------------------------------------
|
|
343
|
+
|
|
344
|
+
/**
|
|
345
|
+
* Options for converting RDF/JSON documents to datasets.
|
|
346
|
+
*
|
|
347
|
+
* @since 0.1.0
|
|
348
|
+
* @category models
|
|
349
|
+
*/
|
|
350
|
+
export interface ToDatasetOptions {
|
|
351
|
+
/** The graph to place triples in. Defaults to the default graph. */
|
|
352
|
+
readonly graph?: Term.Graph | undefined;
|
|
353
|
+
/**
|
|
354
|
+
* Prefix for blank node labels. Defaults to a fresh prefix per document,
|
|
355
|
+
* so that blank nodes from different documents never clash.
|
|
356
|
+
*/
|
|
357
|
+
readonly blankNodePrefix?: string | undefined;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
/**
|
|
361
|
+
* Converts a (validated) RDF/JSON document to a dataset.
|
|
362
|
+
*
|
|
363
|
+
* @since 0.1.0
|
|
364
|
+
* @category conversions
|
|
365
|
+
*/
|
|
366
|
+
export const toDataset = (document: Document, options?: ToDatasetOptions): Dataset.Dataset => {
|
|
367
|
+
const prefix = options?.blankNodePrefix ?? Serialization.freshBlankNodePrefix();
|
|
368
|
+
const graph = options?.graph ?? Term.defaultGraph;
|
|
369
|
+
const blank = (label: string) => new Term.BlankNode(prefix + label.slice(2));
|
|
370
|
+
const subjectTerm = (key: string): Term.NamedNode | Term.BlankNode =>
|
|
371
|
+
key.startsWith('_:') ? blank(key) : new Term.NamedNode(key);
|
|
372
|
+
// Built once per document: `objectTerm` runs for every object value.
|
|
373
|
+
const objectTerm: (v: ObjectValue) => Term.Object = Match.type<ObjectValue>().pipe(
|
|
374
|
+
Match.withReturnType<Term.Object>(),
|
|
375
|
+
Match.when({ type: 'uri' }, (v) => new Term.NamedNode(v.value)),
|
|
376
|
+
Match.when({ type: 'bnode' }, (v) => blank(v.value)),
|
|
377
|
+
Match.when({ type: 'literal' }, (v) => {
|
|
378
|
+
if (v.lang !== undefined) {
|
|
379
|
+
return Term.literal(
|
|
380
|
+
v.value,
|
|
381
|
+
v.direction !== undefined ? { language: v.lang, direction: v.direction } : v.lang,
|
|
382
|
+
);
|
|
383
|
+
}
|
|
384
|
+
return Term.literal(v.value, new Term.NamedNode(v.datatype ?? XSD_STRING));
|
|
385
|
+
}),
|
|
386
|
+
Match.when(
|
|
387
|
+
{ type: 'triple' },
|
|
388
|
+
(v) =>
|
|
389
|
+
new Term.Triple(
|
|
390
|
+
v.value.subject.type === 'uri'
|
|
391
|
+
? new Term.NamedNode(v.value.subject.value)
|
|
392
|
+
: blank(v.value.subject.value),
|
|
393
|
+
new Term.NamedNode(v.value.predicate.value),
|
|
394
|
+
objectTerm(v.value.object),
|
|
395
|
+
),
|
|
396
|
+
),
|
|
397
|
+
Match.exhaustive,
|
|
398
|
+
);
|
|
399
|
+
return Dataset.mutate(Dataset.empty, (b) =>
|
|
400
|
+
Arr.forEach(Record.toEntries(document), ([s, predicates]) => {
|
|
401
|
+
const subject = subjectTerm(s);
|
|
402
|
+
Arr.forEach(Record.toEntries(predicates), ([p, objects]) => {
|
|
403
|
+
const predicate = new Term.NamedNode(p);
|
|
404
|
+
Arr.forEach(objects, (o) => b.add(new Term.Quad(subject, predicate, objectTerm(o), graph)));
|
|
405
|
+
});
|
|
406
|
+
}),
|
|
407
|
+
);
|
|
408
|
+
};
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* Options for converting quads to RDF/JSON.
|
|
412
|
+
*
|
|
413
|
+
* @since 0.1.0
|
|
414
|
+
* @category models
|
|
415
|
+
*/
|
|
416
|
+
export interface FromQuadsOptions {
|
|
417
|
+
/**
|
|
418
|
+
* Whether to use the RDF 1.2 extensions (base direction and triple terms).
|
|
419
|
+
* When `false` (the default), data that needs them is rejected with an
|
|
420
|
+
* `RdfSerializeError`.
|
|
421
|
+
*/
|
|
422
|
+
readonly extensions?: boolean | undefined;
|
|
423
|
+
/**
|
|
424
|
+
* Whether to merge quads from named graphs into the single RDF/JSON graph.
|
|
425
|
+
* When `false` (the default), quads in named graphs are rejected.
|
|
426
|
+
*/
|
|
427
|
+
readonly mergeGraphs?: boolean | undefined;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
class SerializeFailure {
|
|
431
|
+
readonly message: string;
|
|
432
|
+
constructor(message: string) {
|
|
433
|
+
this.message = message;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
// Subject, predicate, object only — not `Term.QuadOrder`, which sorts by graph first: RDF/JSON
|
|
438
|
+
// has no graphs, so quads from every graph interleave by their triple.
|
|
439
|
+
const quadOrder: Order.Order<Term.Quad> = Order.combineAll([
|
|
440
|
+
Order.mapInput(Term.Order, (q: Term.Quad) => q.subject),
|
|
441
|
+
Order.mapInput(Term.Order, (q: Term.Quad) => q.predicate),
|
|
442
|
+
Order.mapInput(Term.Order, (q: Term.Quad) => q.object),
|
|
443
|
+
]);
|
|
444
|
+
|
|
445
|
+
const failSerialize = (message: string): never => {
|
|
446
|
+
throw new SerializeFailure(message);
|
|
447
|
+
};
|
|
448
|
+
|
|
449
|
+
const resourceValue = (t: Term.NamedNode | Term.BlankNode): UriValue | BlankNodeValue =>
|
|
450
|
+
Term.isNamedNode(t) ? { type: 'uri', value: t.value } : { type: 'bnode', value: `_:${t.value}` };
|
|
451
|
+
|
|
452
|
+
const fromQuadsUnsafe = (quads: Iterable<Term.Quad>, options: FromQuadsOptions): Document => {
|
|
453
|
+
const extensions = options.extensions ?? false;
|
|
454
|
+
// Built once per serialisation: `objectValue` runs for every object term.
|
|
455
|
+
const objectValue: (t: Term.Object) => ObjectValue = Match.type<Term.Object>().pipe(
|
|
456
|
+
Match.withReturnType<ObjectValue>(),
|
|
457
|
+
Match.tag('NamedNode', 'BlankNode', (t) => resourceValue(t)),
|
|
458
|
+
Match.tag('Literal', (t) => {
|
|
459
|
+
if (t.language !== '') {
|
|
460
|
+
if (t.direction === undefined) return { type: 'literal', value: t.value, lang: t.language };
|
|
461
|
+
if (!extensions) {
|
|
462
|
+
failSerialize(
|
|
463
|
+
`The literal ${t.key} has a base direction, which requires the RDF/JSON extensions`,
|
|
464
|
+
);
|
|
465
|
+
}
|
|
466
|
+
return { type: 'literal', value: t.value, lang: t.language, direction: t.direction };
|
|
467
|
+
}
|
|
468
|
+
return t.datatype.value === XSD_STRING
|
|
469
|
+
? { type: 'literal', value: t.value }
|
|
470
|
+
: { type: 'literal', value: t.value, datatype: t.datatype.value };
|
|
471
|
+
}),
|
|
472
|
+
Match.tag('Triple', (t) => {
|
|
473
|
+
if (!extensions) {
|
|
474
|
+
failSerialize(`The triple term ${t.key} requires the RDF/JSON extensions`);
|
|
475
|
+
}
|
|
476
|
+
const subject = t.subject;
|
|
477
|
+
if (Term.isTriple(subject)) {
|
|
478
|
+
throw new SerializeFailure(`Triple terms cannot have triple terms as subjects: ${t.key}`);
|
|
479
|
+
}
|
|
480
|
+
return {
|
|
481
|
+
type: 'triple',
|
|
482
|
+
value: {
|
|
483
|
+
subject: resourceValue(subject),
|
|
484
|
+
predicate: { type: 'uri', value: t.predicate.value },
|
|
485
|
+
object: objectValue(t.object),
|
|
486
|
+
},
|
|
487
|
+
};
|
|
488
|
+
}),
|
|
489
|
+
Match.exhaustive,
|
|
490
|
+
);
|
|
491
|
+
const merge = options.mergeGraphs ?? false;
|
|
492
|
+
const seen = MutableHashSet.empty<string>();
|
|
493
|
+
const sorted = Arr.sort(quads, quadOrder);
|
|
494
|
+
const document: { [subject: string]: { [predicate: string]: Array<ObjectValue> } } = {};
|
|
495
|
+
Arr.forEach(sorted, (q) => {
|
|
496
|
+
if (!Term.isDefaultGraph(q.graph) && !merge) {
|
|
497
|
+
failSerialize(`RDF/JSON cannot represent named graphs (found graph ${q.graph.key})`);
|
|
498
|
+
}
|
|
499
|
+
const tripleKey = `${q.subject.key} ${q.predicate.key} ${q.object.key}`;
|
|
500
|
+
if (MutableHashSet.has(seen, tripleKey)) return;
|
|
501
|
+
MutableHashSet.add(seen, tripleKey);
|
|
502
|
+
const subject = q.subject;
|
|
503
|
+
if (Term.isTriple(subject)) {
|
|
504
|
+
throw new SerializeFailure('RDF/JSON cannot represent triple terms as subjects');
|
|
505
|
+
}
|
|
506
|
+
const s = Term.isNamedNode(subject) ? subject.value : `_:${subject.value}`;
|
|
507
|
+
const predicates = (document[s] ??= {});
|
|
508
|
+
(predicates[q.predicate.value] ??= []).push(objectValue(q.object));
|
|
509
|
+
});
|
|
510
|
+
return document;
|
|
511
|
+
};
|
|
512
|
+
|
|
513
|
+
/**
|
|
514
|
+
* Converts quads to an RDF/JSON document.
|
|
515
|
+
*
|
|
516
|
+
* @since 0.1.0
|
|
517
|
+
* @category conversions
|
|
518
|
+
*/
|
|
519
|
+
export const fromQuads = (
|
|
520
|
+
quads: Iterable<Term.Quad>,
|
|
521
|
+
options?: FromQuadsOptions,
|
|
522
|
+
): Effect.Effect<Document, Serialization.RdfSerializeError> =>
|
|
523
|
+
Effect.try({
|
|
524
|
+
try: () => fromQuadsUnsafe(quads, options ?? {}),
|
|
525
|
+
// Anything but a `SerializeFailure` is a bug: rethrown, it becomes a defect.
|
|
526
|
+
catch: (e) => {
|
|
527
|
+
if (e instanceof SerializeFailure) {
|
|
528
|
+
return new Serialization.RdfSerializeError({ format: FORMAT_NAME, message: e.message });
|
|
529
|
+
}
|
|
530
|
+
throw e;
|
|
531
|
+
},
|
|
532
|
+
});
|
|
533
|
+
|
|
534
|
+
/**
|
|
535
|
+
* Builds a schema transforming RDF/JSON documents into datasets and back,
|
|
536
|
+
* with the given conversion options.
|
|
537
|
+
*
|
|
538
|
+
* @since 0.1.0
|
|
539
|
+
* @category schemas
|
|
540
|
+
*/
|
|
541
|
+
export const makeDatasetSchema = (
|
|
542
|
+
options?: ToDatasetOptions & FromQuadsOptions & { readonly strict?: boolean | undefined },
|
|
543
|
+
): Schema.Codec<Dataset.Dataset, Document> =>
|
|
544
|
+
(options?.strict === true ? StrictDocument : Document).pipe(
|
|
545
|
+
Schema.decodeTo(
|
|
546
|
+
Dataset.DatasetSchema,
|
|
547
|
+
SchemaTransformation.transformEffect({
|
|
548
|
+
decode: (document: Document) => Effect.sync(() => toDataset(document, options)),
|
|
549
|
+
encode: (dataset: Dataset.Dataset) =>
|
|
550
|
+
fromQuads(dataset, options).pipe(
|
|
551
|
+
Effect.mapError((e) => new SchemaIssue.InvalidValue({ message: e.message }, dataset)),
|
|
552
|
+
),
|
|
553
|
+
}),
|
|
554
|
+
),
|
|
555
|
+
);
|
|
556
|
+
|
|
557
|
+
/**
|
|
558
|
+
* A schema transforming RDF/JSON documents into datasets and back. Decoding
|
|
559
|
+
* accepts the RDF 1.2 extensions; encoding writes strict RDF/JSON and fails
|
|
560
|
+
* for data that needs the extensions or uses named graphs.
|
|
561
|
+
*
|
|
562
|
+
* @since 0.1.0
|
|
563
|
+
* @category schemas
|
|
564
|
+
*/
|
|
565
|
+
export const DatasetFromRdfJson: Schema.Codec<Dataset.Dataset, Document> = makeDatasetSchema();
|
|
566
|
+
|
|
567
|
+
/**
|
|
568
|
+
* The decoded type of `DatasetFromString`: a `Dataset`.
|
|
569
|
+
*
|
|
570
|
+
* @since 0.1.0
|
|
571
|
+
* @category models
|
|
572
|
+
*/
|
|
573
|
+
export type DatasetFromString = typeof DatasetFromString.Type;
|
|
574
|
+
|
|
575
|
+
/**
|
|
576
|
+
* A schema transforming RDF/JSON text into datasets and back.
|
|
577
|
+
*
|
|
578
|
+
* @since 0.1.0
|
|
579
|
+
* @category schemas
|
|
580
|
+
*/
|
|
581
|
+
export const DatasetFromString: Schema.Codec<Dataset.Dataset, string> = Schema.fromJsonString(
|
|
582
|
+
DatasetFromRdfJson,
|
|
583
|
+
{ space: 2 },
|
|
584
|
+
);
|
|
585
|
+
|
|
586
|
+
// -----------------------------------------------------------------------------
|
|
587
|
+
// Parser / serializer
|
|
588
|
+
// -----------------------------------------------------------------------------
|
|
589
|
+
|
|
590
|
+
/**
|
|
591
|
+
* Options for parsing RDF/JSON.
|
|
592
|
+
*
|
|
593
|
+
* @since 0.1.0
|
|
594
|
+
* @category models
|
|
595
|
+
*/
|
|
596
|
+
export interface ParseOptions extends Serialization.ParseOptions {
|
|
597
|
+
/** Reject the RDF 1.2 extensions. Defaults to `false`. */
|
|
598
|
+
readonly strict?: boolean | undefined;
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
/**
|
|
602
|
+
* Finds the offset of the first JSON syntax error (JavaScript engines do not
|
|
603
|
+
* always report one). Only used once `JSON.parse` has failed.
|
|
604
|
+
*/
|
|
605
|
+
const jsonErrorOffset = (input: string): number => {
|
|
606
|
+
let i = 0;
|
|
607
|
+
const ws = () => {
|
|
608
|
+
WHITESPACE.lastIndex = i;
|
|
609
|
+
i += WHITESPACE.exec(input)?.[0].length ?? 0;
|
|
610
|
+
};
|
|
611
|
+
const fail = (): never => {
|
|
612
|
+
throw i;
|
|
613
|
+
};
|
|
614
|
+
const string = () => {
|
|
615
|
+
// The longest well-formed prefix of the string; it fails where it stops
|
|
616
|
+
// unless a closing quote follows.
|
|
617
|
+
STRING_PREFIX.lastIndex = i;
|
|
618
|
+
i += STRING_PREFIX.exec(input)?.[0].length ?? 0;
|
|
619
|
+
if (input[i] !== '"') fail();
|
|
620
|
+
i++;
|
|
621
|
+
};
|
|
622
|
+
const NUMBER = /-?(?:0|[1-9][0-9]*)(?:\.[0-9]+)?(?:[eE][+-]?[0-9]+)?/y;
|
|
623
|
+
/** The members of an object or the items of an array, up to the closing `end`. */
|
|
624
|
+
const elements = (end: string, element: () => void) => {
|
|
625
|
+
i++;
|
|
626
|
+
ws();
|
|
627
|
+
if (input[i] === end) {
|
|
628
|
+
i++;
|
|
629
|
+
return;
|
|
630
|
+
}
|
|
631
|
+
repeat(() => {
|
|
632
|
+
element();
|
|
633
|
+
ws();
|
|
634
|
+
if (input[i] === ',') {
|
|
635
|
+
i++;
|
|
636
|
+
return true;
|
|
637
|
+
}
|
|
638
|
+
if (input[i] !== end) fail();
|
|
639
|
+
i++;
|
|
640
|
+
return false;
|
|
641
|
+
});
|
|
642
|
+
};
|
|
643
|
+
const member = () => {
|
|
644
|
+
ws();
|
|
645
|
+
if (input[i] !== '"') fail();
|
|
646
|
+
string();
|
|
647
|
+
ws();
|
|
648
|
+
if (input[i] !== ':') fail();
|
|
649
|
+
i++;
|
|
650
|
+
value();
|
|
651
|
+
};
|
|
652
|
+
const value = (): void => {
|
|
653
|
+
ws();
|
|
654
|
+
const c = input[i];
|
|
655
|
+
if (c === '{') elements('}', member);
|
|
656
|
+
else if (c === '[') elements(']', value);
|
|
657
|
+
else if (c === '"') string();
|
|
658
|
+
else if (input.startsWith('true', i)) i += 4;
|
|
659
|
+
else if (input.startsWith('false', i)) i += 5;
|
|
660
|
+
else if (input.startsWith('null', i)) i += 4;
|
|
661
|
+
else {
|
|
662
|
+
NUMBER.lastIndex = i;
|
|
663
|
+
const m = NUMBER.exec(input);
|
|
664
|
+
if (m === null) return fail();
|
|
665
|
+
i += m[0].length;
|
|
666
|
+
}
|
|
667
|
+
};
|
|
668
|
+
const scan = () => {
|
|
669
|
+
value();
|
|
670
|
+
ws();
|
|
671
|
+
return i;
|
|
672
|
+
};
|
|
673
|
+
// `fail` throws at the offending offset, which is `i`.
|
|
674
|
+
return Result.getOrElse(Result.try(scan), () => i);
|
|
675
|
+
};
|
|
676
|
+
|
|
677
|
+
const WHITESPACE = /[ \t\n\r]*/y;
|
|
678
|
+
|
|
679
|
+
/**
|
|
680
|
+
* The longest well-formed prefix of a JSON string, from its opening quote:
|
|
681
|
+
* any character but `"`, `\` and U+0000–U+001F (the C0 controls; DEL and the
|
|
682
|
+
* C1 controls are allowed), or an escape.
|
|
683
|
+
*/
|
|
684
|
+
const STRING_PREFIX = /"(?:[^"\\\p{Cc}]|[\x7f-\x9f]|\\(?:["\\/bfnrt]|u[0-9a-fA-F]{4}))*/uy;
|
|
685
|
+
|
|
686
|
+
/** Runs `step` until it returns `false`. */
|
|
687
|
+
const repeat = (step: () => boolean): void =>
|
|
688
|
+
Iterable.forEach(
|
|
689
|
+
Iterable.unfold(true, (again) =>
|
|
690
|
+
again ? Option.some([undefined, step()] as const) : Option.none(),
|
|
691
|
+
),
|
|
692
|
+
constVoid,
|
|
693
|
+
);
|
|
694
|
+
|
|
695
|
+
const jsonErrorPosition = (input: string) => {
|
|
696
|
+
const offset = jsonErrorOffset(input);
|
|
697
|
+
const before = input.slice(0, offset);
|
|
698
|
+
const line = before.split('\n').length;
|
|
699
|
+
return { line, column: offset - before.lastIndexOf('\n') };
|
|
700
|
+
};
|
|
701
|
+
|
|
702
|
+
/**
|
|
703
|
+
* Parses RDF/JSON text into a dataset. The document shape is validated with
|
|
704
|
+
* the `Document` schema (or `StrictDocument` when `strict` is set), and
|
|
705
|
+
* validation failures are reported as `RdfParseError`s.
|
|
706
|
+
*
|
|
707
|
+
* @since 0.1.0
|
|
708
|
+
* @category parsing
|
|
709
|
+
*/
|
|
710
|
+
export const parse = (
|
|
711
|
+
input: string,
|
|
712
|
+
options?: ParseOptions,
|
|
713
|
+
): Effect.Effect<Serialization.ParseResult, Serialization.RdfParseError> =>
|
|
714
|
+
Effect.gen(function* () {
|
|
715
|
+
const json = yield* Effect.fromResult(parseJson(input)).pipe(
|
|
716
|
+
Effect.mapError(
|
|
717
|
+
(e) =>
|
|
718
|
+
new Serialization.RdfParseError({
|
|
719
|
+
format: FORMAT_NAME,
|
|
720
|
+
message: `Invalid JSON: ${e.message}`,
|
|
721
|
+
...jsonErrorPosition(input),
|
|
722
|
+
}),
|
|
723
|
+
),
|
|
724
|
+
);
|
|
725
|
+
const document = yield* Schema.decodeUnknownEffect(
|
|
726
|
+
options?.strict === true ? StrictDocument : Document,
|
|
727
|
+
)(json).pipe(
|
|
728
|
+
Effect.mapError(
|
|
729
|
+
(e) => new Serialization.RdfParseError({ format: FORMAT_NAME, message: e.message }),
|
|
730
|
+
),
|
|
731
|
+
);
|
|
732
|
+
return {
|
|
733
|
+
dataset: toDataset(document, options),
|
|
734
|
+
prefixes: PrefixMap.empty,
|
|
735
|
+
baseIri: options?.baseIri,
|
|
736
|
+
};
|
|
737
|
+
}).pipe(Serialization.withParseSpan(trace, input));
|
|
738
|
+
|
|
739
|
+
/**
|
|
740
|
+
* Options for serialising RDF/JSON.
|
|
741
|
+
*
|
|
742
|
+
* @since 0.1.0
|
|
743
|
+
* @category models
|
|
744
|
+
*/
|
|
745
|
+
export interface SerializeOptions extends Serialization.SerializeOptions, FromQuadsOptions {
|
|
746
|
+
/** Indentation passed to `JSON.stringify`. Defaults to 2 spaces. */
|
|
747
|
+
readonly space?: number | string | undefined;
|
|
748
|
+
}
|
|
749
|
+
|
|
750
|
+
/**
|
|
751
|
+
* Serialises quads as RDF/JSON text.
|
|
752
|
+
*
|
|
753
|
+
* @since 0.1.0
|
|
754
|
+
* @category serializing
|
|
755
|
+
*/
|
|
756
|
+
export const serialize = (
|
|
757
|
+
quads: Iterable<Term.Quad>,
|
|
758
|
+
options?: SerializeOptions,
|
|
759
|
+
): Effect.Effect<string, Serialization.RdfSerializeError> =>
|
|
760
|
+
fromQuads(quads, options).pipe(
|
|
761
|
+
Effect.flatMap((document) =>
|
|
762
|
+
Schema.encodeEffect(Schema.fromJsonString(Schema.Unknown, { space: options?.space ?? 2 }))(
|
|
763
|
+
document,
|
|
764
|
+
).pipe(
|
|
765
|
+
Effect.mapError(
|
|
766
|
+
(e) => new Serialization.RdfSerializeError({ format: FORMAT_NAME, message: e.message }),
|
|
767
|
+
),
|
|
768
|
+
),
|
|
769
|
+
),
|
|
770
|
+
Effect.map((text) => `${text}\n`),
|
|
771
|
+
Serialization.withSerializeSpan(trace),
|
|
772
|
+
);
|
|
773
|
+
|
|
774
|
+
/**
|
|
775
|
+
* The RDF/JSON parser.
|
|
776
|
+
*
|
|
777
|
+
* @since 0.1.0
|
|
778
|
+
* @category parsing
|
|
779
|
+
*/
|
|
780
|
+
export const parser: Serialization.Parser<ParseOptions> = Serialization.makeParser({
|
|
781
|
+
format,
|
|
782
|
+
parse,
|
|
783
|
+
});
|
|
784
|
+
|
|
785
|
+
/**
|
|
786
|
+
* The RDF/JSON serializer.
|
|
787
|
+
*
|
|
788
|
+
* @since 0.1.0
|
|
789
|
+
* @category serializing
|
|
790
|
+
*/
|
|
791
|
+
export const serializer: Serialization.Serializer<SerializeOptions> = Serialization.makeSerializer({
|
|
792
|
+
format,
|
|
793
|
+
serialize,
|
|
794
|
+
});
|
|
795
|
+
|
|
796
|
+
/**
|
|
797
|
+
* The RDF/JSON codec. Its `schema` is `DatasetFromString`, so decoding
|
|
798
|
+
* errors carry the precise schema issue.
|
|
799
|
+
*
|
|
800
|
+
* @since 0.1.0
|
|
801
|
+
* @category codecs
|
|
802
|
+
*/
|
|
803
|
+
export const codec: Serialization.Codec<ParseOptions, SerializeOptions> = {
|
|
804
|
+
...Serialization.makeCodec(parser, serializer),
|
|
805
|
+
schema: DatasetFromString,
|
|
806
|
+
};
|