@thomasfosterau/effect-rdf 0.0.0 → 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 +2250 -1
- 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 +187 -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,1014 @@
|
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-D8jQpDG7.mjs";
|
|
2
|
+
import { B as isNamedNode, E as compare, K as isTriple, N as isBlankNode, O as defaultGraph, P as isDefaultGraph, Y as literal, c as NamedNode, d as Quad, o as Literal, t as BlankNode, u as Order$1, y as Triple } from "./Term-CFLG1qu4.mjs";
|
|
3
|
+
import { m as fromIterable } from "./Dataset-BlmlcI7J.mjs";
|
|
4
|
+
import { l as resolve, s as relativize } from "./Iri-Cr92gsQV.mjs";
|
|
5
|
+
import { i as empty, s as make } from "./PrefixMap-BHFPDLO-.mjs";
|
|
6
|
+
import { C as withParseSpan, c as makeCodec, d as makeSerializer, l as makeFormat, n as RdfParseError, o as freshBlankNodePrefix, r as RdfSerializeError, u as makeParser, w as withSerializeSpan } from "./Serialization-DP9H5bYQ.mjs";
|
|
7
|
+
import { _ as Failure, c as escapeAttribute, f as isValidText, l as escapeText, n as NAME_START, p as isWhitespace, s as canonicalize, t as NAME_CHAR, u as isNCName, v as parseText } from "./Xml-B7iihYCS.mjs";
|
|
8
|
+
import * as Arr from "effect/Array";
|
|
9
|
+
import * as MutableHashMap from "effect/MutableHashMap";
|
|
10
|
+
import * as MutableHashSet from "effect/MutableHashSet";
|
|
11
|
+
import * as Option from "effect/Option";
|
|
12
|
+
import * as Predicate from "effect/Predicate";
|
|
13
|
+
import * as Effect from "effect/Effect";
|
|
14
|
+
import * as Match from "effect/Match";
|
|
15
|
+
import * as Order from "effect/Order";
|
|
16
|
+
import * as Result from "effect/Result";
|
|
17
|
+
// src/rdfxml/RdfXml.ts
|
|
18
|
+
/**
|
|
19
|
+
* RDF 1.2 XML Syntax (RDF/XML): parser and serializer.
|
|
20
|
+
*
|
|
21
|
+
* The parser implements the RDF/XML grammar of
|
|
22
|
+
* https://www.w3.org/TR/rdf-syntax-grammar/ together with the RDF 1.2
|
|
23
|
+
* additions: `rdf:version`, base direction via `its:dir`, triple terms via
|
|
24
|
+
* `rdf:parseType="Triple"`, and annotations via `rdf:annotation` /
|
|
25
|
+
* `rdf:annotationNodeID`. `rdf:parseType="Literal"` content is turned into
|
|
26
|
+
* an `rdf:XMLLiteral` using Exclusive XML Canonicalization.
|
|
27
|
+
*
|
|
28
|
+
* The serializer writes readable RDF/XML: typed node elements, nested blank
|
|
29
|
+
* nodes where a blank node is referenced exactly once, namespace
|
|
30
|
+
* declarations taken from `options.prefixes` and generated namespaces for the
|
|
31
|
+
* rest.
|
|
32
|
+
*
|
|
33
|
+
* @since 0.1.0
|
|
34
|
+
*/
|
|
35
|
+
var RdfXml_exports = /* @__PURE__ */ __exportAll({
|
|
36
|
+
codec: () => codec,
|
|
37
|
+
format: () => format,
|
|
38
|
+
parse: () => parse,
|
|
39
|
+
parseDocument: () => parseDocument,
|
|
40
|
+
parseQuads: () => parseQuads,
|
|
41
|
+
parser: () => parser,
|
|
42
|
+
serialize: () => serialize,
|
|
43
|
+
serializer: () => serializer,
|
|
44
|
+
splitIri: () => splitIri
|
|
45
|
+
});
|
|
46
|
+
const RDF = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
|
|
47
|
+
const ITS = "http://www.w3.org/2005/11/its";
|
|
48
|
+
const XSD_STRING = "http://www.w3.org/2001/XMLSchema#string";
|
|
49
|
+
const FORMAT_NAME = "RDF/XML";
|
|
50
|
+
/**
|
|
51
|
+
* The RDF/XML format description (`application/rdf+xml`).
|
|
52
|
+
*
|
|
53
|
+
* @since 0.1.0
|
|
54
|
+
* @category formats
|
|
55
|
+
*/
|
|
56
|
+
const format = makeFormat({
|
|
57
|
+
name: FORMAT_NAME,
|
|
58
|
+
mediaType: "application/rdf+xml",
|
|
59
|
+
extensions: ["rdf", "owl"],
|
|
60
|
+
datasets: false
|
|
61
|
+
});
|
|
62
|
+
const trace = {
|
|
63
|
+
module: "RdfXml",
|
|
64
|
+
format
|
|
65
|
+
};
|
|
66
|
+
const rdf = (local) => RDF + local;
|
|
67
|
+
/** The core syntax terms and the old terms, which are never node, property or attribute names. */
|
|
68
|
+
const RESERVED_TERMS = MutableHashSet.fromIterable([
|
|
69
|
+
"RDF",
|
|
70
|
+
"ID",
|
|
71
|
+
"about",
|
|
72
|
+
"annotation",
|
|
73
|
+
"annotationNodeID",
|
|
74
|
+
"parseType",
|
|
75
|
+
"resource",
|
|
76
|
+
"nodeID",
|
|
77
|
+
"datatype",
|
|
78
|
+
"version",
|
|
79
|
+
"aboutEach",
|
|
80
|
+
"aboutEachPrefix",
|
|
81
|
+
"bagID"
|
|
82
|
+
].map(rdf));
|
|
83
|
+
const UNQUALIFIED_RDF_ATTRIBUTES = MutableHashSet.make("ID", "about", "resource", "parseType", "type", "version");
|
|
84
|
+
const RDF_DESCRIPTION = rdf("Description");
|
|
85
|
+
const RDF_LI = rdf("li");
|
|
86
|
+
const RDF_TYPE = rdf("type");
|
|
87
|
+
const RDF_ID = rdf("ID");
|
|
88
|
+
const RDF_NODE_ID = rdf("nodeID");
|
|
89
|
+
const RDF_ABOUT = rdf("about");
|
|
90
|
+
const RDF_VERSION = rdf("version");
|
|
91
|
+
const RDF_ANNOTATION = rdf("annotation");
|
|
92
|
+
const RDF_ANNOTATION_NODE_ID = rdf("annotationNodeID");
|
|
93
|
+
const RDF_PARSE_TYPE = rdf("parseType");
|
|
94
|
+
const RDF_RESOURCE = rdf("resource");
|
|
95
|
+
const RDF_DATATYPE = rdf("datatype");
|
|
96
|
+
const isReserved = (iri) => MutableHashSet.has(RESERVED_TERMS, iri);
|
|
97
|
+
const isForbiddenNodeElement = (iri) => isReserved(iri) || iri === RDF_LI;
|
|
98
|
+
const isForbiddenPropertyElement = (iri) => isReserved(iri) || iri === RDF_DESCRIPTION;
|
|
99
|
+
const isForbiddenPropertyAttribute = (iri) => isReserved(iri) || iri === RDF_DESCRIPTION || iri === RDF_LI;
|
|
100
|
+
const isElement = Predicate.isTagged("Element");
|
|
101
|
+
const isText = Predicate.isTagged("Text");
|
|
102
|
+
var ParseFailure = class {
|
|
103
|
+
message;
|
|
104
|
+
position;
|
|
105
|
+
constructor(message, position) {
|
|
106
|
+
this.message = message;
|
|
107
|
+
this.position = position;
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
/** Resolves `reference` against the base IRI of `ctx`, if it has one. */
|
|
111
|
+
const resolveIn = (reference, base) => resolve(reference, Option.getOrUndefined(base));
|
|
112
|
+
const isRdf12 = (version) => Option.isSome(version) && version.value !== "1.0" && version.value !== "1.1";
|
|
113
|
+
const rdfType = new NamedNode(rdf("type"));
|
|
114
|
+
const rdfFirst = new NamedNode(rdf("first"));
|
|
115
|
+
const rdfRest = new NamedNode(rdf("rest"));
|
|
116
|
+
const rdfNil = new NamedNode(rdf("nil"));
|
|
117
|
+
const rdfStatement = new NamedNode(rdf("Statement"));
|
|
118
|
+
const rdfSubject = new NamedNode(rdf("subject"));
|
|
119
|
+
const rdfPredicate = new NamedNode(rdf("predicate"));
|
|
120
|
+
const rdfObject = new NamedNode(rdf("object"));
|
|
121
|
+
const rdfReifies = new NamedNode(rdf("reifies"));
|
|
122
|
+
const rdfXmlLiteral = new NamedNode(rdf("XMLLiteral"));
|
|
123
|
+
/**
|
|
124
|
+
* Adds an attribute that is not a syntax attribute of its element to `props`
|
|
125
|
+
* (`rdf:version` aside, which `context` reads).
|
|
126
|
+
*/
|
|
127
|
+
const propertyAttr = (a, parser, props) => {
|
|
128
|
+
if (a.iri === RDF_VERSION) return;
|
|
129
|
+
if (isForbiddenPropertyAttribute(a.iri)) parser.fail(`${a.attribute.name} is not allowed as a property attribute`, a.attribute);
|
|
130
|
+
props.push(a);
|
|
131
|
+
};
|
|
132
|
+
/** Gathers an attribute of a node element (run for every one, so a chain of comparisons). */
|
|
133
|
+
const nodeAttribute = (a, parser, attrs) => {
|
|
134
|
+
const iri = a.iri;
|
|
135
|
+
if (iri !== RDF_ID && iri !== RDF_NODE_ID && iri !== RDF_ABOUT) {
|
|
136
|
+
propertyAttr(a, parser, attrs.props);
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
if (Option.isSome(attrs.idAttr)) parser.fail(`rdf:${attrs.idAttr.value.attribute.localName} and rdf:${a.attribute.localName} cannot be used together`, a.attribute);
|
|
140
|
+
attrs.idAttr = Option.some(a);
|
|
141
|
+
};
|
|
142
|
+
/** Gathers an attribute of a property element (run for every one, so a chain of comparisons). */
|
|
143
|
+
const propertyAttribute = (a, parser, attrs) => {
|
|
144
|
+
const iri = a.iri;
|
|
145
|
+
if (iri === RDF_ID) attrs.id = Option.some(a);
|
|
146
|
+
else if (iri === RDF_ANNOTATION || iri === RDF_ANNOTATION_NODE_ID) {
|
|
147
|
+
if (Option.isSome(attrs.annotation)) parser.fail("rdf:annotation and rdf:annotationNodeID cannot be used together", a.attribute);
|
|
148
|
+
attrs.annotation = Option.some(a);
|
|
149
|
+
} else if (iri === RDF_PARSE_TYPE) attrs.parseType = Option.some(a);
|
|
150
|
+
else if (iri === RDF_RESOURCE) attrs.resource = Option.some(a);
|
|
151
|
+
else if (iri === RDF_NODE_ID) attrs.nodeId = Option.some(a);
|
|
152
|
+
else if (iri === RDF_DATATYPE) attrs.datatype = Option.some(a);
|
|
153
|
+
else propertyAttr(a, parser, attrs.props);
|
|
154
|
+
};
|
|
155
|
+
const isRdfRoot = (root) => root.namespace === RDF && root.localName === "RDF";
|
|
156
|
+
var RdfXmlParser = class {
|
|
157
|
+
sink = [];
|
|
158
|
+
ids = MutableHashSet.empty();
|
|
159
|
+
counter = 0;
|
|
160
|
+
blankNodePrefix;
|
|
161
|
+
defaultVersion;
|
|
162
|
+
constructor(blankNodePrefix, defaultVersion) {
|
|
163
|
+
this.blankNodePrefix = blankNodePrefix;
|
|
164
|
+
this.defaultVersion = defaultVersion;
|
|
165
|
+
}
|
|
166
|
+
fail(message, node) {
|
|
167
|
+
throw new ParseFailure(message, node.position);
|
|
168
|
+
}
|
|
169
|
+
/** Fails if any of `attrs` is present: the first `<name> <why>`. */
|
|
170
|
+
reject(attrs, why) {
|
|
171
|
+
const other = Option.firstSomeOf(attrs);
|
|
172
|
+
if (Option.isSome(other)) {
|
|
173
|
+
const { attribute } = other.value;
|
|
174
|
+
this.fail(`${attribute.name} ${why}`, attribute);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
emit(s, p, o) {
|
|
178
|
+
const t = new Triple(s, p, o);
|
|
179
|
+
this.sink.push(t);
|
|
180
|
+
return t;
|
|
181
|
+
}
|
|
182
|
+
fresh() {
|
|
183
|
+
return new BlankNode(`${this.blankNodePrefix}${this.counter++}`);
|
|
184
|
+
}
|
|
185
|
+
blank(id, node) {
|
|
186
|
+
if (!isNCName(id)) this.fail(`Invalid blank node identifier "${id}"`, node);
|
|
187
|
+
return new BlankNode(`${this.blankNodePrefix}${id}`);
|
|
188
|
+
}
|
|
189
|
+
/** The IRIs of names and datatypes seen so far, which repeat throughout a document. */
|
|
190
|
+
names = MutableHashMap.empty();
|
|
191
|
+
/**
|
|
192
|
+
* The IRIs of the names read so far, by local name, then namespace (a
|
|
193
|
+
* local name rarely has more than one).
|
|
194
|
+
*/
|
|
195
|
+
qualifiedNames = MutableHashMap.empty();
|
|
196
|
+
/**
|
|
197
|
+
* The IRI of a name (`namespace` + `localName`), the same string each time
|
|
198
|
+
* it is read: names repeat throughout a document, and each later lookup of
|
|
199
|
+
* the IRI (in the reserved-term set, the node cache) then hashes nothing.
|
|
200
|
+
*/
|
|
201
|
+
qualified(namespace, localName) {
|
|
202
|
+
const byLocalName = MutableHashMap.get(this.qualifiedNames, localName);
|
|
203
|
+
if (Option.isNone(byLocalName)) {
|
|
204
|
+
const iri = namespace + localName;
|
|
205
|
+
MutableHashMap.set(this.qualifiedNames, localName, [[namespace, iri]]);
|
|
206
|
+
return iri;
|
|
207
|
+
}
|
|
208
|
+
const byNamespace = byLocalName.value;
|
|
209
|
+
const known = byNamespace.find(([ns]) => ns === namespace);
|
|
210
|
+
if (known !== void 0) return known[1];
|
|
211
|
+
const iri = namespace + localName;
|
|
212
|
+
byNamespace.push([namespace, iri]);
|
|
213
|
+
return iri;
|
|
214
|
+
}
|
|
215
|
+
/** The node for the IRI of an element or attribute name, or of a datatype. */
|
|
216
|
+
named(iri) {
|
|
217
|
+
const known = MutableHashMap.get(this.names, iri);
|
|
218
|
+
if (Option.isSome(known)) return known.value;
|
|
219
|
+
const node = new NamedNode(iri);
|
|
220
|
+
MutableHashMap.set(this.names, iri, node);
|
|
221
|
+
return node;
|
|
222
|
+
}
|
|
223
|
+
iri(value, ctx) {
|
|
224
|
+
return new NamedNode(resolveIn(value, ctx.base));
|
|
225
|
+
}
|
|
226
|
+
idIri(id, ctx, node) {
|
|
227
|
+
if (!isNCName(id)) this.fail(`Invalid rdf:ID "${id}"`, node);
|
|
228
|
+
const iri = resolveIn(`#${id}`, ctx.base);
|
|
229
|
+
if (MutableHashSet.has(this.ids, iri)) this.fail(`Duplicate rdf:ID "${id}"`, node);
|
|
230
|
+
MutableHashSet.add(this.ids, iri);
|
|
231
|
+
return new NamedNode(iri);
|
|
232
|
+
}
|
|
233
|
+
literal(value, ctx) {
|
|
234
|
+
if (ctx.language === "") return literal(value);
|
|
235
|
+
return ctx.direction === "" ? literal(value, ctx.language) : literal(value, {
|
|
236
|
+
language: ctx.language,
|
|
237
|
+
direction: ctx.direction
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
/** Computes the evaluation context of an element. */
|
|
241
|
+
context(el, parent) {
|
|
242
|
+
if (Arr.isReadonlyArrayEmpty(el.attributes)) return parent;
|
|
243
|
+
let base = parent.base;
|
|
244
|
+
let language = parent.language;
|
|
245
|
+
let direction = parent.direction;
|
|
246
|
+
let version = parent.version;
|
|
247
|
+
let dir = Option.none();
|
|
248
|
+
el.attributes.forEach((a) => {
|
|
249
|
+
if (a.namespace === "http://www.w3.org/XML/1998/namespace") {
|
|
250
|
+
if (a.localName === "base") base = Option.some(resolveIn(a.value, base));
|
|
251
|
+
else if (a.localName === "lang") language = a.value;
|
|
252
|
+
} else if (a.namespace === ITS && a.localName === "dir") dir = Option.some(a);
|
|
253
|
+
else if ((a.namespace === RDF || a.namespace === void 0) && a.localName === "version") version = Option.some(a.value);
|
|
254
|
+
});
|
|
255
|
+
if (Option.isSome(dir) && isRdf12(version)) {
|
|
256
|
+
const value = dir.value.value;
|
|
257
|
+
if (value !== "ltr" && value !== "rtl" && value !== "") this.fail(`Invalid its:dir value "${value}"`, dir.value);
|
|
258
|
+
direction = value;
|
|
259
|
+
}
|
|
260
|
+
return {
|
|
261
|
+
base,
|
|
262
|
+
language,
|
|
263
|
+
direction,
|
|
264
|
+
version
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
/** The RDF-relevant attributes of an element, with their IRIs. */
|
|
268
|
+
attributes(el) {
|
|
269
|
+
const out = [];
|
|
270
|
+
el.attributes.forEach((a) => {
|
|
271
|
+
if (a.namespace === "http://www.w3.org/XML/1998/namespace") return;
|
|
272
|
+
if (a.prefix.toLowerCase().startsWith("xml")) return;
|
|
273
|
+
if (a.namespace === void 0) {
|
|
274
|
+
if (a.localName.toLowerCase().startsWith("xml")) return;
|
|
275
|
+
if (!MutableHashSet.has(UNQUALIFIED_RDF_ATTRIBUTES, a.localName)) this.fail(`Unqualified attribute "${a.localName}" is not allowed`, a);
|
|
276
|
+
out.push({
|
|
277
|
+
iri: this.qualified(RDF, a.localName),
|
|
278
|
+
value: a.value,
|
|
279
|
+
attribute: a
|
|
280
|
+
});
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
if (a.namespace === ITS && (a.localName === "dir" || a.localName === "version")) return;
|
|
284
|
+
out.push({
|
|
285
|
+
iri: this.qualified(a.namespace, a.localName),
|
|
286
|
+
value: a.value,
|
|
287
|
+
attribute: a
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
return out;
|
|
291
|
+
}
|
|
292
|
+
elementIri(el) {
|
|
293
|
+
if (el.namespace === void 0) this.fail(`Element "${el.name}" is not in a namespace`, el);
|
|
294
|
+
return this.qualified(el.namespace, el.localName);
|
|
295
|
+
}
|
|
296
|
+
document(doc, base) {
|
|
297
|
+
const root = doc.root;
|
|
298
|
+
const ctx = {
|
|
299
|
+
base,
|
|
300
|
+
language: "",
|
|
301
|
+
direction: "",
|
|
302
|
+
version: this.defaultVersion
|
|
303
|
+
};
|
|
304
|
+
if (isRdfRoot(root)) this.nodeElementList(root.children, this.rdfRoot(root, ctx));
|
|
305
|
+
else this.nodeElement(root, ctx);
|
|
306
|
+
}
|
|
307
|
+
/** The context of the node elements in an `rdf:RDF` root, after checking its attributes. */
|
|
308
|
+
rdfRoot(root, ctx) {
|
|
309
|
+
const rootCtx = this.context(root, ctx);
|
|
310
|
+
this.attributes(root).forEach((a) => {
|
|
311
|
+
if (a.iri !== RDF_VERSION) this.fail(`Unexpected attribute on rdf:RDF`, a.attribute);
|
|
312
|
+
});
|
|
313
|
+
return rootCtx;
|
|
314
|
+
}
|
|
315
|
+
nodeElementList(children, ctx) {
|
|
316
|
+
const subjects = [];
|
|
317
|
+
children.forEach((c) => {
|
|
318
|
+
if (isElement(c)) subjects.push(this.nodeElement(c, ctx));
|
|
319
|
+
else if (isText(c) && !isWhitespace(c.value)) this.fail("Unexpected text where node elements are expected", c);
|
|
320
|
+
});
|
|
321
|
+
return subjects;
|
|
322
|
+
}
|
|
323
|
+
nodeElement(el, parentCtx) {
|
|
324
|
+
const ctx = this.context(el, parentCtx);
|
|
325
|
+
const iri = this.elementIri(el);
|
|
326
|
+
if (isForbiddenNodeElement(iri)) this.fail(`<${el.name}> is not allowed as a node element`, el);
|
|
327
|
+
const attrs = {
|
|
328
|
+
idAttr: Option.none(),
|
|
329
|
+
props: []
|
|
330
|
+
};
|
|
331
|
+
this.attributes(el).forEach((a) => nodeAttribute(a, this, attrs));
|
|
332
|
+
const s = Option.match(attrs.idAttr, {
|
|
333
|
+
onNone: () => this.fresh(),
|
|
334
|
+
onSome: (idAttr) => {
|
|
335
|
+
const local = idAttr.iri.slice(43);
|
|
336
|
+
return local === "ID" ? this.idIri(idAttr.value, ctx, idAttr.attribute) : local === "nodeID" ? this.blank(idAttr.value, idAttr.attribute) : this.iri(idAttr.value, ctx);
|
|
337
|
+
}
|
|
338
|
+
});
|
|
339
|
+
if (iri !== RDF_DESCRIPTION) this.emit(s, rdfType, this.named(iri));
|
|
340
|
+
attrs.props.forEach((a) => {
|
|
341
|
+
this.emit(s, this.named(a.iri), a.iri === RDF_TYPE ? this.iri(a.value, ctx) : this.literal(a.value, ctx));
|
|
342
|
+
});
|
|
343
|
+
this.propertyEltList(el, s, ctx);
|
|
344
|
+
return s;
|
|
345
|
+
}
|
|
346
|
+
propertyEltList(el, subject, ctx) {
|
|
347
|
+
let li = 1;
|
|
348
|
+
el.children.forEach((c) => {
|
|
349
|
+
if (isElement(c)) {
|
|
350
|
+
const name = this.elementIri(c);
|
|
351
|
+
this.propertyElt(c, name === RDF_LI ? rdf(`_${li++}`) : name, subject, ctx);
|
|
352
|
+
} else if (isText(c) && !isWhitespace(c.value)) this.fail("Unexpected text where property elements are expected", c);
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
propertyElt(el, iri, subject, parentCtx) {
|
|
356
|
+
if (isForbiddenPropertyElement(iri)) this.fail(`<${el.name}> is not allowed as a property element`, el);
|
|
357
|
+
const ctx = this.context(el, parentCtx);
|
|
358
|
+
const predicate = this.named(iri);
|
|
359
|
+
const attrs = {
|
|
360
|
+
id: Option.none(),
|
|
361
|
+
annotation: Option.none(),
|
|
362
|
+
parseType: Option.none(),
|
|
363
|
+
resource: Option.none(),
|
|
364
|
+
nodeId: Option.none(),
|
|
365
|
+
datatype: Option.none(),
|
|
366
|
+
props: []
|
|
367
|
+
};
|
|
368
|
+
this.attributes(el).forEach((a) => propertyAttribute(a, this, attrs));
|
|
369
|
+
const { id, annotation, parseType, resource, nodeId, datatype, props } = attrs;
|
|
370
|
+
const elements = [];
|
|
371
|
+
let text = "";
|
|
372
|
+
let hasText = false;
|
|
373
|
+
el.children.forEach((c) => {
|
|
374
|
+
if (isElement(c)) elements.push(c);
|
|
375
|
+
else if (isText(c)) {
|
|
376
|
+
text += c.value;
|
|
377
|
+
hasText = true;
|
|
378
|
+
}
|
|
379
|
+
});
|
|
380
|
+
const finish = (object) => {
|
|
381
|
+
const statement = this.emit(subject, predicate, object);
|
|
382
|
+
this.reify(statement, id, annotation, ctx);
|
|
383
|
+
};
|
|
384
|
+
const firstProp = Arr.head(props);
|
|
385
|
+
if (Option.isSome(parseType)) {
|
|
386
|
+
this.reject([
|
|
387
|
+
resource,
|
|
388
|
+
nodeId,
|
|
389
|
+
datatype,
|
|
390
|
+
firstProp
|
|
391
|
+
], "cannot be used with rdf:parseType");
|
|
392
|
+
Match.value(parseType.value.value).pipe(Match.when("Resource", () => {
|
|
393
|
+
const n = this.fresh();
|
|
394
|
+
finish(n);
|
|
395
|
+
this.propertyEltList(el, n, ctx);
|
|
396
|
+
}), Match.when("Collection", () => {
|
|
397
|
+
const items = this.nodeElementList(el.children, ctx);
|
|
398
|
+
if (!Arr.isArrayNonEmpty(items)) {
|
|
399
|
+
finish(rdfNil);
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
const cells = Arr.map(items, () => this.fresh());
|
|
403
|
+
finish(Arr.headNonEmpty(cells));
|
|
404
|
+
Arr.zip(cells, items).forEach(([cell, item], i) => {
|
|
405
|
+
this.emit(cell, rdfFirst, item);
|
|
406
|
+
this.emit(cell, rdfRest, cells[i + 1] ?? rdfNil);
|
|
407
|
+
});
|
|
408
|
+
}), Match.when("Triple", () => {
|
|
409
|
+
const saved = this.sink;
|
|
410
|
+
this.sink = [];
|
|
411
|
+
if (!Arr.isArrayNonEmpty(elements) || elements.length !== 1 || hasText && !isWhitespace(text)) this.fail("rdf:parseType=\"Triple\" must contain exactly one node element", el);
|
|
412
|
+
this.nodeElement(Arr.headNonEmpty(elements), ctx);
|
|
413
|
+
const triples = this.sink;
|
|
414
|
+
this.sink = saved;
|
|
415
|
+
if (!isRdf12(ctx.version)) return;
|
|
416
|
+
if (!Arr.isArrayNonEmpty(triples) || triples.length !== 1) this.fail(`rdf:parseType="Triple" content must describe exactly one triple, found ${triples.length}`, el);
|
|
417
|
+
finish(Arr.headNonEmpty(triples));
|
|
418
|
+
}), Match.orElse(() => {
|
|
419
|
+
finish(new Literal(canonicalize(el.children), rdfXmlLiteral));
|
|
420
|
+
}));
|
|
421
|
+
return;
|
|
422
|
+
}
|
|
423
|
+
if (Arr.isArrayNonEmpty(elements)) {
|
|
424
|
+
if (elements.length > 1) this.fail("A property element can contain only one node element", el);
|
|
425
|
+
if (!isWhitespace(text)) this.fail("Mixed content is not allowed in a property element", el);
|
|
426
|
+
this.reject([
|
|
427
|
+
resource,
|
|
428
|
+
nodeId,
|
|
429
|
+
datatype,
|
|
430
|
+
firstProp
|
|
431
|
+
], "is not allowed on a property element with content");
|
|
432
|
+
finish(this.nodeElement(Arr.headNonEmpty(elements), ctx));
|
|
433
|
+
return;
|
|
434
|
+
}
|
|
435
|
+
if (hasText && text !== "") {
|
|
436
|
+
this.reject([
|
|
437
|
+
resource,
|
|
438
|
+
nodeId,
|
|
439
|
+
firstProp
|
|
440
|
+
], "is not allowed on a literal property element");
|
|
441
|
+
finish(Option.isSome(datatype) ? literal(text, this.named(resolveIn(datatype.value.value, ctx.base))) : this.literal(text, ctx));
|
|
442
|
+
return;
|
|
443
|
+
}
|
|
444
|
+
if (Option.isSome(resource) && Option.isSome(nodeId)) this.fail("rdf:resource and rdf:nodeID cannot be used together", nodeId.value.attribute);
|
|
445
|
+
if (Option.isSome(datatype)) {
|
|
446
|
+
this.reject([
|
|
447
|
+
resource,
|
|
448
|
+
nodeId,
|
|
449
|
+
firstProp
|
|
450
|
+
], "cannot be used with rdf:datatype");
|
|
451
|
+
finish(literal("", this.named(resolveIn(datatype.value.value, ctx.base))));
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
if (Option.isNone(resource) && Option.isNone(nodeId) && Arr.isReadonlyArrayEmpty(props)) {
|
|
455
|
+
finish(this.literal("", ctx));
|
|
456
|
+
return;
|
|
457
|
+
}
|
|
458
|
+
const r = Option.isSome(resource) ? this.iri(resource.value.value, ctx) : Option.isSome(nodeId) ? this.blank(nodeId.value.value, nodeId.value.attribute) : this.fresh();
|
|
459
|
+
props.forEach((a) => {
|
|
460
|
+
this.emit(r, this.named(a.iri), a.iri === RDF_TYPE ? this.iri(a.value, ctx) : this.literal(a.value, ctx));
|
|
461
|
+
});
|
|
462
|
+
finish(r);
|
|
463
|
+
}
|
|
464
|
+
reify(statement, id, annotation, ctx) {
|
|
465
|
+
if (Option.isSome(id)) {
|
|
466
|
+
const i = this.idIri(id.value.value, ctx, id.value.attribute);
|
|
467
|
+
this.emit(i, rdfType, rdfStatement);
|
|
468
|
+
this.emit(i, rdfSubject, statement.subject);
|
|
469
|
+
this.emit(i, rdfPredicate, statement.predicate);
|
|
470
|
+
this.emit(i, rdfObject, statement.object);
|
|
471
|
+
}
|
|
472
|
+
if (Option.isSome(annotation)) {
|
|
473
|
+
const { iri, value, attribute } = annotation.value;
|
|
474
|
+
const reifier = iri === RDF_ANNOTATION ? this.iri(value, ctx) : this.blank(value, attribute);
|
|
475
|
+
this.emit(reifier, rdfReifies, statement);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
};
|
|
479
|
+
const toParseError = (message, position) => new RdfParseError({
|
|
480
|
+
format: FORMAT_NAME,
|
|
481
|
+
message,
|
|
482
|
+
line: position.line,
|
|
483
|
+
column: position.column
|
|
484
|
+
});
|
|
485
|
+
const parseTriples = (doc, options) => Effect.try({
|
|
486
|
+
try: () => {
|
|
487
|
+
const parser = new RdfXmlParser(options?.blankNodePrefix ?? freshBlankNodePrefix(), Option.fromUndefinedOr(options?.version));
|
|
488
|
+
parser.document(doc, Option.fromUndefinedOr(options?.baseIri));
|
|
489
|
+
return parser.sink;
|
|
490
|
+
},
|
|
491
|
+
catch: (e) => {
|
|
492
|
+
if (e instanceof ParseFailure) return toParseError(e.message, e.position);
|
|
493
|
+
throw e;
|
|
494
|
+
}
|
|
495
|
+
});
|
|
496
|
+
/**
|
|
497
|
+
* Adds the namespace declarations of the elements among `nodes` (at
|
|
498
|
+
* `depth`, the root's being 0) and of their descendants down to `maxDepth`
|
|
499
|
+
* to `prefixes`, keeping the first declaration of each prefix.
|
|
500
|
+
*/
|
|
501
|
+
const declarePrefixes = (prefixes, nodes, depth, maxDepth) => {
|
|
502
|
+
nodes.forEach((node) => {
|
|
503
|
+
if (!isElement(node)) return;
|
|
504
|
+
node.namespaceDeclarations.forEach((d) => {
|
|
505
|
+
if (d.prefix !== "" && d.namespace !== "" && !prefixes.some(([p]) => p === d.prefix)) prefixes.push([d.prefix, d.namespace]);
|
|
506
|
+
});
|
|
507
|
+
if (depth < maxDepth) declarePrefixes(prefixes, node.children, depth + 1, maxDepth);
|
|
508
|
+
});
|
|
509
|
+
};
|
|
510
|
+
/** The prefixes declared on the root, its children and their children. */
|
|
511
|
+
const collectPrefixes = (doc) => {
|
|
512
|
+
const prefixes = [];
|
|
513
|
+
declarePrefixes(prefixes, [doc.root], 0, 2);
|
|
514
|
+
return make(prefixes);
|
|
515
|
+
};
|
|
516
|
+
/**
|
|
517
|
+
* Converts the node elements of an `rdf:RDF` root while the XML is read, as
|
|
518
|
+
* each one is closed, so that no more than one of them is held at a time.
|
|
519
|
+
* The order of conversion (and so of triples, blank nodes and prefixes) and
|
|
520
|
+
* which error is reported are as for a whole document: an XML error anywhere
|
|
521
|
+
* comes first, so the first RDF/XML error is kept until the XML has been
|
|
522
|
+
* read.
|
|
523
|
+
*/
|
|
524
|
+
var RootStream = class {
|
|
525
|
+
parser;
|
|
526
|
+
/** The context outside the root, and then that of its node elements. */
|
|
527
|
+
ctx;
|
|
528
|
+
prefixes = [];
|
|
529
|
+
failures = [];
|
|
530
|
+
/** Whether the root has been seen, and whether it is `rdf:RDF`. */
|
|
531
|
+
started = false;
|
|
532
|
+
streaming = false;
|
|
533
|
+
/** How many of the children the root kept have been converted. */
|
|
534
|
+
converted = 0;
|
|
535
|
+
constructor(parser, ctx) {
|
|
536
|
+
this.parser = parser;
|
|
537
|
+
this.ctx = ctx;
|
|
538
|
+
}
|
|
539
|
+
/** The `RootChildHook`: takes the child if the root is `rdf:RDF`. */
|
|
540
|
+
take = (child, root) => {
|
|
541
|
+
if (!this.begin(root)) return false;
|
|
542
|
+
this.guard(() => {
|
|
543
|
+
this.drain(root);
|
|
544
|
+
declarePrefixes(this.prefixes, [child], 1, 2);
|
|
545
|
+
this.parser.nodeElement(child, this.ctx);
|
|
546
|
+
});
|
|
547
|
+
return true;
|
|
548
|
+
};
|
|
549
|
+
/** Converts what is left once the document has been read. */
|
|
550
|
+
finish(doc) {
|
|
551
|
+
if (this.begin(doc.root)) this.guard(() => this.drain(doc.root));
|
|
552
|
+
else {
|
|
553
|
+
this.parser.document(doc, this.ctx.base);
|
|
554
|
+
declarePrefixes(this.prefixes, [doc.root], 0, 2);
|
|
555
|
+
}
|
|
556
|
+
const failure = this.failures.at(0);
|
|
557
|
+
if (failure !== void 0) throw failure;
|
|
558
|
+
}
|
|
559
|
+
begin(root) {
|
|
560
|
+
if (!this.started) {
|
|
561
|
+
this.started = true;
|
|
562
|
+
this.streaming = isRdfRoot(root);
|
|
563
|
+
if (this.streaming) {
|
|
564
|
+
declarePrefixes(this.prefixes, [root], 0, 0);
|
|
565
|
+
this.guard(() => {
|
|
566
|
+
this.ctx = this.parser.rdfRoot(root, this.ctx);
|
|
567
|
+
});
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
return this.streaming;
|
|
571
|
+
}
|
|
572
|
+
/** Converts the children the root kept (text, and elements from entities) since the last time. */
|
|
573
|
+
drain(root) {
|
|
574
|
+
const pending = root.children.slice(this.converted);
|
|
575
|
+
this.converted = root.children.length;
|
|
576
|
+
declarePrefixes(this.prefixes, pending, 1, 2);
|
|
577
|
+
this.parser.nodeElementList(pending, this.ctx);
|
|
578
|
+
}
|
|
579
|
+
/** Runs a conversion step unless one has failed, keeping its failure. */
|
|
580
|
+
guard(step) {
|
|
581
|
+
if (Arr.isReadonlyArrayNonEmpty(this.failures)) return;
|
|
582
|
+
const outcome = Result.try({
|
|
583
|
+
try: step,
|
|
584
|
+
catch: (e) => e
|
|
585
|
+
});
|
|
586
|
+
if (Result.isSuccess(outcome)) return;
|
|
587
|
+
if (!(outcome.failure instanceof ParseFailure)) throw outcome.failure;
|
|
588
|
+
this.failures.push(outcome.failure);
|
|
589
|
+
}
|
|
590
|
+
};
|
|
591
|
+
/**
|
|
592
|
+
* Parses an already-parsed XML document as RDF/XML. The root element is
|
|
593
|
+
* `rdf:RDF` or a single node element; `xml:base` on it is returned as the
|
|
594
|
+
* base IRI and namespace declarations on it (and its children) as prefixes.
|
|
595
|
+
* Formats that embed RDF/XML in a larger XML document (XMP, SVG metadata)
|
|
596
|
+
* pass a document whose root is the embedded `rdf:RDF` element.
|
|
597
|
+
*
|
|
598
|
+
* @since 0.1.0
|
|
599
|
+
* @category parsing
|
|
600
|
+
*/
|
|
601
|
+
const parseDocument = (doc, options) => Effect.map(parseTriples(doc, options), (triples) => toResult(toQuadsResult(triples, doc, collectPrefixes(doc), options)));
|
|
602
|
+
/** The result of a parse: the triples in their graph, with the document's prefixes and base. */
|
|
603
|
+
/** The quads of a parse, in their graph, with the document's prefixes and base. */
|
|
604
|
+
const toQuadsResult = (triples, doc, prefixes, options) => {
|
|
605
|
+
const graph = options?.graph ?? defaultGraph;
|
|
606
|
+
let baseIri = options?.baseIri;
|
|
607
|
+
const xmlBase = doc.root.attributes.find((a) => a.namespace === "http://www.w3.org/XML/1998/namespace" && a.localName === "base");
|
|
608
|
+
if (xmlBase !== void 0) baseIri = resolve(xmlBase.value, baseIri);
|
|
609
|
+
return {
|
|
610
|
+
quads: triples.map((t) => new Quad(t.subject, t.predicate, t.object, graph)),
|
|
611
|
+
prefixes,
|
|
612
|
+
baseIri
|
|
613
|
+
};
|
|
614
|
+
};
|
|
615
|
+
const toResult = (quads) => ({
|
|
616
|
+
dataset: fromIterable(quads.quads),
|
|
617
|
+
prefixes: quads.prefixes,
|
|
618
|
+
baseIri: quads.baseIri
|
|
619
|
+
});
|
|
620
|
+
/**
|
|
621
|
+
* Parses a complete RDF/XML document into its statements in document order,
|
|
622
|
+
* without building a dataset. Node elements are converted as they are read,
|
|
623
|
+
* so the XML tree is never held whole.
|
|
624
|
+
*
|
|
625
|
+
* @since 0.1.0
|
|
626
|
+
* @category parsing
|
|
627
|
+
* @example
|
|
628
|
+
* ```ts
|
|
629
|
+
* import * as Effect from 'effect/Effect';
|
|
630
|
+
* import { RdfXml } from '@thomasfosterau/effect-rdf/rdfxml';
|
|
631
|
+
*
|
|
632
|
+
* const { quads } = Effect.runSync(
|
|
633
|
+
* RdfXml.parseQuads(
|
|
634
|
+
* `<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
635
|
+
* xmlns:ex="http://example.org/">
|
|
636
|
+
* <rdf:Description rdf:about="http://example.org/a" ex:p="1"/>
|
|
637
|
+
* </rdf:RDF>`,
|
|
638
|
+
* ),
|
|
639
|
+
* );
|
|
640
|
+
* // quads.length === 1
|
|
641
|
+
* ```
|
|
642
|
+
*/
|
|
643
|
+
const parseQuads = (input, options) => Effect.try({
|
|
644
|
+
try: () => {
|
|
645
|
+
const version = Option.fromUndefinedOr(options?.version);
|
|
646
|
+
const parser = new RdfXmlParser(options?.blankNodePrefix ?? freshBlankNodePrefix(), version);
|
|
647
|
+
const stream = new RootStream(parser, {
|
|
648
|
+
base: Option.fromUndefinedOr(options?.baseIri),
|
|
649
|
+
language: "",
|
|
650
|
+
direction: "",
|
|
651
|
+
version
|
|
652
|
+
});
|
|
653
|
+
const doc = parseText(input, stream.take);
|
|
654
|
+
stream.finish(doc);
|
|
655
|
+
return toQuadsResult(parser.sink, doc, make(stream.prefixes), options);
|
|
656
|
+
},
|
|
657
|
+
catch: (e) => {
|
|
658
|
+
if (e instanceof Failure) return toParseError(e.message, e.position);
|
|
659
|
+
if (e instanceof ParseFailure) return toParseError(e.message, e.position);
|
|
660
|
+
throw e;
|
|
661
|
+
}
|
|
662
|
+
});
|
|
663
|
+
/**
|
|
664
|
+
* Parses a complete RDF/XML document. Namespace declarations on the root
|
|
665
|
+
* element (and its children) are returned as prefixes.
|
|
666
|
+
*
|
|
667
|
+
* @since 0.1.0
|
|
668
|
+
* @category parsing
|
|
669
|
+
*/
|
|
670
|
+
const parse = (input, options) => Effect.map(parseQuads(input, options), toResult).pipe(withParseSpan(trace, input));
|
|
671
|
+
/**
|
|
672
|
+
* The RDF/XML parser.
|
|
673
|
+
*
|
|
674
|
+
* @since 0.1.0
|
|
675
|
+
* @category parsing
|
|
676
|
+
*/
|
|
677
|
+
const parser = makeParser({
|
|
678
|
+
format,
|
|
679
|
+
parse
|
|
680
|
+
});
|
|
681
|
+
var SerializeFailure = class {
|
|
682
|
+
message;
|
|
683
|
+
constructor(message) {
|
|
684
|
+
this.message = message;
|
|
685
|
+
}
|
|
686
|
+
};
|
|
687
|
+
const LOCAL_SUFFIX_RE = new RegExp(`[${NAME_START}][${NAME_CHAR}]*$`, "u");
|
|
688
|
+
/**
|
|
689
|
+
* Splits an IRI into a namespace and a local name that is an XML `NCName`,
|
|
690
|
+
* choosing the longest possible local name. Returns `None` when the IRI does
|
|
691
|
+
* not end with an `NCName` (such IRIs cannot be used as element or
|
|
692
|
+
* attribute names).
|
|
693
|
+
*
|
|
694
|
+
* @since 0.1.0
|
|
695
|
+
* @category serializing
|
|
696
|
+
*/
|
|
697
|
+
const splitIri = (iri) => {
|
|
698
|
+
const m = LOCAL_SUFFIX_RE.exec(iri);
|
|
699
|
+
if (m === null || m.index === 0) return Option.none();
|
|
700
|
+
return Option.some([iri.slice(0, m.index), m[0]]);
|
|
701
|
+
};
|
|
702
|
+
const escapeAttr = escapeAttribute;
|
|
703
|
+
/** Whether `prefix` may be declared for `ns` as configured in `options.prefixes`. */
|
|
704
|
+
const isConfigurable = (prefix, ns) => isNCName(prefix) && !prefix.toLowerCase().startsWith("xml") && ns !== ITS && isValidText(ns) && ns === RDF === (prefix === "rdf") && prefix !== "its";
|
|
705
|
+
/** The first of `name(1)`, `name(2)`, … (counting on from `from`) that `taken` does not hold. */
|
|
706
|
+
const freshName = (taken, from, name) => {
|
|
707
|
+
const candidate = name(from + 1);
|
|
708
|
+
return MutableHashSet.has(taken, candidate) ? freshName(taken, from + 1, name) : [candidate, from + 1];
|
|
709
|
+
};
|
|
710
|
+
var Writer = class {
|
|
711
|
+
namespaces;
|
|
712
|
+
blankLabels = MutableHashMap.empty();
|
|
713
|
+
/** The QName of each IRI written so far, while no namespace has been added since. */
|
|
714
|
+
qnames = MutableHashMap.empty();
|
|
715
|
+
needsVersion = false;
|
|
716
|
+
needsIts = false;
|
|
717
|
+
options;
|
|
718
|
+
constructor(options, prefixes) {
|
|
719
|
+
this.options = options;
|
|
720
|
+
const byNamespace = MutableHashMap.empty();
|
|
721
|
+
const used = MutableHashSet.empty();
|
|
722
|
+
prefixes.prefixes.forEach((ns, prefix) => {
|
|
723
|
+
if (isConfigurable(prefix, ns) && !MutableHashMap.has(byNamespace, ns) && !MutableHashSet.has(used, prefix)) {
|
|
724
|
+
MutableHashMap.set(byNamespace, ns, prefix);
|
|
725
|
+
MutableHashSet.add(used, prefix);
|
|
726
|
+
}
|
|
727
|
+
});
|
|
728
|
+
if (!MutableHashMap.has(byNamespace, RDF)) {
|
|
729
|
+
MutableHashMap.set(byNamespace, RDF, "rdf");
|
|
730
|
+
MutableHashSet.add(used, "rdf");
|
|
731
|
+
}
|
|
732
|
+
MutableHashSet.add(used, "its");
|
|
733
|
+
this.namespaces = {
|
|
734
|
+
byNamespace,
|
|
735
|
+
used,
|
|
736
|
+
declared: MutableHashSet.make(RDF),
|
|
737
|
+
counter: 0
|
|
738
|
+
};
|
|
739
|
+
}
|
|
740
|
+
fail(message) {
|
|
741
|
+
throw new SerializeFailure(message);
|
|
742
|
+
}
|
|
743
|
+
qname(iri, what) {
|
|
744
|
+
const known = MutableHashMap.get(this.qnames, iri);
|
|
745
|
+
if (Option.isSome(known)) return known.value;
|
|
746
|
+
const name = this.newQname(iri, what);
|
|
747
|
+
MutableHashMap.set(this.qnames, iri, name);
|
|
748
|
+
return name;
|
|
749
|
+
}
|
|
750
|
+
newQname(iri, what) {
|
|
751
|
+
if (!isValidText(iri)) this.fail(`The ${what} <${iri}> contains invalid XML characters`);
|
|
752
|
+
const { byNamespace, used, declared } = this.namespaces;
|
|
753
|
+
const configured = Arr.reduce(Arr.fromIterable(MutableHashMap.keys(byNamespace)), Option.none(), (best, ns) => iri.startsWith(ns) && (Option.isNone(best) || ns.length > best.value[0].length) && isNCName(iri.slice(ns.length)) ? Option.some([ns, iri.slice(ns.length)]) : best);
|
|
754
|
+
const [ns, local] = Option.getOrElse(Option.orElse(configured, () => splitIri(iri)), () => this.fail(`The ${what} <${iri}> cannot be written as an XML QName`));
|
|
755
|
+
MutableHashSet.add(declared, ns);
|
|
756
|
+
return `${Option.getOrElse(MutableHashMap.get(byNamespace, ns), () => {
|
|
757
|
+
const [generated, n] = freshName(used, this.namespaces.counter, (i) => `ns${i}`);
|
|
758
|
+
this.namespaces.counter = n;
|
|
759
|
+
MutableHashSet.add(used, generated);
|
|
760
|
+
MutableHashMap.set(byNamespace, ns, generated);
|
|
761
|
+
MutableHashMap.clear(this.qnames);
|
|
762
|
+
return generated;
|
|
763
|
+
})}:${local}`;
|
|
764
|
+
}
|
|
765
|
+
iriRef(iri) {
|
|
766
|
+
if (!isValidText(iri)) this.fail(`The IRI <${iri}> contains characters not allowed in XML`);
|
|
767
|
+
const base = this.options.baseIri;
|
|
768
|
+
if (base !== void 0) {
|
|
769
|
+
const rel = relativize(iri, base);
|
|
770
|
+
if (Option.isSome(rel)) return escapeAttr(rel.value);
|
|
771
|
+
}
|
|
772
|
+
return escapeAttr(iri);
|
|
773
|
+
}
|
|
774
|
+
blankLabel(node) {
|
|
775
|
+
const known = MutableHashMap.get(this.blankLabels, node.value);
|
|
776
|
+
if (Option.isSome(known)) return known.value;
|
|
777
|
+
const label = isNCName(node.value) && !MutableHashSet.has(this.usedLabels, node.value) ? node.value : this.freshLabel();
|
|
778
|
+
MutableHashSet.add(this.usedLabels, label);
|
|
779
|
+
MutableHashMap.set(this.blankLabels, node.value, label);
|
|
780
|
+
return label;
|
|
781
|
+
}
|
|
782
|
+
freshLabel() {
|
|
783
|
+
const [label, n] = freshName(this.usedLabels, this.labelCounter - 1, (i) => `b${i}`);
|
|
784
|
+
this.labelCounter = n + 1;
|
|
785
|
+
return label;
|
|
786
|
+
}
|
|
787
|
+
usedLabels = MutableHashSet.empty();
|
|
788
|
+
labelCounter = 0;
|
|
789
|
+
};
|
|
790
|
+
const text = (value, writer) => {
|
|
791
|
+
if (!isValidText(value)) writer.fail("A literal contains characters not allowed in XML 1.0");
|
|
792
|
+
return escapeText(value);
|
|
793
|
+
};
|
|
794
|
+
const sortByPredicateObject = (ts) => Arr.sort(ts, Order.combine(Order.mapInput(Order$1, (t) => t.predicate), Order.mapInput(Order$1, (t) => t.object)));
|
|
795
|
+
/** Whether `t` gives its subject an `rdf:type` that can be the name of a typed node element. */
|
|
796
|
+
const isTypeTriple = (t) => t.predicate.value === RDF_TYPE && isNamedNode(t.object) && !isForbiddenNodeElement(t.object.value) && Option.isSome(splitIri(t.object.value));
|
|
797
|
+
const serializeGraph = (triples, options) => {
|
|
798
|
+
const writer = new Writer(options, options.prefixes ?? empty);
|
|
799
|
+
const indentUnit = options.indent ?? " ";
|
|
800
|
+
const nest = options.nestBlankNodes ?? true;
|
|
801
|
+
const typed = options.typedNodes ?? true;
|
|
802
|
+
const graph = {
|
|
803
|
+
bySubject: MutableHashMap.empty(),
|
|
804
|
+
references: MutableHashMap.empty()
|
|
805
|
+
};
|
|
806
|
+
const referenceCount = (label) => {
|
|
807
|
+
const count = MutableHashMap.get(graph.references, label);
|
|
808
|
+
return Option.isSome(count) ? count.value : 0;
|
|
809
|
+
};
|
|
810
|
+
const inTripleTerm = MutableHashSet.empty();
|
|
811
|
+
const markTripleTerm = (t) => {
|
|
812
|
+
if (isBlankNode(t)) MutableHashSet.add(inTripleTerm, t.value);
|
|
813
|
+
else if (isTriple(t)) {
|
|
814
|
+
markTripleTerm(t.subject);
|
|
815
|
+
markTripleTerm(t.object);
|
|
816
|
+
}
|
|
817
|
+
};
|
|
818
|
+
triples.forEach((t) => {
|
|
819
|
+
if (isTriple(t.subject)) writer.fail("RDF/XML cannot represent triple terms in the subject position");
|
|
820
|
+
const subject = t.subject;
|
|
821
|
+
const key = subject.key;
|
|
822
|
+
const entry = MutableHashMap.get(graph.bySubject, key);
|
|
823
|
+
if (Option.isSome(entry)) entry.value.triples.push(t);
|
|
824
|
+
else MutableHashMap.set(graph.bySubject, key, {
|
|
825
|
+
subject,
|
|
826
|
+
triples: [t]
|
|
827
|
+
});
|
|
828
|
+
const o = t.object;
|
|
829
|
+
if (isBlankNode(o)) MutableHashMap.set(graph.references, o.value, referenceCount(o.value) + 1);
|
|
830
|
+
else if (isTriple(o)) markTripleTerm(o);
|
|
831
|
+
});
|
|
832
|
+
const nested = MutableHashSet.empty();
|
|
833
|
+
if (nest) {
|
|
834
|
+
MutableHashMap.forEach(graph.references, (count, label) => {
|
|
835
|
+
if (count === 1 && !MutableHashSet.has(inTripleTerm, label)) MutableHashSet.add(nested, label);
|
|
836
|
+
});
|
|
837
|
+
const reachable = MutableHashSet.empty();
|
|
838
|
+
const visit = (subjectKey) => {
|
|
839
|
+
const entry = MutableHashMap.get(graph.bySubject, subjectKey);
|
|
840
|
+
if (Option.isNone(entry)) return;
|
|
841
|
+
entry.value.triples.forEach((t) => {
|
|
842
|
+
const o = t.object;
|
|
843
|
+
if (isBlankNode(o) && MutableHashSet.has(nested, o.value) && !MutableHashSet.has(reachable, o.value)) {
|
|
844
|
+
MutableHashSet.add(reachable, o.value);
|
|
845
|
+
visit(o.key);
|
|
846
|
+
}
|
|
847
|
+
});
|
|
848
|
+
};
|
|
849
|
+
MutableHashMap.forEach(graph.bySubject, (entry, key) => {
|
|
850
|
+
const s = entry.subject;
|
|
851
|
+
if (!isBlankNode(s) || !MutableHashSet.has(nested, s.value)) visit(key);
|
|
852
|
+
});
|
|
853
|
+
MutableHashMap.forEach(graph.bySubject, (entry) => {
|
|
854
|
+
const s = entry.subject;
|
|
855
|
+
if (isBlankNode(s) && MutableHashSet.has(nested, s.value) && !MutableHashSet.has(reachable, s.value)) {
|
|
856
|
+
MutableHashSet.remove(nested, s.value);
|
|
857
|
+
visit(s.key);
|
|
858
|
+
}
|
|
859
|
+
});
|
|
860
|
+
}
|
|
861
|
+
const body = [];
|
|
862
|
+
/** Writes a node element for `subject` at `depth`. */
|
|
863
|
+
const node = (subject, depth, inline, lines) => {
|
|
864
|
+
const pad = indentUnit.repeat(depth);
|
|
865
|
+
const sorted = Option.match(MutableHashMap.get(graph.bySubject, subject.key), {
|
|
866
|
+
onNone: () => [],
|
|
867
|
+
onSome: (entry) => sortByPredicateObject(entry.triples)
|
|
868
|
+
});
|
|
869
|
+
const typeTriple = typed ? Arr.findFirst(sorted, (t) => isTypeTriple(t) && isValidText(t.object.value) ? Option.some([t, t.object.value]) : Option.none()) : Option.none();
|
|
870
|
+
const element = Option.match(typeTriple, {
|
|
871
|
+
onNone: () => "rdf:Description",
|
|
872
|
+
onSome: ([, type]) => writer.qname(type, "type")
|
|
873
|
+
});
|
|
874
|
+
const ts = Option.match(typeTriple, {
|
|
875
|
+
onNone: () => sorted,
|
|
876
|
+
onSome: ([typeT]) => sorted.filter((t) => t !== typeT)
|
|
877
|
+
});
|
|
878
|
+
const attrs = isNamedNode(subject) ? ` rdf:about="${writer.iriRef(subject.value)}"` : isBlankNode(subject) && !inline && (referenceCount(subject.value) > 0 || MutableHashSet.has(inTripleTerm, subject.value)) ? ` rdf:nodeID="${writer.blankLabel(subject)}"` : "";
|
|
879
|
+
if (Arr.isReadonlyArrayEmpty(ts)) {
|
|
880
|
+
lines.push(`${pad}<${element}${attrs}/>`);
|
|
881
|
+
return;
|
|
882
|
+
}
|
|
883
|
+
lines.push(`${pad}<${element}${attrs}>`);
|
|
884
|
+
ts.forEach((t) => property(t, depth + 1, lines));
|
|
885
|
+
lines.push(`${pad}</${element}>`);
|
|
886
|
+
};
|
|
887
|
+
const property = (t, depth, lines) => {
|
|
888
|
+
const pad = indentUnit.repeat(depth);
|
|
889
|
+
const p = t.predicate.value;
|
|
890
|
+
if (isForbiddenPropertyElement(p) || p === RDF_LI) writer.fail(`The predicate <${p}> cannot be used as an RDF/XML property element`);
|
|
891
|
+
const name = writer.qname(p, "predicate");
|
|
892
|
+
propertyObject(t.object, pad, name, depth, lines);
|
|
893
|
+
};
|
|
894
|
+
const propertyObject = Match.fn((o, _pad, _name, _depth, _lines) => o).pipe(Match.withReturnType(), Match.tag("NamedNode", (o, _o, pad, name, _depth, lines) => {
|
|
895
|
+
lines.push(`${pad}<${name} rdf:resource="${writer.iriRef(o.value)}"/>`);
|
|
896
|
+
}), Match.tag("BlankNode", (o, _o, pad, name, depth, lines) => {
|
|
897
|
+
if (MutableHashSet.has(nested, o.value) && !MutableHashSet.has(inTripleTerm, o.value)) {
|
|
898
|
+
const described = Option.match(MutableHashMap.get(graph.bySubject, o.key), {
|
|
899
|
+
onNone: () => [],
|
|
900
|
+
onSome: (entry) => entry.triples
|
|
901
|
+
});
|
|
902
|
+
if (Arr.isReadonlyArrayEmpty(described)) {
|
|
903
|
+
lines.push(`${pad}<${name} rdf:parseType="Resource"/>`);
|
|
904
|
+
return;
|
|
905
|
+
}
|
|
906
|
+
if (!(typed && described.some(isTypeTriple))) {
|
|
907
|
+
lines.push(`${pad}<${name} rdf:parseType="Resource">`);
|
|
908
|
+
sortByPredicateObject(described).forEach((x) => property(x, depth + 1, lines));
|
|
909
|
+
lines.push(`${pad}</${name}>`);
|
|
910
|
+
return;
|
|
911
|
+
}
|
|
912
|
+
lines.push(`${pad}<${name}>`);
|
|
913
|
+
node(o, depth + 1, true, lines);
|
|
914
|
+
lines.push(`${pad}</${name}>`);
|
|
915
|
+
return;
|
|
916
|
+
}
|
|
917
|
+
lines.push(`${pad}<${name} rdf:nodeID="${writer.blankLabel(o)}"/>`);
|
|
918
|
+
}), Match.tag("Literal", (o, _o, pad, name, _depth, lines) => {
|
|
919
|
+
let attrs = "";
|
|
920
|
+
if (o.language !== "") {
|
|
921
|
+
attrs += ` xml:lang="${escapeAttr(o.language)}"`;
|
|
922
|
+
if (o.direction !== void 0) {
|
|
923
|
+
writer.needsVersion = true;
|
|
924
|
+
writer.needsIts = true;
|
|
925
|
+
attrs += ` its:dir="${o.direction}"`;
|
|
926
|
+
}
|
|
927
|
+
} else if (o.datatype.value !== XSD_STRING) attrs += ` rdf:datatype="${writer.iriRef(o.datatype.value)}"`;
|
|
928
|
+
if (o.value === "") lines.push(`${pad}<${name}${attrs}/>`);
|
|
929
|
+
else lines.push(`${pad}<${name}${attrs}>${text(o.value, writer)}</${name}>`);
|
|
930
|
+
}), Match.tag("Triple", (o, _o, pad, name, depth, lines) => {
|
|
931
|
+
writer.needsVersion = true;
|
|
932
|
+
lines.push(`${pad}<${name} rdf:parseType="Triple">`);
|
|
933
|
+
tripleTerm(o, depth + 1, lines);
|
|
934
|
+
lines.push(`${pad}</${name}>`);
|
|
935
|
+
}), Match.exhaustive);
|
|
936
|
+
const tripleTerm = (t, depth, lines) => {
|
|
937
|
+
const pad = indentUnit.repeat(depth);
|
|
938
|
+
const s = t.subject;
|
|
939
|
+
const attrs = isNamedNode(s) ? ` rdf:about="${writer.iriRef(s.value)}"` : isBlankNode(s) ? ` rdf:nodeID="${writer.blankLabel(s)}"` : writer.fail("RDF/XML cannot represent triple terms in the subject position");
|
|
940
|
+
lines.push(`${pad}<rdf:Description${attrs}>`);
|
|
941
|
+
const o = t.object;
|
|
942
|
+
if (isBlankNode(o)) {
|
|
943
|
+
const name = writer.qname(t.predicate.value, "predicate");
|
|
944
|
+
if (isForbiddenPropertyElement(t.predicate.value) || t.predicate.value === RDF_LI) writer.fail(`The predicate <${t.predicate.value}> cannot be used as an RDF/XML property element`);
|
|
945
|
+
lines.push(`${pad}${indentUnit}<${name} rdf:nodeID="${writer.blankLabel(o)}"/>`);
|
|
946
|
+
} else property(t, depth + 1, lines);
|
|
947
|
+
lines.push(`${pad}</rdf:Description>`);
|
|
948
|
+
};
|
|
949
|
+
Arr.sort(Arr.map(Arr.fromIterable(MutableHashMap.values(graph.bySubject)), (e) => e.subject), Order.make((a, b) => a._tag === b._tag ? compare(a, b) : isNamedNode(a) ? -1 : 1)).forEach((s) => {
|
|
950
|
+
if (!isBlankNode(s) || !MutableHashSet.has(nested, s.value)) node(s, 1, false, body);
|
|
951
|
+
});
|
|
952
|
+
const decls = [
|
|
953
|
+
...Arr.sort(Arr.filter(Arr.fromIterable(writer.namespaces.byNamespace), ([ns]) => MutableHashSet.has(writer.namespaces.declared, ns)), Order.make((a, b) => a[1] === "rdf" ? -1 : b[1] === "rdf" ? 1 : a[1] < b[1] ? -1 : 1)).map(([ns, prefix]) => `xmlns:${prefix}="${escapeAttr(ns)}"`),
|
|
954
|
+
...writer.needsIts ? [`xmlns:its="${ITS}"`, "its:version=\"2.0\""] : [],
|
|
955
|
+
...options.baseIri === void 0 ? [] : [`xml:base="${escapeAttr(options.baseIri)}"`],
|
|
956
|
+
...writer.needsVersion ? ["rdf:version=\"1.2\""] : []
|
|
957
|
+
];
|
|
958
|
+
const sep = `\n${" ".repeat(9)}`;
|
|
959
|
+
const declaration = options.xmlDeclaration ?? true ? ["<?xml version=\"1.0\" encoding=\"utf-8\"?>"] : [];
|
|
960
|
+
return `${(Arr.isReadonlyArrayEmpty(body) ? [...declaration, `<rdf:RDF ${decls.join(sep)}/>`] : [
|
|
961
|
+
...declaration,
|
|
962
|
+
`<rdf:RDF ${decls.join(sep)}>`,
|
|
963
|
+
...body,
|
|
964
|
+
"</rdf:RDF>"
|
|
965
|
+
]).join("\n")}\n`;
|
|
966
|
+
};
|
|
967
|
+
/**
|
|
968
|
+
* Serialises quads as an RDF/XML document. Fails with `RdfSerializeError`
|
|
969
|
+
* for quads in named graphs, triple terms in the subject position, and
|
|
970
|
+
* predicates that cannot be written as XML QNames.
|
|
971
|
+
*
|
|
972
|
+
* @since 0.1.0
|
|
973
|
+
* @category serializing
|
|
974
|
+
*/
|
|
975
|
+
const serialize = (quads, options) => Effect.suspend(() => {
|
|
976
|
+
const all = Arr.fromIterable(quads);
|
|
977
|
+
const named = Arr.findFirst(all, (q) => !isDefaultGraph(q.graph));
|
|
978
|
+
if (Option.isSome(named)) return Effect.fail(new RdfSerializeError({
|
|
979
|
+
format: FORMAT_NAME,
|
|
980
|
+
message: `RDF/XML cannot represent named graphs (found graph ${named.value.graph.key})`
|
|
981
|
+
}));
|
|
982
|
+
const triples = all.map((q) => q.triple);
|
|
983
|
+
return Effect.try({
|
|
984
|
+
try: () => serializeGraph(triples, options ?? {}),
|
|
985
|
+
catch: (e) => {
|
|
986
|
+
if (e instanceof SerializeFailure) return new RdfSerializeError({
|
|
987
|
+
format: FORMAT_NAME,
|
|
988
|
+
message: e.message
|
|
989
|
+
});
|
|
990
|
+
throw e;
|
|
991
|
+
}
|
|
992
|
+
});
|
|
993
|
+
}).pipe(withSerializeSpan(trace));
|
|
994
|
+
/**
|
|
995
|
+
* The RDF/XML serializer.
|
|
996
|
+
*
|
|
997
|
+
* @since 0.1.0
|
|
998
|
+
* @category serializing
|
|
999
|
+
*/
|
|
1000
|
+
const serializer = makeSerializer({
|
|
1001
|
+
format,
|
|
1002
|
+
serialize
|
|
1003
|
+
});
|
|
1004
|
+
/**
|
|
1005
|
+
* The RDF/XML codec, including a `Schema` transforming RDF/XML documents to
|
|
1006
|
+
* datasets and back.
|
|
1007
|
+
*
|
|
1008
|
+
* @since 0.1.0
|
|
1009
|
+
* @category codecs
|
|
1010
|
+
*/
|
|
1011
|
+
const codec = makeCodec(parser, serializer);
|
|
1012
|
+
export { parseDocument as a, serialize as c, parse as i, serializer as l, codec as n, parseQuads as o, format as r, parser as s, RdfXml_exports as t, splitIri as u };
|
|
1013
|
+
|
|
1014
|
+
//# sourceMappingURL=RdfXml-DJ9G4gOq.mjs.map
|