@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
package/src/n3/Model.ts
ADDED
|
@@ -0,0 +1,696 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Notation3 data model.
|
|
3
|
+
*
|
|
4
|
+
* N3 extends RDF with quoted graphs (formulas), first-class lists
|
|
5
|
+
* (collections), universally quantified variables and literals or other
|
|
6
|
+
* non-IRI terms in any position of a statement. Core RDF `Quad`s only allow
|
|
7
|
+
* ground terms, so this module defines an N3-specific model on top of the
|
|
8
|
+
* core term classes:
|
|
9
|
+
*
|
|
10
|
+
* - `N3Term` = core `NamedNode` | `BlankNode` | `Literal` | `Variable`, plus
|
|
11
|
+
* the N3-only `Collection` (an N3 list) and `Formula` (a graph term).
|
|
12
|
+
* - `Statement` — a triple of arbitrary `N3Term`s.
|
|
13
|
+
* - `Formula` — an unordered set of statements. Formulas are values: two
|
|
14
|
+
* formulas with the same statements are equal (`Equal.equals`), which
|
|
15
|
+
* matches the N3 semantics of graph terms.
|
|
16
|
+
* - `Document` — a parsed N3 document: its top-level formula together with
|
|
17
|
+
* the prefixes and base IRI it declared.
|
|
18
|
+
*
|
|
19
|
+
* Quick variables (`?x`) are represented by core `Term.Variable`s. Blank
|
|
20
|
+
* nodes keep their core representation; a blank node is implicitly
|
|
21
|
+
* existentially quantified in the innermost formula that contains all of its
|
|
22
|
+
* occurrences.
|
|
23
|
+
*
|
|
24
|
+
* Like core terms, `Collection`, `Formula` and `Statement` implement `Equal`
|
|
25
|
+
* and `Hash` through a canonical `key`.
|
|
26
|
+
*
|
|
27
|
+
* @since 0.1.0
|
|
28
|
+
*/
|
|
29
|
+
import * as Arr from 'effect/Array';
|
|
30
|
+
import * as Equal from 'effect/Equal';
|
|
31
|
+
import * as Hash from 'effect/Hash';
|
|
32
|
+
import { NodeInspectSymbol } from 'effect/Inspectable';
|
|
33
|
+
import * as MutableHashMap from 'effect/MutableHashMap';
|
|
34
|
+
import { pipeArguments, type Pipeable } from 'effect/Pipeable';
|
|
35
|
+
import * as Order from 'effect/Order';
|
|
36
|
+
import { hasProperty } from 'effect/Predicate';
|
|
37
|
+
import * as Schema from 'effect/Schema';
|
|
38
|
+
import * as SchemaTransformation from 'effect/SchemaTransformation';
|
|
39
|
+
import * as PrefixMap from '../PrefixMap.ts';
|
|
40
|
+
import * as Term from '../Term.ts';
|
|
41
|
+
import * as Guards from './internal/guards.ts';
|
|
42
|
+
import { loop } from './internal/loop.ts';
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* @since 0.1.0
|
|
46
|
+
* @category symbols
|
|
47
|
+
*/
|
|
48
|
+
export const TypeId: unique symbol = Symbol.for('@thomasfosterau/effect-rdf/n3/Model');
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @since 0.1.0
|
|
52
|
+
* @category symbols
|
|
53
|
+
*/
|
|
54
|
+
export type TypeId = typeof TypeId;
|
|
55
|
+
|
|
56
|
+
abstract class N3Base implements Equal.Equal, Pipeable {
|
|
57
|
+
readonly [TypeId]: TypeId = TypeId;
|
|
58
|
+
abstract readonly _tag: string;
|
|
59
|
+
/** The key once computed (no key is empty: the shortest are `()` and `{}`). */
|
|
60
|
+
#key = '';
|
|
61
|
+
/** The hash once computed (0 until then; a hash of 0 is merely computed again). */
|
|
62
|
+
#hash = 0;
|
|
63
|
+
|
|
64
|
+
/** A canonical, N3-like serialisation used for equality and hashing. */
|
|
65
|
+
get key(): string {
|
|
66
|
+
if (this.#key === '') this.#key = this.computeKey();
|
|
67
|
+
return this.#key;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
protected abstract computeKey(): string;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Statements, collections and formulas override this to combine their
|
|
74
|
+
* parts' hashes, so that a formula deduplicating its statements builds no
|
|
75
|
+
* key; whatever the override, equal keys give equal hashes.
|
|
76
|
+
*/
|
|
77
|
+
protected computeHash(): number {
|
|
78
|
+
return Hash.string(this.key);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/** RDF/JS-style alias of `_tag`. */
|
|
82
|
+
get termType(): this['_tag'] {
|
|
83
|
+
return this._tag;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
equals(that: unknown): boolean {
|
|
87
|
+
return isN3Base(that) && that.key === this.key;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
[Equal.symbol](that: Equal.Equal): boolean {
|
|
91
|
+
return this.equals(that);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
[Hash.symbol](): number {
|
|
95
|
+
if (this.#hash === 0) this.#hash = this.computeHash();
|
|
96
|
+
return this.#hash;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
pipe() {
|
|
100
|
+
return pipeArguments(this, arguments);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
toString(): string {
|
|
104
|
+
return this.key;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
toJSON(): unknown {
|
|
108
|
+
return { _tag: this._tag, value: this.key };
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
[NodeInspectSymbol](): string {
|
|
112
|
+
return `${this._tag}(${this.key})`;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** Whether a value is an N3 collection, statement or formula (it carries the `TypeId`). */
|
|
117
|
+
const isN3Base = (u: unknown): u is N3Base => hasProperty(u, TypeId);
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* An N3 list (collection): an ordered, first-class sequence of terms,
|
|
121
|
+
* written `( a b c )`. The empty collection corresponds to `rdf:nil`.
|
|
122
|
+
*
|
|
123
|
+
* @since 0.1.0
|
|
124
|
+
* @category models
|
|
125
|
+
*/
|
|
126
|
+
export class Collection extends N3Base {
|
|
127
|
+
readonly _tag = 'Collection' as const;
|
|
128
|
+
readonly items: ReadonlyArray<N3Term>;
|
|
129
|
+
constructor(items: ReadonlyArray<N3Term>) {
|
|
130
|
+
super();
|
|
131
|
+
this.items = items;
|
|
132
|
+
}
|
|
133
|
+
protected override computeHash(): number {
|
|
134
|
+
return this.items.reduce((h, item) => Hash.combine(h, item[Hash.symbol]()), Hash.string('()'));
|
|
135
|
+
}
|
|
136
|
+
protected computeKey(): string {
|
|
137
|
+
return Arr.isReadonlyArrayEmpty(this.items)
|
|
138
|
+
? '()'
|
|
139
|
+
: `( ${this.items.map((t) => t.key).join(' ')} )`;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* An N3 statement: a triple whose subject, predicate and object may be any
|
|
145
|
+
* `N3Term`.
|
|
146
|
+
*
|
|
147
|
+
* @since 0.1.0
|
|
148
|
+
* @category models
|
|
149
|
+
*/
|
|
150
|
+
export class Statement<
|
|
151
|
+
out S extends N3Term = N3Term,
|
|
152
|
+
out P extends N3Term = N3Term,
|
|
153
|
+
out O extends N3Term = N3Term,
|
|
154
|
+
> extends N3Base {
|
|
155
|
+
readonly _tag = 'Statement' as const;
|
|
156
|
+
readonly subject: S;
|
|
157
|
+
readonly predicate: P;
|
|
158
|
+
readonly object: O;
|
|
159
|
+
constructor(subject: S, predicate: P, object: O) {
|
|
160
|
+
super();
|
|
161
|
+
this.subject = subject;
|
|
162
|
+
this.predicate = predicate;
|
|
163
|
+
this.object = object;
|
|
164
|
+
}
|
|
165
|
+
protected override computeHash(): number {
|
|
166
|
+
return Hash.combine(
|
|
167
|
+
Hash.combine(this.subject[Hash.symbol](), this.predicate[Hash.symbol]()),
|
|
168
|
+
this.object[Hash.symbol](),
|
|
169
|
+
);
|
|
170
|
+
}
|
|
171
|
+
protected computeKey(): string {
|
|
172
|
+
return `${this.subject.key} ${this.predicate.key} ${this.object.key}`;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Whether two terms are equal (have the same key), compared by their parts
|
|
178
|
+
* where that avoids building keys: identical or differently hashed terms are
|
|
179
|
+
* decided at once, and statements, collections and formulas are compared
|
|
180
|
+
* part by part. Only leaf terms (IRIs, literals, blank nodes, variables) are
|
|
181
|
+
* compared by key.
|
|
182
|
+
*/
|
|
183
|
+
const sameTerm = (a: N3Term, b: N3Term): boolean => {
|
|
184
|
+
if (a === b) return true;
|
|
185
|
+
if (a[Hash.symbol]() !== b[Hash.symbol]()) return false;
|
|
186
|
+
if (a instanceof Formula) return b instanceof Formula && sameFormula(a, b);
|
|
187
|
+
if (a instanceof Collection) {
|
|
188
|
+
return (
|
|
189
|
+
b instanceof Collection &&
|
|
190
|
+
a.items.length === b.items.length &&
|
|
191
|
+
a.items.every((item, i) => sameTerm(item, b.items[i] ?? item))
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
if (b instanceof Formula || b instanceof Collection) return false;
|
|
195
|
+
return a.key === b.key;
|
|
196
|
+
};
|
|
197
|
+
|
|
198
|
+
/** Whether two statements are equal: their terms are (`sameTerm`). */
|
|
199
|
+
const sameStatement = (a: Statement, b: Statement): boolean =>
|
|
200
|
+
sameTerm(a.subject, b.subject) &&
|
|
201
|
+
sameTerm(a.predicate, b.predicate) &&
|
|
202
|
+
sameTerm(a.object, b.object);
|
|
203
|
+
|
|
204
|
+
/** Whether two formulas have the same statements (searched for small ones, by key otherwise). */
|
|
205
|
+
const sameFormula = (a: Formula, b: Formula): boolean => {
|
|
206
|
+
const as = a.statements;
|
|
207
|
+
const bs = b.statements;
|
|
208
|
+
if (as.length !== bs.length) return false;
|
|
209
|
+
if (as.length > 8) return a.key === b.key;
|
|
210
|
+
return as.every((s) => bs.some((t) => sameStatement(s, t)));
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
/** A placeholder for the probe's statement before the first is placed. */
|
|
214
|
+
const emptyStatement: Statement = new Statement(
|
|
215
|
+
Term.namedNode(''),
|
|
216
|
+
Term.namedNode(''),
|
|
217
|
+
Term.namedNode(''),
|
|
218
|
+
);
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* The statements without duplicates, keeping the first of each: by their
|
|
222
|
+
* structural hashes, comparing keys only when two hashes are equal, so that
|
|
223
|
+
* no key is built for statements that differ.
|
|
224
|
+
*/
|
|
225
|
+
const deduplicate = (all: ReadonlyArray<Statement>): ReadonlyArray<Statement> => {
|
|
226
|
+
const n = all.length;
|
|
227
|
+
if (n < 2) return all;
|
|
228
|
+
// Open addressing over a power-of-two table at most half full: each slot holds a statement's
|
|
229
|
+
// hash and its position + 1 (0 when empty), probed linearly
|
|
230
|
+
const mask = 2 ** Math.ceil(Math.log2(n * 2)) - 1;
|
|
231
|
+
const hashes = new Int32Array(mask + 1);
|
|
232
|
+
const slots = new Int32Array(mask + 1);
|
|
233
|
+
const unique: Array<Statement> = [];
|
|
234
|
+
// The probe of the statement being placed: one closure for the whole table
|
|
235
|
+
let current: Statement = emptyStatement;
|
|
236
|
+
let hash = 0;
|
|
237
|
+
let i = 0;
|
|
238
|
+
let duplicate = false;
|
|
239
|
+
const probe = (): boolean => {
|
|
240
|
+
const slot = slots[i] ?? 0;
|
|
241
|
+
if (slot === 0) return false;
|
|
242
|
+
if (hashes[i] === hash && sameStatement(current, all[slot - 1] ?? current)) {
|
|
243
|
+
duplicate = true;
|
|
244
|
+
return false;
|
|
245
|
+
}
|
|
246
|
+
i = (i + 1) & mask;
|
|
247
|
+
return true;
|
|
248
|
+
};
|
|
249
|
+
all.forEach((s, k) => {
|
|
250
|
+
current = s;
|
|
251
|
+
hash = s[Hash.symbol]() | 0;
|
|
252
|
+
i = hash & mask;
|
|
253
|
+
duplicate = false;
|
|
254
|
+
loop(probe);
|
|
255
|
+
if (duplicate) return;
|
|
256
|
+
hashes[i] = hash;
|
|
257
|
+
slots[i] = k + 1;
|
|
258
|
+
unique.push(s);
|
|
259
|
+
});
|
|
260
|
+
return unique.length === n ? all : unique;
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* An N3 formula (graph term): an unordered set of statements, written
|
|
265
|
+
* `{ ... }`. Duplicate statements are removed (when the statements are first
|
|
266
|
+
* read), and equality is set equality of the statements (blank node labels are compared
|
|
267
|
+
* literally; use `Isomorphism.isomorphic` for a blank-node-aware comparison).
|
|
268
|
+
*
|
|
269
|
+
* @since 0.1.0
|
|
270
|
+
* @category models
|
|
271
|
+
*/
|
|
272
|
+
export class Formula extends N3Base {
|
|
273
|
+
readonly _tag = 'Formula' as const;
|
|
274
|
+
/** The statements as given (copied), then without duplicates once first read. */
|
|
275
|
+
#statements: ReadonlyArray<Statement>;
|
|
276
|
+
#deduplicated = false;
|
|
277
|
+
constructor(statements: Iterable<Statement>) {
|
|
278
|
+
super();
|
|
279
|
+
this.#statements = Array.from(statements);
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* The statements, without duplicates, in the order first given. They are
|
|
283
|
+
* deduplicated the first time they are read, not when the formula is
|
|
284
|
+
* made, so a formula that is never read (a parse whose result is only
|
|
285
|
+
* checked for errors, a formula a rule discards) costs nothing to dedupe.
|
|
286
|
+
*/
|
|
287
|
+
get statements(): ReadonlyArray<Statement> {
|
|
288
|
+
if (!this.#deduplicated) {
|
|
289
|
+
this.#statements = deduplicate(this.#statements);
|
|
290
|
+
this.#deduplicated = true;
|
|
291
|
+
}
|
|
292
|
+
return this.#statements;
|
|
293
|
+
}
|
|
294
|
+
/** The sum of the statements' hashes: the same for the same set, whatever the order. */
|
|
295
|
+
protected override computeHash(): number {
|
|
296
|
+
return Hash.optimize(this.statements.reduce((h, st) => (h + st[Hash.symbol]()) | 0, 0x7b7d));
|
|
297
|
+
}
|
|
298
|
+
/** The number of statements in the formula. */
|
|
299
|
+
get size(): number {
|
|
300
|
+
// Fewer than two statements cannot hold a duplicate
|
|
301
|
+
return this.#statements.length < 2 ? this.#statements.length : this.statements.length;
|
|
302
|
+
}
|
|
303
|
+
protected computeKey(): string {
|
|
304
|
+
if (Arr.isReadonlyArrayEmpty(this.statements)) return '{}';
|
|
305
|
+
const keys = Arr.sort(
|
|
306
|
+
this.statements.map((s) => s.key),
|
|
307
|
+
Order.String,
|
|
308
|
+
);
|
|
309
|
+
return `{ ${keys.join(' . ')} }`;
|
|
310
|
+
}
|
|
311
|
+
[Symbol.iterator](): Iterator<Statement> {
|
|
312
|
+
return this.statements[Symbol.iterator]();
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Any term that may appear in an N3 statement.
|
|
318
|
+
*
|
|
319
|
+
* @since 0.1.0
|
|
320
|
+
* @category models
|
|
321
|
+
*/
|
|
322
|
+
export type N3Term =
|
|
323
|
+
| Term.NamedNode
|
|
324
|
+
| Term.BlankNode
|
|
325
|
+
| Term.Literal
|
|
326
|
+
| Term.Variable
|
|
327
|
+
| Collection
|
|
328
|
+
| Formula;
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* A parsed N3 document.
|
|
332
|
+
*
|
|
333
|
+
* @since 0.1.0
|
|
334
|
+
* @category models
|
|
335
|
+
*/
|
|
336
|
+
export interface Document {
|
|
337
|
+
/** The top-level formula: every statement asserted by the document. */
|
|
338
|
+
readonly formula: Formula;
|
|
339
|
+
/** The prefixes declared by the document (in declaration order). */
|
|
340
|
+
readonly prefixes: PrefixMap.PrefixMap;
|
|
341
|
+
/** The final in-scope base IRI of the document, if any. */
|
|
342
|
+
readonly baseIri: string | undefined;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// -----------------------------------------------------------------------------
|
|
346
|
+
// Constructors
|
|
347
|
+
// -----------------------------------------------------------------------------
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* @since 0.1.0
|
|
351
|
+
* @category constructors
|
|
352
|
+
*/
|
|
353
|
+
export const statement = <S extends N3Term, P extends N3Term, O extends N3Term>(
|
|
354
|
+
subject: S,
|
|
355
|
+
predicate: P,
|
|
356
|
+
object: O,
|
|
357
|
+
): Statement<S, P, O> => new Statement(subject, predicate, object);
|
|
358
|
+
|
|
359
|
+
/**
|
|
360
|
+
* @since 0.1.0
|
|
361
|
+
* @category constructors
|
|
362
|
+
*/
|
|
363
|
+
export const formula = (statements: Iterable<Statement> = []): Formula => new Formula(statements);
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* The empty formula `{}`.
|
|
367
|
+
*
|
|
368
|
+
* @since 0.1.0
|
|
369
|
+
* @category constructors
|
|
370
|
+
*/
|
|
371
|
+
export const emptyFormula: Formula = new Formula([]);
|
|
372
|
+
|
|
373
|
+
/**
|
|
374
|
+
* @since 0.1.0
|
|
375
|
+
* @category constructors
|
|
376
|
+
*/
|
|
377
|
+
export const collection = (items: Iterable<N3Term> = []): Collection =>
|
|
378
|
+
new Collection(Array.from(items));
|
|
379
|
+
|
|
380
|
+
/**
|
|
381
|
+
* Creates a document from a formula.
|
|
382
|
+
*
|
|
383
|
+
* @since 0.1.0
|
|
384
|
+
* @category constructors
|
|
385
|
+
*/
|
|
386
|
+
export const document = (
|
|
387
|
+
formula: Formula,
|
|
388
|
+
options?: { readonly prefixes?: PrefixMap.PrefixMap; readonly baseIri?: string | undefined },
|
|
389
|
+
): Document => ({
|
|
390
|
+
formula,
|
|
391
|
+
prefixes: options?.prefixes ?? PrefixMap.empty,
|
|
392
|
+
baseIri: options?.baseIri,
|
|
393
|
+
});
|
|
394
|
+
|
|
395
|
+
// -----------------------------------------------------------------------------
|
|
396
|
+
// Guards
|
|
397
|
+
// -----------------------------------------------------------------------------
|
|
398
|
+
|
|
399
|
+
/**
|
|
400
|
+
* @since 0.1.0
|
|
401
|
+
* @category guards
|
|
402
|
+
*/
|
|
403
|
+
export const isFormula = (u: unknown): u is Formula => u instanceof Formula;
|
|
404
|
+
|
|
405
|
+
/**
|
|
406
|
+
* @since 0.1.0
|
|
407
|
+
* @category guards
|
|
408
|
+
*/
|
|
409
|
+
export const isCollection = (u: unknown): u is Collection => u instanceof Collection;
|
|
410
|
+
|
|
411
|
+
/**
|
|
412
|
+
* @since 0.1.0
|
|
413
|
+
* @category guards
|
|
414
|
+
*/
|
|
415
|
+
export const isStatement = (u: unknown): u is Statement => u instanceof Statement;
|
|
416
|
+
|
|
417
|
+
/**
|
|
418
|
+
* Whether a value is an `N3Term` (a core IRI, blank node, literal or
|
|
419
|
+
* variable, or an N3 collection or formula).
|
|
420
|
+
*
|
|
421
|
+
* @since 0.1.0
|
|
422
|
+
* @category guards
|
|
423
|
+
*/
|
|
424
|
+
export const isN3Term = (u: unknown): u is N3Term =>
|
|
425
|
+
isFormula(u) ||
|
|
426
|
+
isCollection(u) ||
|
|
427
|
+
Term.isNamedNode(u) ||
|
|
428
|
+
Term.isBlankNode(u) ||
|
|
429
|
+
Term.isLiteral(u) ||
|
|
430
|
+
Term.isVariable(u);
|
|
431
|
+
|
|
432
|
+
// -----------------------------------------------------------------------------
|
|
433
|
+
// Inspection
|
|
434
|
+
// -----------------------------------------------------------------------------
|
|
435
|
+
|
|
436
|
+
/**
|
|
437
|
+
* Whether a term, statement or formula is free of variables (recursively).
|
|
438
|
+
*
|
|
439
|
+
* @since 0.1.0
|
|
440
|
+
* @category predicates
|
|
441
|
+
*/
|
|
442
|
+
export const isGround = (self: N3Term | Statement): boolean => groundness(self);
|
|
443
|
+
|
|
444
|
+
// Plain refinements rather than `Match`: `isGround` runs for every term it visits.
|
|
445
|
+
const groundness = (self: N3Term | Statement): boolean =>
|
|
446
|
+
self instanceof Statement
|
|
447
|
+
? groundness(self.subject) && groundness(self.predicate) && groundness(self.object)
|
|
448
|
+
: self instanceof Formula
|
|
449
|
+
? self.statements.every(groundness)
|
|
450
|
+
: self instanceof Collection
|
|
451
|
+
? self.items.every(groundness)
|
|
452
|
+
: !Guards.isVariable(self);
|
|
453
|
+
|
|
454
|
+
/** Adds the atoms of `self` that pass `test` to `out`, by key, in order of first occurrence. */
|
|
455
|
+
const collect = <A extends N3Term>(
|
|
456
|
+
self: N3Term | Statement,
|
|
457
|
+
test: (t: N3Term) => t is A,
|
|
458
|
+
out: MutableHashMap.MutableHashMap<string, A>,
|
|
459
|
+
): void => {
|
|
460
|
+
if (self instanceof Statement) {
|
|
461
|
+
collect(self.subject, test, out);
|
|
462
|
+
collect(self.predicate, test, out);
|
|
463
|
+
collect(self.object, test, out);
|
|
464
|
+
} else if (self instanceof Formula) {
|
|
465
|
+
self.statements.forEach((s) => collect(s, test, out));
|
|
466
|
+
} else if (self instanceof Collection) {
|
|
467
|
+
self.items.forEach((i) => collect(i, test, out));
|
|
468
|
+
} else if (test(self)) {
|
|
469
|
+
MutableHashMap.set(out, self.key, self);
|
|
470
|
+
}
|
|
471
|
+
};
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* All distinct variables occurring in a term, statement or formula
|
|
475
|
+
* (including inside nested formulas and collections), in order of first
|
|
476
|
+
* occurrence.
|
|
477
|
+
*
|
|
478
|
+
* @since 0.1.0
|
|
479
|
+
* @category getters
|
|
480
|
+
*/
|
|
481
|
+
export const variables = (self: N3Term | Statement): ReadonlyArray<Term.Variable> => {
|
|
482
|
+
const out = MutableHashMap.empty<string, Term.Variable>();
|
|
483
|
+
collect(self, Guards.isVariable, out);
|
|
484
|
+
return Arr.fromIterable(MutableHashMap.values(out));
|
|
485
|
+
};
|
|
486
|
+
|
|
487
|
+
/**
|
|
488
|
+
* All distinct blank nodes occurring in a term, statement or formula
|
|
489
|
+
* (including inside nested formulas and collections).
|
|
490
|
+
*
|
|
491
|
+
* @since 0.1.0
|
|
492
|
+
* @category getters
|
|
493
|
+
*/
|
|
494
|
+
export const blankNodes = (self: N3Term | Statement): ReadonlyArray<Term.BlankNode> => {
|
|
495
|
+
const out = MutableHashMap.empty<string, Term.BlankNode>();
|
|
496
|
+
collect(self, Guards.isBlankNode, out);
|
|
497
|
+
return Arr.fromIterable(MutableHashMap.values(out));
|
|
498
|
+
};
|
|
499
|
+
|
|
500
|
+
// -----------------------------------------------------------------------------
|
|
501
|
+
// Combinators
|
|
502
|
+
// -----------------------------------------------------------------------------
|
|
503
|
+
|
|
504
|
+
/**
|
|
505
|
+
* Applies `f` to every atomic term (IRI, blank node, literal, variable),
|
|
506
|
+
* recursing into collections, statements and nested formulas.
|
|
507
|
+
*
|
|
508
|
+
* @since 0.1.0
|
|
509
|
+
* @category combinators
|
|
510
|
+
*/
|
|
511
|
+
export function mapTerms<T extends N3Term | Statement>(
|
|
512
|
+
self: T,
|
|
513
|
+
f: (term: Term.NamedNode | Term.BlankNode | Term.Literal | Term.Variable) => N3Term,
|
|
514
|
+
): T extends Statement ? Statement : T extends Formula ? Formula : N3Term;
|
|
515
|
+
export function mapTerms(
|
|
516
|
+
self: N3Term | Statement,
|
|
517
|
+
f: (term: Term.NamedNode | Term.BlankNode | Term.Literal | Term.Variable) => N3Term,
|
|
518
|
+
): N3Term | Statement {
|
|
519
|
+
return self instanceof Statement ? mapStatement(self, f) : mapTerm(self, f);
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
type Atom = Term.NamedNode | Term.BlankNode | Term.Literal | Term.Variable;
|
|
523
|
+
|
|
524
|
+
// Plain refinements rather than `Match`: `mapTerms` runs for every term it visits.
|
|
525
|
+
const mapTerm = (t: N3Term, f: (term: Atom) => N3Term): N3Term =>
|
|
526
|
+
t instanceof Formula
|
|
527
|
+
? new Formula(t.statements.map((s) => mapStatement(s, f)))
|
|
528
|
+
: t instanceof Collection
|
|
529
|
+
? new Collection(t.items.map((i) => mapTerm(i, f)))
|
|
530
|
+
: f(t);
|
|
531
|
+
|
|
532
|
+
const mapStatement = (s: Statement, f: (term: Atom) => N3Term): Statement =>
|
|
533
|
+
new Statement(mapTerm(s.subject, f), mapTerm(s.predicate, f), mapTerm(s.object, f));
|
|
534
|
+
|
|
535
|
+
/**
|
|
536
|
+
* Replaces variables by the terms bound to them (by variable name); unbound
|
|
537
|
+
* variables are kept.
|
|
538
|
+
*
|
|
539
|
+
* @since 0.1.0
|
|
540
|
+
* @category combinators
|
|
541
|
+
*/
|
|
542
|
+
export function substitute<T extends N3Term | Statement>(
|
|
543
|
+
self: T,
|
|
544
|
+
bindings: ReadonlyMap<string, N3Term>,
|
|
545
|
+
): T extends Statement ? Statement : T extends Formula ? Formula : N3Term;
|
|
546
|
+
export function substitute(
|
|
547
|
+
self: N3Term | Statement,
|
|
548
|
+
bindings: ReadonlyMap<string, N3Term>,
|
|
549
|
+
): N3Term | Statement {
|
|
550
|
+
return mapTerms(self, (t) => (Guards.isVariable(t) ? (bindings.get(t.value) ?? t) : t));
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
/**
|
|
554
|
+
* Adds statements to a formula.
|
|
555
|
+
*
|
|
556
|
+
* @since 0.1.0
|
|
557
|
+
* @category combinators
|
|
558
|
+
*/
|
|
559
|
+
export const addStatements = (self: Formula, statements: Iterable<Statement>): Formula =>
|
|
560
|
+
new Formula([...self.statements, ...statements]);
|
|
561
|
+
|
|
562
|
+
/**
|
|
563
|
+
* Whether a formula contains a statement.
|
|
564
|
+
*
|
|
565
|
+
* @since 0.1.0
|
|
566
|
+
* @category predicates
|
|
567
|
+
*/
|
|
568
|
+
export const hasStatement = (self: Formula, statement: Statement): boolean =>
|
|
569
|
+
self.statements.some((s) => s.key === statement.key);
|
|
570
|
+
|
|
571
|
+
// -----------------------------------------------------------------------------
|
|
572
|
+
// Schemas
|
|
573
|
+
// -----------------------------------------------------------------------------
|
|
574
|
+
|
|
575
|
+
/**
|
|
576
|
+
* Schema of a formula; its JSON codec is
|
|
577
|
+
* `{ "type": "formula", "statements": [{ subject, predicate, object }, …] }`
|
|
578
|
+
* over JSON N3 terms.
|
|
579
|
+
*
|
|
580
|
+
* @since 0.1.0
|
|
581
|
+
* @category schemas
|
|
582
|
+
*/
|
|
583
|
+
export const FormulaSchema: Schema.declare<Formula> = Schema.declare(isFormula, {
|
|
584
|
+
identifier: 'Formula',
|
|
585
|
+
toCodecJson: () =>
|
|
586
|
+
Schema.link<Formula>()(
|
|
587
|
+
Schema.Struct({
|
|
588
|
+
type: Schema.tag('formula'),
|
|
589
|
+
statements: Schema.Array(Schema.suspend(() => StatementSchema)),
|
|
590
|
+
}),
|
|
591
|
+
SchemaTransformation.transform({
|
|
592
|
+
decode: (j) => new Formula(j.statements),
|
|
593
|
+
encode: (f) => ({ type: 'formula' as const, statements: f.statements }),
|
|
594
|
+
}),
|
|
595
|
+
),
|
|
596
|
+
});
|
|
597
|
+
|
|
598
|
+
/**
|
|
599
|
+
* The value a `FormulaSchema` decodes to.
|
|
600
|
+
*
|
|
601
|
+
* @since 0.1.0
|
|
602
|
+
* @category schemas
|
|
603
|
+
*/
|
|
604
|
+
export type FormulaSchema = typeof FormulaSchema.Type;
|
|
605
|
+
|
|
606
|
+
/**
|
|
607
|
+
* Schema of a collection; its JSON codec is
|
|
608
|
+
* `{ "type": "collection", "items": [ … ] }` over JSON N3 terms.
|
|
609
|
+
*
|
|
610
|
+
* @since 0.1.0
|
|
611
|
+
* @category schemas
|
|
612
|
+
*/
|
|
613
|
+
export const CollectionSchema: Schema.declare<Collection> = Schema.declare(isCollection, {
|
|
614
|
+
identifier: 'Collection',
|
|
615
|
+
toCodecJson: () =>
|
|
616
|
+
Schema.link<Collection>()(
|
|
617
|
+
Schema.Struct({
|
|
618
|
+
type: Schema.tag('collection'),
|
|
619
|
+
items: Schema.Array(Schema.suspend(() => N3TermSchema)),
|
|
620
|
+
}),
|
|
621
|
+
SchemaTransformation.transform({
|
|
622
|
+
decode: (j) => new Collection(j.items),
|
|
623
|
+
encode: (c) => ({ type: 'collection' as const, items: c.items }),
|
|
624
|
+
}),
|
|
625
|
+
),
|
|
626
|
+
});
|
|
627
|
+
|
|
628
|
+
/**
|
|
629
|
+
* The value a `CollectionSchema` decodes to.
|
|
630
|
+
*
|
|
631
|
+
* @since 0.1.0
|
|
632
|
+
* @category schemas
|
|
633
|
+
*/
|
|
634
|
+
export type CollectionSchema = typeof CollectionSchema.Type;
|
|
635
|
+
|
|
636
|
+
/**
|
|
637
|
+
* Schema of a statement; its JSON codec is `{ subject, predicate, object }`
|
|
638
|
+
* over JSON N3 terms.
|
|
639
|
+
*
|
|
640
|
+
* @since 0.1.0
|
|
641
|
+
* @category schemas
|
|
642
|
+
*/
|
|
643
|
+
export const StatementSchema: Schema.declare<Statement> = Schema.declare(isStatement, {
|
|
644
|
+
identifier: 'Statement',
|
|
645
|
+
toCodecJson: () =>
|
|
646
|
+
Schema.link<Statement>()(
|
|
647
|
+
Schema.Struct({
|
|
648
|
+
subject: Schema.suspend(() => N3TermSchema),
|
|
649
|
+
predicate: Schema.suspend(() => N3TermSchema),
|
|
650
|
+
object: Schema.suspend(() => N3TermSchema),
|
|
651
|
+
}),
|
|
652
|
+
SchemaTransformation.transform({
|
|
653
|
+
decode: (j) => new Statement(j.subject, j.predicate, j.object),
|
|
654
|
+
encode: (st) => ({ subject: st.subject, predicate: st.predicate, object: st.object }),
|
|
655
|
+
}),
|
|
656
|
+
),
|
|
657
|
+
});
|
|
658
|
+
|
|
659
|
+
/**
|
|
660
|
+
* The value a `StatementSchema` decodes to.
|
|
661
|
+
*
|
|
662
|
+
* @since 0.1.0
|
|
663
|
+
* @category schemas
|
|
664
|
+
*/
|
|
665
|
+
export type StatementSchema = typeof StatementSchema.Type;
|
|
666
|
+
|
|
667
|
+
/**
|
|
668
|
+
* Schema of any N3 term; its JSON codec is core's `TermJson` term (IRIs,
|
|
669
|
+
* blank nodes, literals, variables) or a JSON collection or formula.
|
|
670
|
+
*
|
|
671
|
+
* @since 0.1.0
|
|
672
|
+
* @category schemas
|
|
673
|
+
*/
|
|
674
|
+
export const N3TermSchema: Schema.declare<N3Term> = Schema.declare(isN3Term, {
|
|
675
|
+
identifier: 'N3Term',
|
|
676
|
+
toCodecJson: () =>
|
|
677
|
+
Schema.link<N3Term>()(
|
|
678
|
+
Schema.Union([
|
|
679
|
+
Term.NamedNodeSchema,
|
|
680
|
+
Term.BlankNodeSchema,
|
|
681
|
+
Term.LiteralSchema,
|
|
682
|
+
Term.VariableSchema,
|
|
683
|
+
CollectionSchema,
|
|
684
|
+
FormulaSchema,
|
|
685
|
+
]),
|
|
686
|
+
SchemaTransformation.passthrough(),
|
|
687
|
+
),
|
|
688
|
+
});
|
|
689
|
+
|
|
690
|
+
/**
|
|
691
|
+
* The value a `N3TermSchema` decodes to.
|
|
692
|
+
*
|
|
693
|
+
* @since 0.1.0
|
|
694
|
+
* @category schemas
|
|
695
|
+
*/
|
|
696
|
+
export type N3TermSchema = typeof N3TermSchema.Type;
|