@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,568 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A simple forward-chaining N3 reasoner.
|
|
3
|
+
*
|
|
4
|
+
* Rules are the top-level statements `{ premise } => { conclusion }` (and
|
|
5
|
+
* `{ conclusion } <= { premise }`). The reasoner repeatedly matches every
|
|
6
|
+
* rule premise against the current statements — joining triple patterns with
|
|
7
|
+
* backtracking and evaluating builtins — and adds the instantiated
|
|
8
|
+
* conclusions, until a fixpoint is reached.
|
|
9
|
+
*
|
|
10
|
+
* - Variables (`?x`) and blank nodes in a premise are matched like query
|
|
11
|
+
* variables; blank nodes that occur only in a conclusion are instantiated
|
|
12
|
+
* with fresh blank nodes for each distinct set of bindings (so the closure
|
|
13
|
+
* is finite whenever the rules do not keep inventing new terms).
|
|
14
|
+
* - Rules inferred by other rules are applied too.
|
|
15
|
+
* - A conclusion `false` signals an inconsistency and fails with
|
|
16
|
+
* `ReasonerError`.
|
|
17
|
+
* - Builtins: a pragmatic subset of `math:` (arithmetic, comparisons,
|
|
18
|
+
* trigonometry), `string:` (concatenation, comparisons, regular
|
|
19
|
+
* expressions), `list:` (`in`, `member`, `length`, `first`, `last`, `rest`,
|
|
20
|
+
* `append`, `iterate`, `memberAt`, `remove`) and `log:` (`equalTo`,
|
|
21
|
+
* `notEqualTo`, `includes`, `notIncludes`, `conjunction`, `uri`, `dtlit`,
|
|
22
|
+
* `langlit`, `rawType`, `collectAllIn`, `forAllIn`). Builtins whose inputs
|
|
23
|
+
* are not yet bound are deferred until the other premise statements have
|
|
24
|
+
* been matched.
|
|
25
|
+
*
|
|
26
|
+
* @since 0.1.0
|
|
27
|
+
*/
|
|
28
|
+
import * as Arr from 'effect/Array';
|
|
29
|
+
import * as Effect from 'effect/Effect';
|
|
30
|
+
import * as MutableHashMap from 'effect/MutableHashMap';
|
|
31
|
+
import * as MutableHashSet from 'effect/MutableHashSet';
|
|
32
|
+
import * as Option from 'effect/Option';
|
|
33
|
+
import * as Order from 'effect/Order';
|
|
34
|
+
import * as Schema from 'effect/Schema';
|
|
35
|
+
import * as Term from '../Term.ts';
|
|
36
|
+
import { rdf, xsd } from '../Vocab.ts';
|
|
37
|
+
import * as Builtins from './internal/builtins.ts';
|
|
38
|
+
import * as Guards from './internal/guards.ts';
|
|
39
|
+
import { loop } from './internal/loop.ts';
|
|
40
|
+
import * as Isomorphism from './Isomorphism.ts';
|
|
41
|
+
import * as Model from './Model.ts';
|
|
42
|
+
import { log } from './Vocab.ts';
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Reasoning failed: an inconsistency was derived or a limit was exceeded.
|
|
46
|
+
*
|
|
47
|
+
* @since 0.1.0
|
|
48
|
+
* @category errors
|
|
49
|
+
*/
|
|
50
|
+
export class ReasonerError extends Schema.TaggedError<ReasonerError>()('N3ReasonerError', {
|
|
51
|
+
message: Schema.String,
|
|
52
|
+
}) {}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* @since 0.1.0
|
|
56
|
+
* @category models
|
|
57
|
+
*/
|
|
58
|
+
export interface Options {
|
|
59
|
+
/** Maximum number of forward-chaining rounds (default 1000). */
|
|
60
|
+
readonly maxRounds?: number | undefined;
|
|
61
|
+
/** Maximum number of statements in the closure (default 1 000 000). */
|
|
62
|
+
readonly maxStatements?: number | undefined;
|
|
63
|
+
/** Whether to evaluate builtins (default `true`). */
|
|
64
|
+
readonly builtins?: boolean | undefined;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* A rule extracted from a formula.
|
|
69
|
+
*
|
|
70
|
+
* @since 0.1.0
|
|
71
|
+
* @category models
|
|
72
|
+
*/
|
|
73
|
+
export interface Rule {
|
|
74
|
+
readonly premise: ReadonlyArray<Model.Statement>;
|
|
75
|
+
readonly conclusion: Model.N3Term;
|
|
76
|
+
/** The statement the rule was read from. */
|
|
77
|
+
readonly source: Model.Statement;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The result of reasoning.
|
|
82
|
+
*
|
|
83
|
+
* @since 0.1.0
|
|
84
|
+
* @category models
|
|
85
|
+
*/
|
|
86
|
+
export interface Result {
|
|
87
|
+
/** The input statements together with everything inferred. */
|
|
88
|
+
readonly closure: Model.Formula;
|
|
89
|
+
/** Only the newly inferred statements. */
|
|
90
|
+
readonly inferred: Model.Formula;
|
|
91
|
+
/** The number of rounds until the fixpoint was reached. */
|
|
92
|
+
readonly rounds: number;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const TRUE_KEY = Term.literal('true', xsd.boolean).key;
|
|
96
|
+
const FALSE_KEY = Term.literal('false', xsd.boolean).key;
|
|
97
|
+
|
|
98
|
+
const noGoals: ReadonlyArray<Model.Statement> = [];
|
|
99
|
+
|
|
100
|
+
const goalsOf = (t: Model.N3Term): Option.Option<ReadonlyArray<Model.Statement>> =>
|
|
101
|
+
Model.isFormula(t)
|
|
102
|
+
? Option.some(t.statements)
|
|
103
|
+
: t.key === TRUE_KEY
|
|
104
|
+
? Option.some(noGoals)
|
|
105
|
+
: Option.none();
|
|
106
|
+
|
|
107
|
+
/** Premise blank nodes become rule-local variables. */
|
|
108
|
+
const BLANK_VAR = '\u0000b:';
|
|
109
|
+
|
|
110
|
+
/** Blank nodes at the top level of statements (not inside nested formulas). */
|
|
111
|
+
const topBlanks = (
|
|
112
|
+
statements: ReadonlyArray<Model.Statement>,
|
|
113
|
+
): MutableHashSet.MutableHashSet<string> => {
|
|
114
|
+
const out = MutableHashSet.empty<string>();
|
|
115
|
+
const go = (t: Model.N3Term) => {
|
|
116
|
+
if (Guards.isBlankNode(t)) MutableHashSet.add(out, t.value);
|
|
117
|
+
else if (Model.isCollection(t)) t.items.forEach(go);
|
|
118
|
+
};
|
|
119
|
+
statements.forEach((s) => {
|
|
120
|
+
go(s.subject);
|
|
121
|
+
go(s.predicate);
|
|
122
|
+
go(s.object);
|
|
123
|
+
});
|
|
124
|
+
return out;
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
/** Replaces the given blank nodes (outside nested formulas) by variables. */
|
|
128
|
+
const blanksToVariables = (
|
|
129
|
+
t: Model.N3Term,
|
|
130
|
+
blanks: MutableHashSet.MutableHashSet<string>,
|
|
131
|
+
): Model.N3Term =>
|
|
132
|
+
Guards.isBlankNode(t) && MutableHashSet.has(blanks, t.value)
|
|
133
|
+
? new Term.Variable(BLANK_VAR + t.value)
|
|
134
|
+
: Model.isCollection(t)
|
|
135
|
+
? new Model.Collection(t.items.map((x) => blanksToVariables(x, blanks)))
|
|
136
|
+
: t;
|
|
137
|
+
|
|
138
|
+
const statementBlanksToVariables = (
|
|
139
|
+
s: Model.Statement,
|
|
140
|
+
blanks: MutableHashSet.MutableHashSet<string>,
|
|
141
|
+
) =>
|
|
142
|
+
new Model.Statement(
|
|
143
|
+
blanksToVariables(s.subject, blanks),
|
|
144
|
+
blanksToVariables(s.predicate, blanks),
|
|
145
|
+
blanksToVariables(s.object, blanks),
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Extracts the rules (`=>` and `<=` statements between formulas) of a
|
|
150
|
+
* formula's top level.
|
|
151
|
+
*
|
|
152
|
+
* @since 0.1.0
|
|
153
|
+
* @category rules
|
|
154
|
+
*/
|
|
155
|
+
export const rules = (formula: Model.Formula): ReadonlyArray<Rule> =>
|
|
156
|
+
Arr.getSomes(
|
|
157
|
+
formula.statements.map((s): Option.Option<Rule> => {
|
|
158
|
+
if (!Guards.isNamedNode(s.predicate)) return Option.none();
|
|
159
|
+
const forward = s.predicate.value === log.implies.value;
|
|
160
|
+
const backward = s.predicate.value === log.isImpliedBy.value;
|
|
161
|
+
if (!forward && !backward) return Option.none();
|
|
162
|
+
const premiseTerm = forward ? s.subject : s.object;
|
|
163
|
+
const conclusion = forward ? s.object : s.subject;
|
|
164
|
+
return Option.map(goalsOf(premiseTerm), (premise): Rule => {
|
|
165
|
+
// Blank nodes of the premise are query variables, also in the conclusion.
|
|
166
|
+
const blanks = topBlanks(premise);
|
|
167
|
+
return {
|
|
168
|
+
premise: premise.map((p) => statementBlanksToVariables(p, blanks)),
|
|
169
|
+
conclusion: Model.isFormula(conclusion)
|
|
170
|
+
? new Model.Formula(
|
|
171
|
+
conclusion.statements.map((c) => statementBlanksToVariables(c, blanks)),
|
|
172
|
+
)
|
|
173
|
+
: conclusion,
|
|
174
|
+
source: s,
|
|
175
|
+
};
|
|
176
|
+
});
|
|
177
|
+
}),
|
|
178
|
+
);
|
|
179
|
+
|
|
180
|
+
// -----------------------------------------------------------------------------
|
|
181
|
+
// Matching
|
|
182
|
+
// -----------------------------------------------------------------------------
|
|
183
|
+
|
|
184
|
+
type Bindings = Builtins.Bindings;
|
|
185
|
+
|
|
186
|
+
/** The bindings that bind nothing. */
|
|
187
|
+
const noBindings: Bindings = MutableHashMap.empty<string, Model.N3Term>().backing;
|
|
188
|
+
|
|
189
|
+
/** `b` with `name` bound to `value` (a copy: bindings are shared between solutions). */
|
|
190
|
+
const extend = (b: Bindings, name: string, value: Model.N3Term): Bindings => {
|
|
191
|
+
const next = MutableHashMap.fromIterable(b);
|
|
192
|
+
MutableHashMap.set(next, name, value);
|
|
193
|
+
return next.backing;
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
const noStatements: ReadonlyArray<Model.Statement> = [];
|
|
197
|
+
|
|
198
|
+
class Store {
|
|
199
|
+
readonly all: Array<Model.Statement> = [];
|
|
200
|
+
readonly keys = MutableHashSet.empty<string>();
|
|
201
|
+
readonly byPredicate = MutableHashMap.empty<string, Array<Model.Statement>>();
|
|
202
|
+
constructor(statements: Iterable<Model.Statement> = []) {
|
|
203
|
+
Arr.fromIterable(statements).forEach((s) => this.add(s));
|
|
204
|
+
}
|
|
205
|
+
has(s: Model.Statement): boolean {
|
|
206
|
+
return MutableHashSet.has(this.keys, s.key);
|
|
207
|
+
}
|
|
208
|
+
add(s: Model.Statement): boolean {
|
|
209
|
+
if (this.has(s)) return false;
|
|
210
|
+
MutableHashSet.add(this.keys, s.key);
|
|
211
|
+
this.all.push(s);
|
|
212
|
+
const k = s.predicate.key;
|
|
213
|
+
const l = this.byPredicate.backing.get(k);
|
|
214
|
+
if (l === undefined) MutableHashMap.set(this.byPredicate, k, [s]);
|
|
215
|
+
else l.push(s);
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
/** The statements with the predicate `key`. */
|
|
219
|
+
withPredicate(key: string): ReadonlyArray<Model.Statement> {
|
|
220
|
+
return this.byPredicate.backing.get(key) ?? noStatements;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/** The term a variable is bound to, through chains of variables (it recurses once per link). */
|
|
225
|
+
const walk = (t: Model.N3Term, b: Bindings): Model.N3Term => {
|
|
226
|
+
if (!Guards.isVariable(t)) return t;
|
|
227
|
+
const next = b.get(t.value);
|
|
228
|
+
return next === undefined ? t : walk(next, b);
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
const resolve = (t: Model.N3Term, b: Bindings): Model.N3Term =>
|
|
232
|
+
b.size === 0 ? t : Model.substitute(t, b);
|
|
233
|
+
|
|
234
|
+
const unify = (pattern: Model.N3Term, term: Model.N3Term, b: Bindings): Array<Bindings> => {
|
|
235
|
+
const p = walk(pattern, b);
|
|
236
|
+
if (Guards.isVariable(p)) {
|
|
237
|
+
if (Guards.isVariable(term) && term.value === p.value) return [b];
|
|
238
|
+
return [extend(b, p.value, term)];
|
|
239
|
+
}
|
|
240
|
+
const t = Guards.isVariable(term) ? walk(term, b) : term;
|
|
241
|
+
if (p instanceof Model.Collection) {
|
|
242
|
+
if (!(t instanceof Model.Collection) || t.items.length !== p.items.length) return [];
|
|
243
|
+
return p.items.reduce<Array<Bindings>>(
|
|
244
|
+
(results, item, i) => {
|
|
245
|
+
const other = t.items[i];
|
|
246
|
+
return other === undefined ? [] : results.flatMap((r) => unify(item, other, r));
|
|
247
|
+
},
|
|
248
|
+
[b],
|
|
249
|
+
);
|
|
250
|
+
}
|
|
251
|
+
if (p instanceof Model.Formula) {
|
|
252
|
+
if (!(t instanceof Model.Formula) || t.statements.length !== p.statements.length) return [];
|
|
253
|
+
if (Model.isGround(p)) return p.key === t.key || Isomorphism.isomorphic(p, t) ? [b] : [];
|
|
254
|
+
return matchFormula(p.statements, t.statements, b);
|
|
255
|
+
}
|
|
256
|
+
return p.key === t.key ? [b] : [];
|
|
257
|
+
};
|
|
258
|
+
|
|
259
|
+
/** Matches each pattern statement to a distinct statement of `target`. */
|
|
260
|
+
const matchFormula = (
|
|
261
|
+
patterns: ReadonlyArray<Model.Statement>,
|
|
262
|
+
target: ReadonlyArray<Model.Statement>,
|
|
263
|
+
b: Bindings,
|
|
264
|
+
): Array<Bindings> => {
|
|
265
|
+
const out: Array<Bindings> = [];
|
|
266
|
+
const used = new Uint8Array(target.length);
|
|
267
|
+
const go = (i: number, cur: Bindings) => {
|
|
268
|
+
const p = patterns[i];
|
|
269
|
+
if (p === undefined) {
|
|
270
|
+
out.push(cur);
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
target.forEach((s, j) => {
|
|
274
|
+
if (used[j] === 1) return;
|
|
275
|
+
used[j] = 1;
|
|
276
|
+
unifyStatement(p, s, cur).forEach((r) => go(i + 1, r));
|
|
277
|
+
used[j] = 0;
|
|
278
|
+
});
|
|
279
|
+
};
|
|
280
|
+
go(0, b);
|
|
281
|
+
return out;
|
|
282
|
+
};
|
|
283
|
+
|
|
284
|
+
const unifyStatement = (p: Model.Statement, s: Model.Statement, b: Bindings): Array<Bindings> =>
|
|
285
|
+
unify(p.predicate, s.predicate, b)
|
|
286
|
+
.flatMap((r) => unify(p.subject, s.subject, r))
|
|
287
|
+
.flatMap((r) => unify(p.object, s.object, r));
|
|
288
|
+
|
|
289
|
+
interface Engine {
|
|
290
|
+
readonly builtins: boolean;
|
|
291
|
+
readonly document: () => Model.Formula;
|
|
292
|
+
readonly conclusion: (formula: Model.Formula) => Model.Formula;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
const solve = (
|
|
296
|
+
store: Store,
|
|
297
|
+
goals: ReadonlyArray<Model.Statement>,
|
|
298
|
+
b: Bindings,
|
|
299
|
+
engine: Engine,
|
|
300
|
+
): Array<Bindings> => {
|
|
301
|
+
const out: Array<Bindings> = [];
|
|
302
|
+
const ctx: Builtins.Context = {
|
|
303
|
+
unify,
|
|
304
|
+
query: (scope, scopeGoals, bindings, builtins) => {
|
|
305
|
+
const blanks = topBlanks(scopeGoals);
|
|
306
|
+
return solve(
|
|
307
|
+
new Store(scope.statements),
|
|
308
|
+
scopeGoals.map((g) => statementBlanksToVariables(g, blanks)),
|
|
309
|
+
bindings,
|
|
310
|
+
{ ...engine, builtins: engine.builtins && builtins },
|
|
311
|
+
);
|
|
312
|
+
},
|
|
313
|
+
document: engine.document,
|
|
314
|
+
conclusion: engine.conclusion,
|
|
315
|
+
};
|
|
316
|
+
const go = (remaining: ReadonlyArray<Model.Statement>, cur: Bindings, deferred: number) => {
|
|
317
|
+
if (!Arr.isReadonlyArrayNonEmpty(remaining)) {
|
|
318
|
+
out.push(cur);
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
const [goal, ...rest] = remaining;
|
|
322
|
+
const builtin = engine.builtins
|
|
323
|
+
? Builtins.builtinFor(walk(goal.predicate, cur))
|
|
324
|
+
: Option.none<Builtins.Builtin>();
|
|
325
|
+
if (Option.isSome(builtin)) {
|
|
326
|
+
const results = builtin.value(
|
|
327
|
+
resolve(goal.subject, cur),
|
|
328
|
+
resolve(goal.object, cur),
|
|
329
|
+
cur,
|
|
330
|
+
ctx,
|
|
331
|
+
);
|
|
332
|
+
if (Option.isNone(results)) {
|
|
333
|
+
// Not ready: try the other goals first (once around the remaining goals).
|
|
334
|
+
if (deferred < remaining.length) go([...rest, goal], cur, deferred + 1);
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
results.value.forEach((r) => go(rest, r, 0));
|
|
338
|
+
return;
|
|
339
|
+
}
|
|
340
|
+
const predicate = walk(goal.predicate, cur);
|
|
341
|
+
const subject = walk(goal.subject, cur);
|
|
342
|
+
const listPredicate = predicate.key === rdf.first.key || predicate.key === rdf.rest.key;
|
|
343
|
+
if (listPredicate && Guards.isVariable(subject) && deferred < remaining.length) {
|
|
344
|
+
// The subject may become bound to a collection by a later goal.
|
|
345
|
+
go([...rest, goal], cur, deferred + 1);
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
if (
|
|
349
|
+
listPredicate &&
|
|
350
|
+
subject instanceof Model.Collection &&
|
|
351
|
+
Arr.isReadonlyArrayNonEmpty(subject.items)
|
|
352
|
+
) {
|
|
353
|
+
// Collections are lists: answer rdf:first / rdf:rest structurally.
|
|
354
|
+
const value =
|
|
355
|
+
predicate.key === rdf.first.key
|
|
356
|
+
? subject.items[0]
|
|
357
|
+
: subject.items.length === 1
|
|
358
|
+
? rdf.nil
|
|
359
|
+
: new Model.Collection(subject.items.slice(1));
|
|
360
|
+
unify(goal.object, value, cur).forEach((r) => go(rest, r, 0));
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
const candidates = Guards.isVariable(predicate)
|
|
364
|
+
? store.all
|
|
365
|
+
: store.withPredicate(predicate.key);
|
|
366
|
+
candidates.forEach((s) => {
|
|
367
|
+
unifyStatement(goal, s, cur).forEach((r) => go(rest, r, 0));
|
|
368
|
+
});
|
|
369
|
+
};
|
|
370
|
+
go(goals, b, 0);
|
|
371
|
+
return out;
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
// -----------------------------------------------------------------------------
|
|
375
|
+
// Forward chaining
|
|
376
|
+
// -----------------------------------------------------------------------------
|
|
377
|
+
|
|
378
|
+
const hash = (s: string): string => {
|
|
379
|
+
let h1 = 0x811c9dc5;
|
|
380
|
+
let h2 = 0x01000193;
|
|
381
|
+
loop((i) => {
|
|
382
|
+
if (i >= s.length) return false;
|
|
383
|
+
const c = s.charCodeAt(i);
|
|
384
|
+
h1 = Math.imul(h1 ^ c, 0x01000193);
|
|
385
|
+
h2 = Math.imul(h2 ^ c, 0x5bd1e995);
|
|
386
|
+
return true;
|
|
387
|
+
});
|
|
388
|
+
return (h1 >>> 0).toString(36) + (h2 >>> 0).toString(36);
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
class Inconsistency {
|
|
392
|
+
readonly rule: Model.Statement;
|
|
393
|
+
constructor(rule: Model.Statement) {
|
|
394
|
+
this.rule = rule;
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
const instantiate = (rule: Rule, b: Bindings): ReadonlyArray<Model.Statement> => {
|
|
399
|
+
const conclusion = walk(rule.conclusion, b);
|
|
400
|
+
if (conclusion.key === FALSE_KEY) throw new Inconsistency(rule.source);
|
|
401
|
+
// A conclusion bound through a variable is asserted as it is.
|
|
402
|
+
if (conclusion !== rule.conclusion) {
|
|
403
|
+
return Option.getOrElse(goalsOf(resolve(conclusion, b)), () => noGoals);
|
|
404
|
+
}
|
|
405
|
+
const goals = goalsOf(conclusion);
|
|
406
|
+
if (Option.isNone(goals)) return noGoals;
|
|
407
|
+
// Fresh blank nodes depend only on the bindings used by the conclusion.
|
|
408
|
+
const used = MutableHashSet.fromIterable(Model.variables(conclusion).map((v) => v.value));
|
|
409
|
+
const entries = Arr.fromIterable(b)
|
|
410
|
+
.filter(([k]) => MutableHashSet.has(used, k))
|
|
411
|
+
.map(([k, v]) => `${k}=${resolve(v, b).key}`);
|
|
412
|
+
const signature = Arr.sort(entries, Order.String).join('|');
|
|
413
|
+
const fresh = MutableHashMap.empty<string, Term.BlankNode>();
|
|
414
|
+
const skolem = (label: string): Term.BlankNode => {
|
|
415
|
+
const known = fresh.backing.get(label);
|
|
416
|
+
if (known !== undefined) return known;
|
|
417
|
+
const node = new Term.BlankNode(`sk${hash(`${rule.source.key}|${signature}|${label}`)}`);
|
|
418
|
+
MutableHashMap.set(fresh, label, node);
|
|
419
|
+
return node;
|
|
420
|
+
};
|
|
421
|
+
// Blank nodes at the top level of the conclusion are instantiated per
|
|
422
|
+
// firing (before the bindings are applied).
|
|
423
|
+
const top = (t: Model.N3Term): Model.N3Term =>
|
|
424
|
+
Guards.isBlankNode(t)
|
|
425
|
+
? skolem(t.value)
|
|
426
|
+
: Model.isCollection(t)
|
|
427
|
+
? new Model.Collection(t.items.map(top))
|
|
428
|
+
: t;
|
|
429
|
+
return goals.value.map(
|
|
430
|
+
(s) =>
|
|
431
|
+
new Model.Statement(
|
|
432
|
+
resolve(top(s.subject), b),
|
|
433
|
+
resolve(top(s.predicate), b),
|
|
434
|
+
resolve(top(s.object), b),
|
|
435
|
+
),
|
|
436
|
+
);
|
|
437
|
+
};
|
|
438
|
+
|
|
439
|
+
class LimitExceeded {
|
|
440
|
+
readonly message: string;
|
|
441
|
+
constructor(message: string) {
|
|
442
|
+
this.message = message;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
/** Forward chaining to a fixpoint; throws `Inconsistency` / `LimitExceeded`. */
|
|
447
|
+
const closureOf = (input: Model.Formula, options?: Options, depth = 0): Result => {
|
|
448
|
+
const maxRounds = options?.maxRounds ?? 1000;
|
|
449
|
+
const maxStatements = options?.maxStatements ?? 1_000_000;
|
|
450
|
+
const store = new Store(input.statements);
|
|
451
|
+
const inferred: Array<Model.Statement> = [];
|
|
452
|
+
// The formula of the store as it stood at the start of the round, made on first use
|
|
453
|
+
let snapshot = Option.none<Model.Formula>();
|
|
454
|
+
const engine: Engine = {
|
|
455
|
+
builtins: options?.builtins ?? true,
|
|
456
|
+
document: () => {
|
|
457
|
+
if (Option.isSome(snapshot)) return snapshot.value;
|
|
458
|
+
const f = new Model.Formula(store.all);
|
|
459
|
+
snapshot = Option.some(f);
|
|
460
|
+
return f;
|
|
461
|
+
},
|
|
462
|
+
conclusion: (f) => {
|
|
463
|
+
if (depth > 8) throw new LimitExceeded('log:conclusion nested too deeply');
|
|
464
|
+
return closureOf(f, options, depth + 1).closure;
|
|
465
|
+
},
|
|
466
|
+
};
|
|
467
|
+
let result = Option.none<Result>();
|
|
468
|
+
loop((i) => {
|
|
469
|
+
const round = i + 1;
|
|
470
|
+
if (round > maxRounds) return false;
|
|
471
|
+
snapshot = Option.none();
|
|
472
|
+
const fresh: Array<Model.Statement> = [];
|
|
473
|
+
rules(new Model.Formula(store.all)).forEach((rule) => {
|
|
474
|
+
solve(store, rule.premise, noBindings, engine).forEach((b) => {
|
|
475
|
+
instantiate(rule, b).forEach((s) => {
|
|
476
|
+
if (!store.has(s)) fresh.push(s);
|
|
477
|
+
});
|
|
478
|
+
});
|
|
479
|
+
});
|
|
480
|
+
let added = 0;
|
|
481
|
+
fresh.forEach((s) => {
|
|
482
|
+
if (store.add(s)) {
|
|
483
|
+
inferred.push(s);
|
|
484
|
+
added++;
|
|
485
|
+
}
|
|
486
|
+
});
|
|
487
|
+
if (store.all.length > maxStatements) {
|
|
488
|
+
throw new LimitExceeded(`Closure exceeds ${maxStatements} statements`);
|
|
489
|
+
}
|
|
490
|
+
if (added > 0) return true;
|
|
491
|
+
result = Option.some({
|
|
492
|
+
closure: new Model.Formula(store.all),
|
|
493
|
+
inferred: new Model.Formula(inferred),
|
|
494
|
+
rounds: round,
|
|
495
|
+
});
|
|
496
|
+
return false;
|
|
497
|
+
});
|
|
498
|
+
if (Option.isSome(result)) return result.value;
|
|
499
|
+
throw new LimitExceeded(`No fixpoint after ${maxRounds} rounds`);
|
|
500
|
+
};
|
|
501
|
+
|
|
502
|
+
/**
|
|
503
|
+
* Computes the deductive closure of a formula under its rules.
|
|
504
|
+
*
|
|
505
|
+
* @example
|
|
506
|
+
* ```ts
|
|
507
|
+
* import { Effect } from 'effect'
|
|
508
|
+
* import { N3, Reasoner } from '@thomasfosterau/effect-rdf/n3'
|
|
509
|
+
*
|
|
510
|
+
* const program = Effect.gen(function* () {
|
|
511
|
+
* const doc = yield* N3.parse(`@prefix : <http://example.org/> .
|
|
512
|
+
* :socrates a :Man .
|
|
513
|
+
* { ?x a :Man } => { ?x a :Mortal } .`)
|
|
514
|
+
* const { inferred } = yield* Reasoner.reason(doc.formula)
|
|
515
|
+
* return N3.serializeDocument(inferred) // :socrates a :Mortal .
|
|
516
|
+
* })
|
|
517
|
+
* ```
|
|
518
|
+
*
|
|
519
|
+
* @since 0.1.0
|
|
520
|
+
* @category reasoning
|
|
521
|
+
*/
|
|
522
|
+
export const reason = (
|
|
523
|
+
formula: Model.Formula | Model.Document,
|
|
524
|
+
options?: Options,
|
|
525
|
+
): Effect.Effect<Result, ReasonerError> =>
|
|
526
|
+
Effect.sync(() => closureOf(Model.isFormula(formula) ? formula : formula.formula, options)).pipe(
|
|
527
|
+
Effect.catchDefect((e) =>
|
|
528
|
+
e instanceof Inconsistency
|
|
529
|
+
? Effect.fail(new ReasonerError({ message: `Inconsistency derived by rule ${e.rule.key}` }))
|
|
530
|
+
: e instanceof LimitExceeded
|
|
531
|
+
? Effect.fail(new ReasonerError({ message: e.message }))
|
|
532
|
+
: Effect.die(e),
|
|
533
|
+
),
|
|
534
|
+
Effect.tap((result) => Effect.annotateCurrentSpan('n3.statements', result.closure.size)),
|
|
535
|
+
Effect.withSpan('Reasoner.reason', {
|
|
536
|
+
attributes: {
|
|
537
|
+
'n3.input.statements': (Model.isFormula(formula) ? formula : formula.formula).size,
|
|
538
|
+
},
|
|
539
|
+
}),
|
|
540
|
+
);
|
|
541
|
+
|
|
542
|
+
/**
|
|
543
|
+
* Answers a query: all bindings of the variables (and blank nodes) of
|
|
544
|
+
* `pattern` under which every statement of `pattern` holds in `formula`
|
|
545
|
+
* (builtins are evaluated).
|
|
546
|
+
*
|
|
547
|
+
* @since 0.1.0
|
|
548
|
+
* @category reasoning
|
|
549
|
+
*/
|
|
550
|
+
export const query = (
|
|
551
|
+
formula: Model.Formula,
|
|
552
|
+
pattern: Model.Formula,
|
|
553
|
+
): ReadonlyArray<ReadonlyMap<string, Model.N3Term>> => {
|
|
554
|
+
const store = new Store(formula.statements);
|
|
555
|
+
const blanks = topBlanks(pattern.statements);
|
|
556
|
+
const goals = pattern.statements.map((s) => statementBlanksToVariables(s, blanks));
|
|
557
|
+
return solve(store, goals, noBindings, {
|
|
558
|
+
builtins: true,
|
|
559
|
+
document: () => formula,
|
|
560
|
+
conclusion: (f) => closureOf(f).closure,
|
|
561
|
+
}).map((b) => {
|
|
562
|
+
const answer = MutableHashMap.empty<string, Model.N3Term>();
|
|
563
|
+
b.forEach((v, k) => {
|
|
564
|
+
if (!k.startsWith(BLANK_VAR)) MutableHashMap.set(answer, k, resolve(v, b));
|
|
565
|
+
});
|
|
566
|
+
return answer.backing;
|
|
567
|
+
});
|
|
568
|
+
};
|
package/src/n3/Vocab.ts
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Namespaces used by Notation3: the SWAP builtin namespaces (`log:`,
|
|
3
|
+
* `math:`, `string:`, `list:`, `time:`, `crypto:`) and the `i18n:`
|
|
4
|
+
* namespace for directional language-tagged strings.
|
|
5
|
+
*
|
|
6
|
+
* @since 0.1.0
|
|
7
|
+
*/
|
|
8
|
+
import * as Namespace from '../Namespace.ts';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* The `log:` namespace (`http://www.w3.org/2000/10/swap/log#`). `=>` is
|
|
12
|
+
* `log:implies` and `<=` is `log:isImpliedBy`.
|
|
13
|
+
*
|
|
14
|
+
* @since 0.1.0
|
|
15
|
+
* @category namespaces
|
|
16
|
+
*/
|
|
17
|
+
export const log = Namespace.vocabulary('http://www.w3.org/2000/10/swap/log#', [
|
|
18
|
+
'implies',
|
|
19
|
+
'isImpliedBy',
|
|
20
|
+
'equalTo',
|
|
21
|
+
'notEqualTo',
|
|
22
|
+
'includes',
|
|
23
|
+
'notIncludes',
|
|
24
|
+
'semantics',
|
|
25
|
+
'conclusion',
|
|
26
|
+
'conjunction',
|
|
27
|
+
'collectAllIn',
|
|
28
|
+
'forAllIn',
|
|
29
|
+
'uri',
|
|
30
|
+
'rawType',
|
|
31
|
+
'dtlit',
|
|
32
|
+
'langlit',
|
|
33
|
+
'Formula',
|
|
34
|
+
'Literal',
|
|
35
|
+
'Other',
|
|
36
|
+
'List',
|
|
37
|
+
]);
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* The `math:` namespace (`http://www.w3.org/2000/10/swap/math#`).
|
|
41
|
+
*
|
|
42
|
+
* @since 0.1.0
|
|
43
|
+
* @category namespaces
|
|
44
|
+
*/
|
|
45
|
+
export const math = Namespace.make('http://www.w3.org/2000/10/swap/math#');
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The `string:` namespace (`http://www.w3.org/2000/10/swap/string#`).
|
|
49
|
+
*
|
|
50
|
+
* @since 0.1.0
|
|
51
|
+
* @category namespaces
|
|
52
|
+
*/
|
|
53
|
+
export const string = Namespace.make('http://www.w3.org/2000/10/swap/string#');
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The `list:` namespace (`http://www.w3.org/2000/10/swap/list#`).
|
|
57
|
+
*
|
|
58
|
+
* @since 0.1.0
|
|
59
|
+
* @category namespaces
|
|
60
|
+
*/
|
|
61
|
+
export const list = Namespace.make('http://www.w3.org/2000/10/swap/list#');
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* The `time:` namespace (`http://www.w3.org/2000/10/swap/time#`).
|
|
65
|
+
*
|
|
66
|
+
* @since 0.1.0
|
|
67
|
+
* @category namespaces
|
|
68
|
+
*/
|
|
69
|
+
export const time = Namespace.make('http://www.w3.org/2000/10/swap/time#');
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The `crypto:` namespace (`http://www.w3.org/2000/10/swap/crypto#`).
|
|
73
|
+
*
|
|
74
|
+
* @since 0.1.0
|
|
75
|
+
* @category namespaces
|
|
76
|
+
*/
|
|
77
|
+
export const crypto = Namespace.make('http://www.w3.org/2000/10/swap/crypto#');
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* The `i18n:` namespace (`https://www.w3.org/ns/i18n#`). A literal typed
|
|
81
|
+
* `i18n:{language}_{direction}` (e.g. `"…"^^i18n:ar-eg_rtl`) is parsed as a
|
|
82
|
+
* directional language-tagged string, and directional language-tagged
|
|
83
|
+
* strings are serialised that way.
|
|
84
|
+
*
|
|
85
|
+
* @since 0.1.0
|
|
86
|
+
* @category namespaces
|
|
87
|
+
*/
|
|
88
|
+
export const i18n = Namespace.make('https://www.w3.org/ns/i18n#');
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* `owl:sameAs`, written `=` in N3.
|
|
92
|
+
*
|
|
93
|
+
* @since 0.1.0
|
|
94
|
+
* @category terms
|
|
95
|
+
*/
|
|
96
|
+
export const sameAs = Namespace.make('http://www.w3.org/2002/07/owl#')('sameAs');
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Prefixes for the N3 builtin namespaces.
|
|
100
|
+
*
|
|
101
|
+
* @since 0.1.0
|
|
102
|
+
* @category prefixes
|
|
103
|
+
*/
|
|
104
|
+
export const prefixes = {
|
|
105
|
+
log: log.base,
|
|
106
|
+
math: math.base,
|
|
107
|
+
string: string.base,
|
|
108
|
+
list: list.base,
|
|
109
|
+
time: time.base,
|
|
110
|
+
crypto: crypto.base,
|
|
111
|
+
} as const;
|
package/src/n3/index.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notation3 (N3) for Effect: an N3 data model with formulas, variables and
|
|
3
|
+
* collections, a conformant parser, a pretty-printing serializer, a mapping
|
|
4
|
+
* to and from core RDF datasets, isomorphism checking and a simple
|
|
5
|
+
* forward-chaining reasoner.
|
|
6
|
+
*
|
|
7
|
+
* @since 0.1.0
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/** @since 0.1.0 */
|
|
11
|
+
export * as Isomorphism from './Isomorphism.ts';
|
|
12
|
+
/** @since 0.1.0 */
|
|
13
|
+
export * as Mapping from './Mapping.ts';
|
|
14
|
+
/** @since 0.1.0 */
|
|
15
|
+
export * as Model from './Model.ts';
|
|
16
|
+
/** @since 0.1.0 */
|
|
17
|
+
export * as N3 from './N3.ts';
|
|
18
|
+
/** @since 0.1.0 */
|
|
19
|
+
export * as Reasoner from './Reasoner.ts';
|
|
20
|
+
/** @since 0.1.0 */
|
|
21
|
+
export * as Vocab from './Vocab.ts';
|