@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,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BCP 47 language tags, as RDF 1.2 requires them: well-formedness (BCP 47
|
|
3
|
+
* §2.2.9, the `Language-Tag` ABNF of §2.1), the canonical lower-case form
|
|
4
|
+
* RDF terms carry, and a `Schema` for validating tags at a boundary.
|
|
5
|
+
*
|
|
6
|
+
* The syntax packages keep their grammar's own `LANGTAG` production
|
|
7
|
+
* (`[a-zA-Z]+ ('-' [a-zA-Z0-9]+)*`), which the W3C suites test and which is
|
|
8
|
+
* looser than BCP 47; use `isWellFormed` where full BCP 47 is wanted.
|
|
9
|
+
*
|
|
10
|
+
* @since 0.1.0
|
|
11
|
+
*/
|
|
12
|
+
import * as Schema from 'effect/Schema';
|
|
13
|
+
|
|
14
|
+
const ALNUM = '[a-z0-9]';
|
|
15
|
+
// language = 2*3ALPHA ["-" extlang] / 4ALPHA / 5*8ALPHA; extlang = 3ALPHA *2("-" 3ALPHA)
|
|
16
|
+
const LANGUAGE = '(?:[a-z]{2,3}(?:-[a-z]{3}){0,3}|[a-z]{4,8})';
|
|
17
|
+
const SCRIPT = '(?:-[a-z]{4})?';
|
|
18
|
+
const REGION = '(?:-(?:[a-z]{2}|[0-9]{3}))?';
|
|
19
|
+
const VARIANTS = `(?:-(?:${ALNUM}{5,8}|[0-9]${ALNUM}{3}))*`;
|
|
20
|
+
// singleton = alphanum except "x"
|
|
21
|
+
const EXTENSIONS = `(?:-[0-9a-wy-z](?:-${ALNUM}{2,8})+)*`;
|
|
22
|
+
const PRIVATE_USE = `x(?:-${ALNUM}{1,8})+`;
|
|
23
|
+
const LANGTAG = `${LANGUAGE}${SCRIPT}${REGION}${VARIANTS}${EXTENSIONS}(?:-${PRIVATE_USE})?`;
|
|
24
|
+
|
|
25
|
+
// The grandfathered tags (BCP 47 §2.1, `irregular` and `regular`).
|
|
26
|
+
const GRANDFATHERED = [
|
|
27
|
+
'en-gb-oed',
|
|
28
|
+
'i-ami',
|
|
29
|
+
'i-bnn',
|
|
30
|
+
'i-default',
|
|
31
|
+
'i-enochian',
|
|
32
|
+
'i-hak',
|
|
33
|
+
'i-klingon',
|
|
34
|
+
'i-lux',
|
|
35
|
+
'i-mingo',
|
|
36
|
+
'i-navajo',
|
|
37
|
+
'i-pwn',
|
|
38
|
+
'i-tao',
|
|
39
|
+
'i-tay',
|
|
40
|
+
'i-tsu',
|
|
41
|
+
'sgn-be-fr',
|
|
42
|
+
'sgn-be-nl',
|
|
43
|
+
'sgn-ch-de',
|
|
44
|
+
'art-lojban',
|
|
45
|
+
'cel-gaulish',
|
|
46
|
+
'no-bok',
|
|
47
|
+
'no-nyn',
|
|
48
|
+
'zh-guoyu',
|
|
49
|
+
'zh-hakka',
|
|
50
|
+
'zh-min',
|
|
51
|
+
'zh-min-nan',
|
|
52
|
+
'zh-xiang',
|
|
53
|
+
].join('|');
|
|
54
|
+
|
|
55
|
+
const WELL_FORMED = new RegExp(`^(?:${LANGTAG}|${PRIVATE_USE}|${GRANDFATHERED})$`, 'i');
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Whether a string is a well-formed BCP 47 language tag (§2.2.9): it matches
|
|
59
|
+
* the `Language-Tag` ABNF, case-insensitively. Registry validity (known
|
|
60
|
+
* subtags, no duplicate variants or extensions) is not checked.
|
|
61
|
+
*
|
|
62
|
+
* @since 0.1.0
|
|
63
|
+
* @category predicates
|
|
64
|
+
*/
|
|
65
|
+
export const isWellFormed = (tag: string): boolean => WELL_FORMED.test(tag);
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* The form a language tag takes in an RDF term: lower case (RDF 1.2 compares
|
|
69
|
+
* tags case-insensitively, and `Term.literal` lower-cases them).
|
|
70
|
+
*
|
|
71
|
+
* @since 0.1.0
|
|
72
|
+
* @category formatting
|
|
73
|
+
*/
|
|
74
|
+
export const normalize = (tag: string): string => tag.toLowerCase();
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Schema of a well-formed BCP 47 language tag (`isWellFormed`): a string,
|
|
78
|
+
* decoded unchanged.
|
|
79
|
+
*
|
|
80
|
+
* @since 0.1.0
|
|
81
|
+
* @category schemas
|
|
82
|
+
*/
|
|
83
|
+
export const LanguageTagSchema: Schema.String = Schema.String.check(
|
|
84
|
+
Schema.makeFilter((tag: string) => isWellFormed(tag), {
|
|
85
|
+
identifier: 'isLanguageTag',
|
|
86
|
+
title: 'Language tag',
|
|
87
|
+
description: 'A well-formed BCP 47 language tag.',
|
|
88
|
+
expected: 'a BCP 47 language tag',
|
|
89
|
+
}),
|
|
90
|
+
).annotate({ identifier: 'LanguageTag' });
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* The type `LanguageTagSchema` decodes to: a string.
|
|
94
|
+
*
|
|
95
|
+
* @since 0.1.0
|
|
96
|
+
* @category schemas
|
|
97
|
+
*/
|
|
98
|
+
export type LanguageTagSchema = typeof LanguageTagSchema.Type;
|
package/src/Namespace.ts
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Namespaces and strongly-typed vocabularies.
|
|
3
|
+
*
|
|
4
|
+
* ```ts
|
|
5
|
+
* import { Namespace } from "@thomasfosterau/effect-rdf"
|
|
6
|
+
*
|
|
7
|
+
* const ex = Namespace.make("http://example.org/")
|
|
8
|
+
* ex("alice") // NamedNode<"http://example.org/alice">
|
|
9
|
+
*
|
|
10
|
+
* const foaf = Namespace.vocabulary("http://xmlns.com/foaf/0.1/", ["name", "knows"])
|
|
11
|
+
* foaf.name // NamedNode<"http://xmlns.com/foaf/0.1/name">
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* @since 0.1.0
|
|
15
|
+
*/
|
|
16
|
+
import { NamedNode } from './Term.ts';
|
|
17
|
+
import * as MutableHashMap from 'effect/MutableHashMap';
|
|
18
|
+
import * as Option from 'effect/Option';
|
|
19
|
+
import * as Predicate from 'effect/Predicate';
|
|
20
|
+
|
|
21
|
+
/** Whether `node` is the IRI `iri`, with the IRI's type. */
|
|
22
|
+
const hasIri = <const Iri extends string>(node: NamedNode, iri: Iri): node is NamedNode<Iri> =>
|
|
23
|
+
node.value === iri;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* A function that mints IRIs within a namespace.
|
|
27
|
+
*
|
|
28
|
+
* @since 0.1.0
|
|
29
|
+
* @category models
|
|
30
|
+
*/
|
|
31
|
+
export interface Namespace<Base extends string> {
|
|
32
|
+
<const Local extends string>(local: Local): NamedNode<`${Base}${Local}`>;
|
|
33
|
+
readonly base: Base;
|
|
34
|
+
readonly node: NamedNode<Base>;
|
|
35
|
+
/** Whether an IRI belongs to this namespace. */
|
|
36
|
+
readonly contains: (iri: string | NamedNode) => boolean;
|
|
37
|
+
/** The local part of an IRI within this namespace, if it belongs to it. */
|
|
38
|
+
readonly localName: (iri: string | NamedNode) => string | undefined;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* @since 0.1.0
|
|
43
|
+
* @category constructors
|
|
44
|
+
*/
|
|
45
|
+
export const make = <const Base extends string>(base: Base): Namespace<Base> => {
|
|
46
|
+
const cache = MutableHashMap.empty<string, NamedNode>();
|
|
47
|
+
const ns = <const Local extends string>(local: Local): NamedNode<`${Base}${Local}`> => {
|
|
48
|
+
const iri: `${Base}${Local}` = `${base}${local}`;
|
|
49
|
+
return Option.getOrElse(
|
|
50
|
+
Option.filter(MutableHashMap.get(cache, local), (node) => hasIri(node, iri)),
|
|
51
|
+
() => {
|
|
52
|
+
const node = new NamedNode(iri);
|
|
53
|
+
MutableHashMap.set(cache, local, node);
|
|
54
|
+
return node;
|
|
55
|
+
},
|
|
56
|
+
);
|
|
57
|
+
};
|
|
58
|
+
const contains = (iri: string | NamedNode) =>
|
|
59
|
+
(Predicate.isString(iri) ? iri : iri.value).startsWith(base);
|
|
60
|
+
return Object.assign(ns, {
|
|
61
|
+
base,
|
|
62
|
+
node: new NamedNode(base),
|
|
63
|
+
contains,
|
|
64
|
+
localName: (iri: string | NamedNode) => {
|
|
65
|
+
const value = Predicate.isString(iri) ? iri : iri.value;
|
|
66
|
+
return value.startsWith(base) ? value.slice(base.length) : undefined;
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* A closed vocabulary: a namespace plus a fixed set of typed terms.
|
|
73
|
+
*
|
|
74
|
+
* @since 0.1.0
|
|
75
|
+
* @category models
|
|
76
|
+
*/
|
|
77
|
+
export type Vocabulary<Base extends string, Terms extends string> = Namespace<Base> & {
|
|
78
|
+
readonly [K in Terms]: NamedNode<`${Base}${K}`>;
|
|
79
|
+
} & { readonly terms: ReadonlyArray<Terms> };
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Creates a closed vocabulary with statically-known terms.
|
|
83
|
+
*
|
|
84
|
+
* @since 0.1.0
|
|
85
|
+
* @category constructors
|
|
86
|
+
*/
|
|
87
|
+
export const vocabulary = <const Base extends string, const Terms extends string>(
|
|
88
|
+
base: Base,
|
|
89
|
+
terms: ReadonlyArray<Terms>,
|
|
90
|
+
): Vocabulary<Base, Terms> => {
|
|
91
|
+
const ns = make(base);
|
|
92
|
+
const props: PropertyDescriptorMap = {
|
|
93
|
+
terms: { value: terms, enumerable: false },
|
|
94
|
+
};
|
|
95
|
+
terms.forEach((term) => {
|
|
96
|
+
props[term] = { value: ns(term), enumerable: true };
|
|
97
|
+
});
|
|
98
|
+
// SAFETY: `props` defines one property per term in `Terms`.
|
|
99
|
+
return Object.defineProperties(ns, props) as Vocabulary<Base, Terms>;
|
|
100
|
+
};
|
package/src/PrefixMap.ts
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Immutable prefix ↔ namespace mappings used to expand and compact IRIs.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import * as Option from 'effect/Option';
|
|
7
|
+
import { NamedNode } from './Term.ts';
|
|
8
|
+
import { commonPrefixes } from './Vocab.ts';
|
|
9
|
+
import * as Predicate from 'effect/Predicate';
|
|
10
|
+
import * as Record from 'effect/Record';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* @since 0.1.0
|
|
14
|
+
* @category models
|
|
15
|
+
*/
|
|
16
|
+
export interface PrefixMap {
|
|
17
|
+
readonly prefixes: ReadonlyMap<string, string>;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* The `prefixes` of a prefix map: a native `ReadonlyMap`, as the public
|
|
22
|
+
* field is typed; a later entry for a prefix replaces an earlier one.
|
|
23
|
+
*/
|
|
24
|
+
function prefixMap(entries: Iterable<readonly [string, string]>): ReadonlyMap<string, string> {
|
|
25
|
+
return new Map(entries);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* @since 0.1.0
|
|
30
|
+
* @category constructors
|
|
31
|
+
*/
|
|
32
|
+
export const empty: PrefixMap = { prefixes: prefixMap([]) };
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* @since 0.1.0
|
|
36
|
+
* @category constructors
|
|
37
|
+
*/
|
|
38
|
+
export const make = (
|
|
39
|
+
prefixes: Record.ReadonlyRecord<string, string> | Iterable<readonly [string, string]>,
|
|
40
|
+
): PrefixMap => ({
|
|
41
|
+
prefixes: prefixMap(Symbol.iterator in prefixes ? prefixes : Record.toEntries(prefixes)),
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* A prefix map containing `rdf`, `rdfs`, `xsd` and `owl`.
|
|
46
|
+
*
|
|
47
|
+
* @since 0.1.0
|
|
48
|
+
* @category constructors
|
|
49
|
+
*/
|
|
50
|
+
export const common: PrefixMap = make(commonPrefixes);
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* @since 0.1.0
|
|
54
|
+
* @category combinators
|
|
55
|
+
*/
|
|
56
|
+
export const set = (self: PrefixMap, prefix: string, namespace: string): PrefixMap => {
|
|
57
|
+
return { prefixes: prefixMap([...self.prefixes, [prefix, namespace]]) };
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Merges two prefix maps; entries in `that` win.
|
|
62
|
+
*
|
|
63
|
+
* @since 0.1.0
|
|
64
|
+
* @category combinators
|
|
65
|
+
*/
|
|
66
|
+
export const merge = (self: PrefixMap, that: PrefixMap): PrefixMap => ({
|
|
67
|
+
prefixes: prefixMap([...self.prefixes, ...that.prefixes]),
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* @since 0.1.0
|
|
72
|
+
* @category getters
|
|
73
|
+
*/
|
|
74
|
+
export const get = (self: PrefixMap, prefix: string): Option.Option<string> =>
|
|
75
|
+
Option.fromNullishOr(self.prefixes.get(prefix));
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Expands a prefixed name (`prefix:local`) to an IRI.
|
|
79
|
+
*
|
|
80
|
+
* @since 0.1.0
|
|
81
|
+
* @category combinators
|
|
82
|
+
*/
|
|
83
|
+
export const expand = (self: PrefixMap, curie: string): Option.Option<NamedNode> => {
|
|
84
|
+
const i = curie.indexOf(':');
|
|
85
|
+
if (i === -1) return Option.none();
|
|
86
|
+
const ns = self.prefixes.get(curie.slice(0, i));
|
|
87
|
+
return ns === undefined ? Option.none() : Option.some(new NamedNode(ns + curie.slice(i + 1)));
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const PN_LOCAL_SIMPLE =
|
|
91
|
+
/^(?:[A-Za-z0-9_À-�:]|%[0-9A-Fa-f]{2})(?:(?:[A-Za-z0-9_\-.·À-�:]|%[0-9A-Fa-f]{2})*(?:[A-Za-z0-9_\-·À-�:]|%[0-9A-Fa-f]{2}))?$/;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Compacts an IRI to `[prefix, local]` using the longest matching namespace,
|
|
95
|
+
* if the local part is a valid Turtle/SPARQL `PN_LOCAL` without escapes.
|
|
96
|
+
*
|
|
97
|
+
* @since 0.1.0
|
|
98
|
+
* @category combinators
|
|
99
|
+
*/
|
|
100
|
+
export const compact = (
|
|
101
|
+
self: PrefixMap,
|
|
102
|
+
iri: string | NamedNode,
|
|
103
|
+
): Option.Option<readonly [string, string]> => {
|
|
104
|
+
const value = Predicate.isString(iri) ? iri : iri.value;
|
|
105
|
+
let best: Option.Option<readonly [string, string]> = Option.none();
|
|
106
|
+
let bestLength = -1;
|
|
107
|
+
self.prefixes.forEach((ns, prefix) => {
|
|
108
|
+
if (ns.length > bestLength && value.startsWith(ns)) {
|
|
109
|
+
const local = value.slice(ns.length);
|
|
110
|
+
if (local === '' || PN_LOCAL_SIMPLE.test(local)) {
|
|
111
|
+
best = Option.some([prefix, local]);
|
|
112
|
+
bestLength = ns.length;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
return best;
|
|
117
|
+
};
|
package/src/RdfJs.ts
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Conversions to and from the RDF/JS data model
|
|
3
|
+
* (https://rdf.js.org/data-model-spec/), for interoperability with the wider
|
|
4
|
+
* JavaScript RDF ecosystem. No RDF/JS packages are required: the interfaces
|
|
5
|
+
* below are structural.
|
|
6
|
+
*
|
|
7
|
+
* @since 0.1.0
|
|
8
|
+
*/
|
|
9
|
+
import * as Match from 'effect/Match';
|
|
10
|
+
import * as Term from './Term.ts';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* A structural RDF/JS term.
|
|
14
|
+
*
|
|
15
|
+
* @since 0.1.0
|
|
16
|
+
* @category models
|
|
17
|
+
*/
|
|
18
|
+
export type RdfJsTerm =
|
|
19
|
+
| { readonly termType: 'NamedNode'; readonly value: string }
|
|
20
|
+
| { readonly termType: 'BlankNode'; readonly value: string }
|
|
21
|
+
| {
|
|
22
|
+
readonly termType: 'Literal';
|
|
23
|
+
readonly value: string;
|
|
24
|
+
readonly language: string;
|
|
25
|
+
readonly direction?: 'ltr' | 'rtl' | '' | null | undefined;
|
|
26
|
+
readonly datatype: { readonly termType: 'NamedNode'; readonly value: string };
|
|
27
|
+
}
|
|
28
|
+
| { readonly termType: 'Variable'; readonly value: string }
|
|
29
|
+
| { readonly termType: 'DefaultGraph'; readonly value: '' }
|
|
30
|
+
| RdfJsQuad;
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* A structural RDF/JS quad (also used for quoted triples).
|
|
34
|
+
*
|
|
35
|
+
* @since 0.1.0
|
|
36
|
+
* @category models
|
|
37
|
+
*/
|
|
38
|
+
export interface RdfJsQuad {
|
|
39
|
+
readonly termType: 'Quad';
|
|
40
|
+
readonly value: '';
|
|
41
|
+
readonly subject: RdfJsTerm;
|
|
42
|
+
readonly predicate: RdfJsTerm;
|
|
43
|
+
readonly object: RdfJsTerm;
|
|
44
|
+
readonly graph: RdfJsTerm;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Built once: `fromTerm` runs for every term of every quad converted.
|
|
48
|
+
const fromTermMatch: (term: RdfJsTerm) => Term.Term = Match.type<RdfJsTerm>().pipe(
|
|
49
|
+
Match.withReturnType<Term.Term>(),
|
|
50
|
+
Match.when({ termType: 'NamedNode' }, (term) => new Term.NamedNode(term.value)),
|
|
51
|
+
Match.when({ termType: 'BlankNode' }, (term) => new Term.BlankNode(term.value)),
|
|
52
|
+
Match.when({ termType: 'Literal' }, (term) =>
|
|
53
|
+
term.language !== ''
|
|
54
|
+
? Term.literal(term.value, {
|
|
55
|
+
language: term.language,
|
|
56
|
+
direction:
|
|
57
|
+
term.direction === 'ltr' || term.direction === 'rtl' ? term.direction : undefined,
|
|
58
|
+
})
|
|
59
|
+
: Term.literal(term.value, new Term.NamedNode(term.datatype.value)),
|
|
60
|
+
),
|
|
61
|
+
Match.when({ termType: 'Variable' }, (term) => new Term.Variable(term.value)),
|
|
62
|
+
Match.when({ termType: 'DefaultGraph' }, () => Term.defaultGraph),
|
|
63
|
+
// SAFETY: an RDF/JS quad term's components are a subject, a predicate and an object.
|
|
64
|
+
Match.when(
|
|
65
|
+
{ termType: 'Quad' },
|
|
66
|
+
(term) =>
|
|
67
|
+
new Term.Triple(
|
|
68
|
+
fromTerm(term.subject) as Term.Subject,
|
|
69
|
+
fromTerm(term.predicate) as Term.Predicate,
|
|
70
|
+
fromTerm(term.object) as Term.Object,
|
|
71
|
+
),
|
|
72
|
+
),
|
|
73
|
+
Match.exhaustive,
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Converts an RDF/JS term. Quads appearing as terms become triple terms.
|
|
78
|
+
*
|
|
79
|
+
* @since 0.1.0
|
|
80
|
+
* @category conversions
|
|
81
|
+
*/
|
|
82
|
+
export const fromTerm = (term: RdfJsTerm): Term.Term => fromTermMatch(term);
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Converts an RDF/JS quad to a `Quad`.
|
|
86
|
+
*
|
|
87
|
+
* @since 0.1.0
|
|
88
|
+
* @category conversions
|
|
89
|
+
*/
|
|
90
|
+
// SAFETY: an RDF/JS quad's components are a subject, a predicate, an object and a graph.
|
|
91
|
+
export const fromQuad = (quad: RdfJsQuad): Term.Quad =>
|
|
92
|
+
new Term.Quad(
|
|
93
|
+
fromTerm(quad.subject) as Term.Subject,
|
|
94
|
+
fromTerm(quad.predicate) as Term.Predicate,
|
|
95
|
+
fromTerm(quad.object) as Term.Object,
|
|
96
|
+
fromTerm(quad.graph) as Term.Graph,
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
// Built once: `toTerm` runs for every term of every quad converted.
|
|
100
|
+
const toTermMatch: (term: Term.Term) => RdfJsTerm = Match.type<Term.Term>().pipe(
|
|
101
|
+
Match.withReturnType<RdfJsTerm>(),
|
|
102
|
+
Match.tag('NamedNode', 'BlankNode', 'Variable', (term) => ({
|
|
103
|
+
termType: term._tag,
|
|
104
|
+
value: term.value,
|
|
105
|
+
})),
|
|
106
|
+
Match.tag('DefaultGraph', () => ({ termType: 'DefaultGraph', value: '' })),
|
|
107
|
+
Match.tag('Literal', (term) => ({
|
|
108
|
+
termType: 'Literal',
|
|
109
|
+
value: term.value,
|
|
110
|
+
language: term.language,
|
|
111
|
+
direction: term.direction ?? '',
|
|
112
|
+
datatype: { termType: 'NamedNode', value: term.datatype.value },
|
|
113
|
+
})),
|
|
114
|
+
Match.tag('Triple', (term) => ({
|
|
115
|
+
termType: 'Quad',
|
|
116
|
+
value: '',
|
|
117
|
+
subject: toTerm(term.subject),
|
|
118
|
+
predicate: toTerm(term.predicate),
|
|
119
|
+
object: toTerm(term.object),
|
|
120
|
+
graph: { termType: 'DefaultGraph', value: '' },
|
|
121
|
+
})),
|
|
122
|
+
Match.exhaustive,
|
|
123
|
+
);
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Converts a term to a plain RDF/JS term object.
|
|
127
|
+
*
|
|
128
|
+
* @since 0.1.0
|
|
129
|
+
* @category conversions
|
|
130
|
+
*/
|
|
131
|
+
export const toTerm = (term: Term.Term): RdfJsTerm => toTermMatch(term);
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Converts a quad to a plain RDF/JS quad object.
|
|
135
|
+
*
|
|
136
|
+
* @since 0.1.0
|
|
137
|
+
* @category conversions
|
|
138
|
+
*/
|
|
139
|
+
export const toQuad = (quad: Term.Quad): RdfJsQuad => ({
|
|
140
|
+
termType: 'Quad',
|
|
141
|
+
value: '',
|
|
142
|
+
subject: toTerm(quad.subject),
|
|
143
|
+
predicate: toTerm(quad.predicate),
|
|
144
|
+
object: toTerm(quad.object),
|
|
145
|
+
graph: toTerm(quad.graph),
|
|
146
|
+
});
|
package/src/Rdfs.ts
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RDF Schema: class and property hierarchies, and RDFS entailment.
|
|
3
|
+
*
|
|
4
|
+
* @since 0.1.0
|
|
5
|
+
*/
|
|
6
|
+
import * as Dataset from './Dataset.ts';
|
|
7
|
+
import * as Term from './Term.ts';
|
|
8
|
+
import { rdf, rdfs } from './Vocab.ts';
|
|
9
|
+
import * as Arr from 'effect/Array';
|
|
10
|
+
import * as MutableHashMap from 'effect/MutableHashMap';
|
|
11
|
+
import * as Option from 'effect/Option';
|
|
12
|
+
import { loop } from './internal/loop.ts';
|
|
13
|
+
|
|
14
|
+
const transitiveClosure = (
|
|
15
|
+
self: Dataset.Dataset,
|
|
16
|
+
start: Term.Object,
|
|
17
|
+
property: Term.NamedNode,
|
|
18
|
+
direction: 'up' | 'down',
|
|
19
|
+
): ReadonlyArray<Term.Object> => {
|
|
20
|
+
const seen = MutableHashMap.empty<string, Term.Object>();
|
|
21
|
+
const stack: Array<Term.Object> = [start];
|
|
22
|
+
// Depth-first, with an explicit stack: hierarchies can be deep
|
|
23
|
+
loop(() => {
|
|
24
|
+
const node = stack.pop();
|
|
25
|
+
if (node === undefined) return false;
|
|
26
|
+
const next: ReadonlyArray<Term.Object> =
|
|
27
|
+
direction === 'up'
|
|
28
|
+
? Term.isLiteral(node)
|
|
29
|
+
? []
|
|
30
|
+
: Dataset.objectsOf(self, node, property)
|
|
31
|
+
: Dataset.subjectsOf(self, property, node);
|
|
32
|
+
next.forEach((n) => {
|
|
33
|
+
if (!MutableHashMap.has(seen, n.key) && n.key !== start.key) {
|
|
34
|
+
MutableHashMap.set(seen, n.key, n);
|
|
35
|
+
stack.push(n);
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
return true;
|
|
39
|
+
});
|
|
40
|
+
return Arr.fromIterable(MutableHashMap.values(seen));
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* All (transitive) superclasses of a class, excluding the class itself.
|
|
45
|
+
*
|
|
46
|
+
* @since 0.1.0
|
|
47
|
+
* @category hierarchy
|
|
48
|
+
*/
|
|
49
|
+
export const superClasses = (
|
|
50
|
+
self: Dataset.Dataset,
|
|
51
|
+
cls: Term.Resource,
|
|
52
|
+
): ReadonlyArray<Term.Object> => transitiveClosure(self, cls, rdfs.subClassOf, 'up');
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* All (transitive) subclasses of a class, excluding the class itself.
|
|
56
|
+
*
|
|
57
|
+
* @since 0.1.0
|
|
58
|
+
* @category hierarchy
|
|
59
|
+
*/
|
|
60
|
+
export const subClasses = (self: Dataset.Dataset, cls: Term.Resource): ReadonlyArray<Term.Object> =>
|
|
61
|
+
transitiveClosure(self, cls, rdfs.subClassOf, 'down');
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* All (transitive) superproperties of a property, excluding itself.
|
|
65
|
+
*
|
|
66
|
+
* @since 0.1.0
|
|
67
|
+
* @category hierarchy
|
|
68
|
+
*/
|
|
69
|
+
export const superProperties = (
|
|
70
|
+
self: Dataset.Dataset,
|
|
71
|
+
property: Term.Resource,
|
|
72
|
+
): ReadonlyArray<Term.Object> => transitiveClosure(self, property, rdfs.subPropertyOf, 'up');
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* All (transitive) subproperties of a property, excluding itself.
|
|
76
|
+
*
|
|
77
|
+
* @since 0.1.0
|
|
78
|
+
* @category hierarchy
|
|
79
|
+
*/
|
|
80
|
+
export const subProperties = (
|
|
81
|
+
self: Dataset.Dataset,
|
|
82
|
+
property: Term.Resource,
|
|
83
|
+
): ReadonlyArray<Term.Object> => transitiveClosure(self, property, rdfs.subPropertyOf, 'down');
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* The asserted types (`rdf:type` values) of a resource.
|
|
87
|
+
*
|
|
88
|
+
* @since 0.1.0
|
|
89
|
+
* @category hierarchy
|
|
90
|
+
*/
|
|
91
|
+
export const types = (self: Dataset.Dataset, resource: Term.Subject): ReadonlyArray<Term.Object> =>
|
|
92
|
+
Dataset.objectsOf(self, resource, rdf.type);
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Whether `resource` is an instance of `cls`, taking `rdfs:subClassOf` into
|
|
96
|
+
* account.
|
|
97
|
+
*
|
|
98
|
+
* @since 0.1.0
|
|
99
|
+
* @category hierarchy
|
|
100
|
+
*/
|
|
101
|
+
export const isInstanceOf = (
|
|
102
|
+
self: Dataset.Dataset,
|
|
103
|
+
resource: Term.Subject,
|
|
104
|
+
cls: Term.Resource,
|
|
105
|
+
): boolean => {
|
|
106
|
+
const asserted = types(self, resource);
|
|
107
|
+
if (asserted.some((t) => t.key === cls.key)) return true;
|
|
108
|
+
return asserted.some(
|
|
109
|
+
(t) =>
|
|
110
|
+
!Term.isLiteral(t) &&
|
|
111
|
+
transitiveClosure(self, t, rdfs.subClassOf, 'up').some((s) => s.key === cls.key),
|
|
112
|
+
);
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* All instances of a class, including instances of its subclasses.
|
|
117
|
+
*
|
|
118
|
+
* @since 0.1.0
|
|
119
|
+
* @category hierarchy
|
|
120
|
+
*/
|
|
121
|
+
export const instancesOf = (
|
|
122
|
+
self: Dataset.Dataset,
|
|
123
|
+
cls: Term.Resource,
|
|
124
|
+
): ReadonlyArray<Term.Subject> => {
|
|
125
|
+
const classes = [cls, ...subClasses(self, cls)];
|
|
126
|
+
const out = MutableHashMap.empty<string, Term.Subject>();
|
|
127
|
+
classes.forEach((c) =>
|
|
128
|
+
Dataset.subjectsOf(self, rdf.type, c).forEach((s) => {
|
|
129
|
+
MutableHashMap.set(out, s.key, s);
|
|
130
|
+
}),
|
|
131
|
+
);
|
|
132
|
+
return Arr.fromIterable(MutableHashMap.values(out));
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Options for RDFS entailment.
|
|
137
|
+
*
|
|
138
|
+
* @since 0.1.0
|
|
139
|
+
* @category entailment
|
|
140
|
+
*/
|
|
141
|
+
export interface EntailmentOptions {
|
|
142
|
+
/**
|
|
143
|
+
* Include the axiomatic and "every resource is an rdfs:Resource" style
|
|
144
|
+
* triples (rules rdfs4a/4b, rdfs8, rdfs10, rdfs12, rdfs13, rdf1). These
|
|
145
|
+
* produce many uninteresting triples; disabled by default.
|
|
146
|
+
*/
|
|
147
|
+
readonly full?: boolean;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Computes the RDFS closure of the default graph (or every graph
|
|
152
|
+
* independently) by forward chaining the RDFS entailment rules to a fixpoint.
|
|
153
|
+
*
|
|
154
|
+
* Implemented rules: rdfs2 (domain), rdfs3 (range), rdfs5 (subPropertyOf
|
|
155
|
+
* transitivity), rdfs7 (subproperty inheritance), rdfs9 (type inheritance),
|
|
156
|
+
* rdfs11 (subClassOf transitivity), and — when `full` is set — rdf1, rdfs4a,
|
|
157
|
+
* rdfs4b, rdfs6, rdfs8, rdfs10, rdfs12 and rdfs13.
|
|
158
|
+
*
|
|
159
|
+
* @since 0.1.0
|
|
160
|
+
* @category entailment
|
|
161
|
+
*/
|
|
162
|
+
export const closure = (
|
|
163
|
+
self: Dataset.Dataset,
|
|
164
|
+
options: EntailmentOptions = {},
|
|
165
|
+
): Dataset.Dataset => {
|
|
166
|
+
return Arr.reduce(Dataset.graphs(self), self, (result, graph) =>
|
|
167
|
+
Dataset.union(result, closeGraph(Dataset.graph(self, graph), graph, options.full === true)),
|
|
168
|
+
);
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
const asSubject = (o: Term.Object): Option.Option<Term.Subject> =>
|
|
172
|
+
Term.isLiteral(o) ? Option.none() : Option.some(o);
|
|
173
|
+
|
|
174
|
+
const closeGraph = (input: Dataset.Dataset, graph: Term.Graph, full: boolean): Dataset.Dataset => {
|
|
175
|
+
let ds = input;
|
|
176
|
+
const q = (s: Term.Subject, p: Term.Predicate, o: Term.Object) => new Term.Quad(s, p, o, graph);
|
|
177
|
+
// Apply the rules until a round adds nothing
|
|
178
|
+
loop(() => {
|
|
179
|
+
const before = ds.size;
|
|
180
|
+
ds = Dataset.mutate(ds, (b) => {
|
|
181
|
+
const add = (s: Term.Subject, p: Term.Predicate, o: Term.Object) => {
|
|
182
|
+
b.add(q(s, p, o));
|
|
183
|
+
};
|
|
184
|
+
const addFrom = (s: Option.Option<Term.Subject>, p: Term.Predicate, o: Term.Object) => {
|
|
185
|
+
if (Option.isSome(s)) add(s.value, p, o);
|
|
186
|
+
};
|
|
187
|
+
const all = Array.from(ds);
|
|
188
|
+
all.forEach((t) => {
|
|
189
|
+
const { subject: s, predicate: p, object: o } = t;
|
|
190
|
+
const os = asSubject(o);
|
|
191
|
+
if (full) {
|
|
192
|
+
add(p, rdf.type, rdf.Property);
|
|
193
|
+
add(s, rdf.type, rdfs.Resource);
|
|
194
|
+
addFrom(os, rdf.type, rdfs.Resource);
|
|
195
|
+
}
|
|
196
|
+
// rdfs2 / rdfs3
|
|
197
|
+
Dataset.objectsOf(ds, p, rdfs.domain, graph).forEach((d) => add(s, rdf.type, d));
|
|
198
|
+
Dataset.objectsOf(ds, p, rdfs.range, graph).forEach((r) => addFrom(os, rdf.type, r));
|
|
199
|
+
// rdfs7
|
|
200
|
+
Dataset.objectsOf(ds, p, rdfs.subPropertyOf, graph).forEach((sp) => {
|
|
201
|
+
if (Term.isNamedNode(sp)) add(s, sp, o);
|
|
202
|
+
});
|
|
203
|
+
if (p.value === rdfs.subPropertyOf.value) {
|
|
204
|
+
// rdfs5
|
|
205
|
+
if (Option.isSome(os))
|
|
206
|
+
Dataset.objectsOf(ds, os.value, rdfs.subPropertyOf, graph).forEach((x) =>
|
|
207
|
+
add(s, rdfs.subPropertyOf, x),
|
|
208
|
+
);
|
|
209
|
+
} else if (p.value === rdfs.subClassOf.value) {
|
|
210
|
+
// rdfs11
|
|
211
|
+
if (Option.isSome(os))
|
|
212
|
+
Dataset.objectsOf(ds, os.value, rdfs.subClassOf, graph).forEach((x) =>
|
|
213
|
+
add(s, rdfs.subClassOf, x),
|
|
214
|
+
);
|
|
215
|
+
} else if (p.value === rdf.type.value) {
|
|
216
|
+
// rdfs9
|
|
217
|
+
if (Option.isSome(os))
|
|
218
|
+
Dataset.objectsOf(ds, os.value, rdfs.subClassOf, graph).forEach((x) =>
|
|
219
|
+
add(s, rdf.type, x),
|
|
220
|
+
);
|
|
221
|
+
if (full) {
|
|
222
|
+
if (o.key === rdf.Property.key) {
|
|
223
|
+
// SAFETY: a subject is also a valid object.
|
|
224
|
+
add(s, rdfs.subPropertyOf, s); // rdfs6
|
|
225
|
+
}
|
|
226
|
+
if (o.key === rdfs.Class.key) {
|
|
227
|
+
add(s, rdfs.subClassOf, rdfs.Resource); // rdfs8
|
|
228
|
+
// SAFETY: a subject is also a valid object.
|
|
229
|
+
add(s, rdfs.subClassOf, s); // rdfs10
|
|
230
|
+
}
|
|
231
|
+
if (o.key === rdfs.ContainerMembershipProperty.key)
|
|
232
|
+
add(s, rdfs.subPropertyOf, rdfs.member); // rdfs12
|
|
233
|
+
if (o.key === rdfs.Datatype.key) add(s, rdfs.subClassOf, rdfs.Literal); // rdfs13
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
});
|
|
238
|
+
return ds.size !== before;
|
|
239
|
+
});
|
|
240
|
+
return ds;
|
|
241
|
+
};
|