diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ab0191f0..be16d3b5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,7 +20,7 @@ jobs: - name: Set up Deno uses: denoland/setup-deno@v2.0.4 with: - deno-version: 2.7.14 + deno-version: 2.9.2 - name: Set up Python uses: actions/setup-python@v5 diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..c2658d7d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ diff --git a/deno.json b/deno.json index e0d32108..9a7a254e 100644 --- a/deno.json +++ b/deno.json @@ -6,15 +6,21 @@ "check": "deno check scripts/**/*.ts tests/**/*.ts", "test": "deno test --allow-read --allow-write --allow-env=READABLE_STREAM tests", "test:shacl": "python3 scripts/validate_shacl.py", + "conformance:js": "deno run --node-modules-dir=auto --allow-read --allow-write=/tmp --allow-run=git --allow-env=READABLE_STREAM,YARGS_MIN_NODE_VERSION,YARGS_DISABLE_WRAP,_,SHELL,ZSH_NAME,BASH_NAME,CI,FORCE_COLOR,TRAVIS,CIRCLECI,APPVEYOR,GITLAB_CI,CI_NAME,TEAMCITY_VERSION,TERM_PROGRAM,TERM_PROGRAM_VERSION,TERM,COLORTERM,COMUNICA_CONFIG,LC_ALL,LC_MESSAGES,LANG,LANGUAGE,NODE_ENV scripts/run_shacl_engine_conformance.ts", + "conformance:jena": "deno run --allow-read --allow-write=/tmp --allow-run=git,shacl --allow-env=READABLE_STREAM scripts/run_jena_shacl_conformance.ts", + "conformance:compare": "deno run --allow-read scripts/compare_shacl_receipts.ts", "release:set-version": "deno run --allow-read --allow-write scripts/release_set_version.ts", "release:validate": "deno run --allow-read --allow-run=git --allow-env=READABLE_STREAM scripts/release_validate.ts", - "ci": "deno task fmt:check && deno task lint && deno task check && deno task test && deno task test:shacl && deno task release:validate" + "ci": "deno task fmt:check && deno task lint && deno task check && deno task test && deno task test:shacl && deno task conformance:js && deno task release:validate" }, "imports": { "@std/assert": "jsr:@std/assert@1", "@std/path": "jsr:@std/path@1", - "n3": "npm:n3@2.0.3" + "n3": "npm:n3@2.0.3", + "shacl-engine": "npm:shacl-engine@1.1.2", + "shacl-engine/sparql": "npm:shacl-engine@1.1.2/sparql.js" }, + "nodeModulesDir": "auto", "exclude": ["notes/**", "**/*.md"], "fmt": { "proseWrap": "preserve", diff --git a/deno.lock b/deno.lock index dd638ca7..09e10a7f 100644 --- a/deno.lock +++ b/deno.lock @@ -4,7 +4,8 @@ "jsr:@std/assert@1": "1.0.19", "jsr:@std/internal@^1.0.12": "1.0.13", "jsr:@std/path@1": "1.1.4", - "npm:n3@2.0.3": "2.0.3" + "npm:n3@2.0.3": "2.0.3", + "npm:shacl-engine@1.1.2": "1.1.2" }, "jsr": { "@std/assert@1.0.19": { @@ -24,15 +25,2853 @@ } }, "npm": { + "@bergos/jsonparse@1.4.2": { + "integrity": "sha512-qUt0QNJjvg4s1zk+AuLM6s/zcsQ8MvGn7+1f0vPuxvpCYa08YtTryuDInngbEyW5fNGGYe2znKt61RMGd5HnXg==", + "dependencies": [ + "buffer" + ] + }, + "@colors/colors@1.6.0": { + "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==" + }, + "@comunica/actor-abstract-mediatyped@4.5.0": { + "integrity": "sha512-KbLuhbTcfAQHJeLo3CDDdffCZdfA1qDu15XIdW+7P03UpUp9xMw4p1G0kYtoXwj9KzWguY704TUtpJVBO1GOnw==", + "dependencies": [ + "@comunica/core@4.5.0", + "@comunica/types@4.5.0" + ] + }, + "@comunica/actor-abstract-mediatyped@5.3.0": { + "integrity": "sha512-60+GYULL9d/jfsTsGodLwPTIZvlDeqLZwtYSaFbMV9ykzaZs5AJp7LDyA5DeNUBPN228fty0jX2FlAXGf7ZGdg==", + "dependencies": [ + "@comunica/core@5.3.0", + "@comunica/types@5.3.0" + ] + }, + "@comunica/actor-abstract-parse@4.5.0": { + "integrity": "sha512-THNdQsJ58HtkyeW9ghVyLrYEQfSPNfmVAJTDSqOxIujjCdimPbzS2LBXoDdw13GuxWWOATssbm1LwXDlX0xMIQ==", + "dependencies": [ + "@comunica/core@4.5.0", + "readable-stream@4.7.0" + ] + }, + "@comunica/actor-abstract-path@5.3.0": { + "integrity": "sha512-exK0EcWyscuu7psF2U4Cm4iAlOW1fWRAqCZLJo0I7v+8hXtCHTLx2P2bV2LFUvt8Kry4ATzUrrm019RX4b0+hg==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "@comunica/utils-query-operation", + "@rdfjs/types@2.0.1", + "asynciterator", + "rdf-string" + ] + }, + "@comunica/actor-bindings-aggregator-factory-average@5.3.0": { + "integrity": "sha512-dsTR0dQPnisdX9xklFz/WcyA60t9SpDef1Bzryl/cETr9pnnD+HMF3aDZYvmfINUp3YjRP8cxJeWVHPv+kyluA==", + "dependencies": [ + "@comunica/bus-bindings-aggregator-factory", + "@comunica/bus-function-factory", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/actor-bindings-aggregator-factory-count@5.3.0": { + "integrity": "sha512-tLdoFX2poA0tKXXGAREMps0aI3x+MNEGbRftPFD24NbMybmCjSWyN0L3Az29eoWL4zIkmhMK9S/xaguB4k85pg==", + "dependencies": [ + "@comunica/bus-bindings-aggregator-factory", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-expression-evaluator", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/actor-bindings-aggregator-factory-group-concat@5.3.0": { + "integrity": "sha512-dypWIfRmvr99qu/0MQWE0oCuhHRt/6NT68c/wctO1ZDb9WPzO24XsjYNcQHPer69uoZIY8s61/V3MJ4/we3dFQ==", + "dependencies": [ + "@comunica/bus-bindings-aggregator-factory", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/actor-bindings-aggregator-factory-max@5.3.0": { + "integrity": "sha512-FlOY4BrSp0uhLCwEh4cHsFFwsiulr3CIfJ+r010WA/n+qwSSp/iGH9s4zmfbqC1tBRrFK9alCdxQJr0BY17MDA==", + "dependencies": [ + "@comunica/bus-bindings-aggregator-factory", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/actor-bindings-aggregator-factory-min@5.3.0": { + "integrity": "sha512-9UGaNaDab76Po3XFOIIZm2RCZDc7Gbwcrr+2hgG5DuJjtxBwl7z3pMkHFYjaBikF9GFaZ1VjT0sW51S80Y8rbg==", + "dependencies": [ + "@comunica/bus-bindings-aggregator-factory", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/actor-bindings-aggregator-factory-sample@5.3.0": { + "integrity": "sha512-ib4MpjNKyGRdKwNjRjoP/Chf5ba8hqDq/LTac8bry405EeimiCZvOmbWa6QQwIvkAtfjMmeydCclMmdnjS8hNQ==", + "dependencies": [ + "@comunica/bus-bindings-aggregator-factory", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/actor-bindings-aggregator-factory-sum@5.3.0": { + "integrity": "sha512-KWS4sYMvYGEhuxVD12OmxGGf7ZU6vV9u4kdq8v9OTTKiEb3YzaQa7IlzsF94qHoek1xH5xp+N7dxaOG+H3z87w==", + "dependencies": [ + "@comunica/bus-bindings-aggregator-factory", + "@comunica/bus-function-factory", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/actor-bindings-aggregator-factory-wildcard-count@5.3.0": { + "integrity": "sha512-BlZLzCTT/FoMCLS+iGxRf0C3tNDjAoO6/ZcT+H0U+DZ/adhpcw6h90FsLKeolW7tSRVUHNV8BJN4UcLE4x9Czg==", + "dependencies": [ + "@comunica/bus-bindings-aggregator-factory", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator", + "@rdfjs/types@2.0.1", + "rdf-string" + ] + }, + "@comunica/actor-context-preprocess-convert-shortcuts@5.3.0": { + "integrity": "sha512-Jb17oQjiZrtvWcEfIWlzb7bVHWq0Buxl0YKj+Lpdd8yJMf2euRo7yW84CK0SWtcMa3zmWRR6iz11AVwoAxwvcg==", + "dependencies": [ + "@comunica/bus-context-preprocess", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0" + ] + }, + "@comunica/actor-context-preprocess-set-defaults@5.3.0": { + "integrity": "sha512-XUuCgi3pI3A+WK1f4IaL+EGKf+LRk8Tyh1W4f7l/66D7YhU7zT3dpSHQ0czywDgZGD8y8BB5avLHF/NlufEQHQ==", + "dependencies": [ + "@comunica/bus-context-preprocess", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@rdfjs/types@2.0.1", + "rdf-data-factory@2.0.2" + ] + }, + "@comunica/actor-context-preprocess-source-to-destination@5.3.0": { + "integrity": "sha512-SqlOUs6WiTg2/bGuU7nJdaz/YAZD/yInEsJ1yBXZuuZtgyLsbuFIyIkzce4Jc6WmHvyUklabRVygtVv1ToBAzQ==", + "dependencies": [ + "@comunica/bus-context-preprocess", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0" + ] + }, + "@comunica/actor-expression-evaluator-factory-default@5.3.0": { + "integrity": "sha512-DlPOGnaZzJQr3w1rMszrPLIGLJIPwQgtfyfLUcUhtYuMMTAzvfP4xpnA7RNW4CkvlJsynWf0QhDLECjMSw1+Cw==", + "dependencies": [ + "@comunica/bus-expression-evaluator-factory", + "@comunica/bus-function-factory", + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "@comunica/utils-expression-evaluator", + "@comunica/utils-query-operation", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/actor-function-factory-expression-bnode@5.3.0": { + "integrity": "sha512-ehEsR4UERdQGVq/uFyHpqV3egO9SkO/jGIESM8FngimoiMftPN71Qddgkz0AmS8r5mkNg9lADswR5mgQzUB0YA==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/context-entries@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-data-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-expression-bound@5.3.0": { + "integrity": "sha512-b0Dg6K7clkaDTHZzzG5OzhZI5IEF+kUahl+uFI2iDXULNhEUnnZpI9yrNeCMqSDUa3HUq/M0mvrWg0kskv70Jg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/context-entries@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-expression-coalesce@5.3.0": { + "integrity": "sha512-pDqtK2e9qD1claWiCJ0pSYGCcAJQVM/JzdQEaGjbMIGJosDdJfPJ5NiWS7GeU2/nOUJVlsUocpURy7Pw+6h6Iw==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-expression-concat@5.3.0": { + "integrity": "sha512-4fHbURg9zA40zf3ZNo3Jh7f01K+xZoE8EBZMlT+f9sRN7hrV/486Nfc5Dg+wsDBPkjgWk4nkoXqFQr2O9Vkjow==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/context-entries@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-expression-extensions@5.3.0": { + "integrity": "sha512-eEB6A14IIetbZ3uCRtz2A3r2d4Lq/XtxNwT42oOBH1UxLu7fHBKL+8BobwSdp+pzzJVvzrv7keVy5lz4g84hnQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator", + "rdf-data-factory@2.0.2" + ] + }, + "@comunica/actor-function-factory-expression-if@5.3.0": { + "integrity": "sha512-YxTBMXUaqUAj8qKQrhCWQrygM1j20oDj3uwzWNUqPXd6JgSiXyGrlifxYD7Y8Pg9/6FLsn3aCprK/TQJqJUZLg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-expression-in@5.3.0": { + "integrity": "sha512-SIgBJHHXwDZ0d8NAfWbnLHC76s9KV3SGeKbX7+oPvCvNsYh8aAfZqAHbIKddNQSqpTaKzeD5n46Eqh78uumyPA==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-expression-logical-and@5.3.0": { + "integrity": "sha512-mqIbZjsmt/ABJkuZ6WBXFkZigfj+dPcHw8tNDRHX4cqKflBJNtxbSd4p0aHcZo4pZkhbpuQO8XlL5C4NBTFR/A==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-expression-logical-or@5.3.0": { + "integrity": "sha512-gqYJvIPTU6OY6QZpsA6z/Xxs9WmTy3rY6mxfZG7F8BfqgHzzKeTexa4fvd5GppcWZuaCIuRhbBVa5Z1zleffxA==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-expression-not-in@5.3.0": { + "integrity": "sha512-1K5sR8h8PrYOH/grF6FQBKGI2Be/VwM/kjJ8Hef5oBAYvf1hvYkAaxQ8TOGkLW8navDhoCR2b0I19D7EZoP7zA==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-expression-same-term@5.3.0": { + "integrity": "sha512-BrYg/2YkC1R9DTZEdT6sWCwvoRICvLT+62DsdF4p8XZxe2T3VEQyAoQTivwkbTpRQnxiLSh3gTd2I3AXwQOw+w==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/context-entries@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-abs@5.3.0": { + "integrity": "sha512-dTltBZjkgga9j4Q+BFqvEE+WvgEWKJtWjIxWs67KKikNIoIfZDCYWXMXlQMJNC4N09qNATEM7iyz6ttLfY3wHg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-addition@5.3.0": { + "integrity": "sha512-A5sEZKM+NJ2tiaFP6QN8oNY+0IF5JTVNuMrlpl8fsVmBzpUMmc+j7SzttQp9wmqo0JKmFdq/hSGhBbhmtqtpGQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator", + "bignumber.js" + ] + }, + "@comunica/actor-function-factory-term-ceil@5.3.0": { + "integrity": "sha512-ozUlZyJt7Ra34EDOmdxnrpnuH1fHGOBmvFUavD+0uR66PXPrsV6EFH/HW0VNfcVe/iPehN0lDFF+SyFeLml3Ug==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-contains@5.3.0": { + "integrity": "sha512-6dYnydAdwOfrcJRq9/R7sUqrmCXXZ5381KHtPgnw0va4K32D2QxArIlWO92dYZzDgJ1v+UNRXK5xmbOOg4qW+Q==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-datatype@5.3.0": { + "integrity": "sha512-z7SJgfJvElB+dR6CdnMgMkB+qK2DupXti7yiqI4DPADiHovipriz0ChAplGSWXzJ+O++1L5PHeeYiBqY8rpuzQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-day@5.3.0": { + "integrity": "sha512-jRYSd2lFENaqcRi0LGzr2JSG/I4zvzgBzlmvw4m8OXIZ75sDkCOPRguWPJoidq7AdmpK5mVNIEhrJJVNNDrotg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-division@5.3.0": { + "integrity": "sha512-vnVeRW2sAKa5KHY4AXlyYMF71DcAzr5zf7lCwPuUoXS+vKuAkO+tGztdEVjKxo4G0mzc3VVbmDuXO2MWIsOhrg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator", + "bignumber.js" + ] + }, + "@comunica/actor-function-factory-term-encode-for-uri@5.3.0": { + "integrity": "sha512-82nSJ9LhJqiCl9Aq0MDZa2ekUOeknMUJ6pHxnSYXeS9TYoA+xj5IiMw4tEsZIc7ziIuAQwcR10+mbHptYm3FPg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-equality@5.3.0": { + "integrity": "sha512-wxXJVrrNhsljCmenegig6JP+2MJQtx3GdbL1BmGT22OL14DRYr4/GKeCcUTJkKo7LTGQijapqgU3zolKtOICVA==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/context-entries@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-floor@5.3.0": { + "integrity": "sha512-Yxq3DqjD2ezAfnB9r//q32zVqqSsA6+AKNd37PO4BByQiShCO3RIysJGCeh5f986OP8f6E7/QCS2EhtzGVteKQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-greater-than-equal@5.3.0": { + "integrity": "sha512-QclM//r2ACVcJ4aUMD9aFf8DlPON/otvabvQDzqUs+f7ioOtd6j3aSOLSs96I64QCoo2BWRiAhWGLIQRRdhAjQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-greater-than@5.3.0": { + "integrity": "sha512-Qn8hwSntpwenHGBvoVkBST0nRFz6zEnuhI+5w0Hq/eo2qKb8MDtrpEWn3KjG0g8F+UTHDygAsjTwnTijYdtlOw==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-has-lang@5.3.0": { + "integrity": "sha512-wcFcYd/Qd4UQd30N1+L5tGQADBjVv90lk2y9NvxwrBl0LnfdOOSyaeVMI8IjAu3zs8U9S1rZEQygg/94rs+WIg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-has-langdir@5.3.0": { + "integrity": "sha512-WlTohELdTI6vzozhAd6Lxs+e/AByvWD/enlT3ZrgyP2blZ/QEjAMik49rRKfRZkLymC+I7SIZQoljsH03SSVQA==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-hours@5.3.0": { + "integrity": "sha512-84joaPb7/IOWxVeF5a2tdT4J2+bNCcT8OqLnw4rbqlnGVd0yXTe2eJIF4tb5jUvu06TYTkiF+TWf9fY48n5jsg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-inequality@5.3.0": { + "integrity": "sha512-AunuPU6IfkjqimfjbS8KcxjgeE2cYseBZ1FHs+dDCHq7nHxl8lnoul/CKliQPWtqAkJPicXNIAX8Y2SjAy8Tvw==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-iri@5.3.0": { + "integrity": "sha512-qxdaqoAJmCNJ/u/XaU2hMxjo2mQ8vw5ZvBSNuMCbI+KXIKRLV9AidRvjKMnaSa2KE3maoxqA6r9+pJUHz+H3nw==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/context-entries@5.3.0", + "@comunica/utils-expression-evaluator", + "relative-to-absolute-iri" + ] + }, + "@comunica/actor-function-factory-term-is-blank@5.3.0": { + "integrity": "sha512-q01xpJ9ms8+3Prz/UkMYOFJWQXZDSXYSY0EHgeAhSCpUMbpRNZFqwwJM5tJXMHbjB5AT4RiqEHGZ3mcW2jB+cg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-is-iri@5.3.0": { + "integrity": "sha512-5+kxYCn/FmPHFzLIqNosGftphXAuvUuY/xgpPYvUnTlh/gjM2BbCgQR6xiUmibnZPguJsCb3t7Nmygw45y2GMg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-is-literal@5.3.0": { + "integrity": "sha512-oqN1BeRjNlHpvSi0aFHPQH/2/heTFo0S4OFolQD6i5OADTPbQDMmlgkfLCv6Vd3vJDK0S+YD571xx/ull0gqRg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-is-numeric@5.3.0": { + "integrity": "sha512-mxLI9HiODJVxG7X58rCbSnOTTF0eT/6Ui5G2m0/UQJJPM/kEusNSBnbQcRbUM+npeJKpNCZkDDwMJyhFYDLwRw==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-is-triple@5.3.0": { + "integrity": "sha512-IgToUw/6+FnbuCiR6JN99Phxbc8wdazIzGZtQVwA1XfSp00Prj1/i4ItuZKeqBZpntZbvyXHEafRSfa4SXzivQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-lang@5.3.0": { + "integrity": "sha512-L8kb+o8HPDy6VjQHpAjRBnn1C4BcTTJjJ0LhvNxJqPD5nVg5dD9BIWf2l6Vv3UMZX9CaUoDpRr0v5b1fULDJvg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-langdir@5.3.0": { + "integrity": "sha512-PPVlAVaVr2y+s9jz7LDC/6+P5GxeS2Q/NtAOc6+ISpTGvaN7dIinXK+3ECR1Ly0fGW9MgHWPkfPBCMnZjbMZIA==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-langmatches@5.3.0": { + "integrity": "sha512-wSBLX2oP4Uj9Xz1uC0daTvrPePZ8cnEOr3B+MFENitQZOMfMQrxj56kqTDKlIP3ymWcnRSQo33mMUhjcMDNa7A==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-lcase@5.3.0": { + "integrity": "sha512-Cz1hwmBSQKp4jkk/pPZl2Hz+bWzcYX5sgPFrR+5VOT/1GoXXRhKGxCGrlNoIvwTVmg2TsdxEUHBFztyQwAqXJQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-lesser-than-equal@5.3.0": { + "integrity": "sha512-dZuNLI+cQGeSjq/DOzUQFvVMV7BjuiHzKiC2onOrjwy6ea7ewFBqepY5KMVjHbU+kjO+JChIglIVd9qmdet45g==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-lesser-than@5.3.0": { + "integrity": "sha512-93LdymVrC+9T5Wep6kiSbhL6Cu3orH4r/24FUFDlZcW+dSoPXQXeSPo315iTqpIALl0LOkXmrWONlq7YuqXRWw==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/context-entries@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-md5@5.3.0": { + "integrity": "sha512-ycyd5sjyfyxUyzg9xG62SSnm+xGXeCqmV57K7c6ecUezd5OrKZpW8PvobNQ8kYsF7NFMuJm6wxDBSxKkrGwpFQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator", + "@types/spark-md5", + "spark-md5" + ] + }, + "@comunica/actor-function-factory-term-minutes@5.3.0": { + "integrity": "sha512-sALHIQ/mhXrSJMpPE9IJDEZK4bCH5V9v8e/ofTjn06hqIRo3g/oNbDLKa9MEhqlL6LiHUVV14yLBuDuTYmEucQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-month@5.3.0": { + "integrity": "sha512-T4FUk5Nw7TMim5Ic0j69vz3uoXYPUBxLFyUgtAT33EbFPeKea/vphGhimP/BcV/344Pdhh1uUJuMPDsHC1mO4Q==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-multiplication@5.3.0": { + "integrity": "sha512-qidJiLwSt5+H9S/IQV/KoqW9bVhcw0qXY9pUqjWxrTDvOVwShHRzVBCXFbn0ru4DO4jt56CSMPRWZGdynPed8A==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator", + "bignumber.js" + ] + }, + "@comunica/actor-function-factory-term-not@5.3.0": { + "integrity": "sha512-/jpBfyCknSEKAhRYAxcxvGv5/uRr/A/A36sAGpwknqWkRDGV2sZ7XQdn9bqP1pQwz4vxLIUhMTalPspNsAl/cQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-now@5.3.0": { + "integrity": "sha512-18ZS0ysFKJwjGMBB9/xI5140DqW5sp45unDfURlNKLuRgQAqjK5kkjyr72otLNW1JwtlDDt5qun6kr9d84SFAg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/context-entries@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-object@5.3.0": { + "integrity": "sha512-pgPS3sLt6lCZmQSuojuPArA5pOfXRjYwOQuqnl98/gkjdHgZaZhV+rLF2qYQYO0q5QxOUacp6l9yE7wfcoX25Q==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-predicate@5.3.0": { + "integrity": "sha512-zR+6OPTQGpl+XDs41+leFhBZuPTvLUIspKscLS8ujLuMsT9eZVf7PZm4Rkhg3cL0BW5S60SqCdkJVEFAi7TGVw==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-rand@5.3.0": { + "integrity": "sha512-ln1CvevDInjP7w0sGdoYqKesW2FuQ/eM3VgPFbWC4l3kUP2xmiHGSO010eP6He4WDtsZsKBk+KfPsMMUGKXc2g==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-regex@5.3.0": { + "integrity": "sha512-zFHFkF3td+UqcM5vwLXTzRRkSSiyDPFqv9QPZADp5kiDYG9bh/dVYvEOgMGV5k3tbBAJOmm9QXcgLHLzEkmsQw==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-replace@5.3.0": { + "integrity": "sha512-Pp15O8ebd88uV0s3CFQrd7SlVJ9XCD+Wd/ql3CB71Ak1tN1jY0XqrDRZsxqjGgG1dzotXExbAaSR5pe3G+BdGA==", + "dependencies": [ + "@comunica/actor-function-factory-term-regex", + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-round@5.3.0": { + "integrity": "sha512-YSvkEeGorh5gb6QGL00TPrAxlTz8JOxLN0LTzo1ToQ/2WkMAWv/nhwNUaxuxPv+HuCMg7HWLd4SecQqSUWXhdg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-seconds@5.3.0": { + "integrity": "sha512-u0p4kRtIcCxL944AGEJzGbYk7JwurFGu4NrwnS8egBXeGISRjufoAU9ZECP7vIJza+TZv2ir5m3FP9RyWqpBUg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-sha1@5.3.0": { + "integrity": "sha512-GnsH0U+PfxhlCI3mVm5547t12IS94u4jk3aC4ZP6Oxw4WWoOFJoYg5e/aJrgwWw9F0e582YWV7C+oAcOa6QMeQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator", + "hash.js" + ] + }, + "@comunica/actor-function-factory-term-sha256@5.3.0": { + "integrity": "sha512-l4NxLQZ2pX8/8KunB8tS2GDCoR/H8L2e0TRuDnF4J9o0MkV5DyNhnGdpBb/46l8v97pSOceLXD6XeYUEYE3Rxw==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator", + "hash.js" + ] + }, + "@comunica/actor-function-factory-term-sha384@5.3.0": { + "integrity": "sha512-Bis+CineidELoPZHHy9dw+YRrBhpVuMjH4LTouHy/KxqOefvcWFt7BBzrZX53HRWr8BNG1WWLhlOc9muGrGbNQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator", + "hash.js" + ] + }, + "@comunica/actor-function-factory-term-sha512@5.3.0": { + "integrity": "sha512-1Cuto34d1DNNP5C8EEzTsREAw3PKvjCJGxhBRaBr7WEoffMjpFQT1EJvSBSPezWYpLjdjj6sfyxowFOUV0bfkg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator", + "hash.js" + ] + }, + "@comunica/actor-function-factory-term-str-after@5.3.0": { + "integrity": "sha512-LiKZu97xsuHLTMkpADsxbFn2QZcdN5xLXmg5TCGdA4jYwhTD7IWecxrlT7UbpoXLPvgiD7aeBxNrEXwXOUQrog==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-str-before@5.3.0": { + "integrity": "sha512-P090fcLfnVwyC6iDJMGJ0av+jmUurV7SDsVPW7O1qUNW4cXiMZaj0lbP23XEa0x/5PPX26f8Nitveawv/ZzZUQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-str-dt@5.3.0": { + "integrity": "sha512-FTuepSrOU6SxJW1Y5MxdU5FJN9/2wIE58DcpvmVlipVMhjTpsWfw/MRPg3GYCampS4M+OMpKxFzbDVRGdXjtfQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/context-entries@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-str-ends@5.3.0": { + "integrity": "sha512-oNPkw0ReAVGsXiZl5yMwwMgMOcv61Bs/prrFE5iIas9HjwmvQjlcJHT4S7WEH1s1I2fLFF8dl0nOJHNoO8cUDg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-str-lang@5.3.0": { + "integrity": "sha512-a5+7ccZYB3wrpC58UD1U4SM2jczZYpeGha8do7WMe9iapxat7XO95E6v44P3qcZOHlHv5HIOYgktVkLkt6oL2Q==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-str-langdir@5.3.0": { + "integrity": "sha512-6MoEM6ZzSussLJC2gi4+HqIg6dxpGJk2qTrBehp9vncmTsOlmGrIoruh9uStZ1Si0nrTeyvowtB853jQrKZGGw==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-str-len@5.3.0": { + "integrity": "sha512-NYeG5TZrPqfUfVwb2Rf35QGF7e48r7yluDpqPWsLaPloGdifwtTJvx+r4P4drkxgRNGhej88RafayqeQF1Y/GQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-str-starts@5.3.0": { + "integrity": "sha512-HX120EomFPcDiGTzI/J5EsCEe2c+il3XEs3gSsqmFDP8bX6djHxK/N6so1lZzzTf15QAxJuSh86z5zojEeCq7g==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-str-uuid@5.3.0": { + "integrity": "sha512-mQTLBTC0V5Eq9uIA7+MZSU34aiWA1nowMcVkk2EfX+1TbnApDH4wNEakTbonUFuTRkKG3SuYcoQFdlljMgMQRw==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator", + "@types/uuid", + "uuid" + ] + }, + "@comunica/actor-function-factory-term-str@5.3.0": { + "integrity": "sha512-nrSGuAwFeF+5NXHsAIvoUgXbGZ46nUCCcqA1b8aKF+/074qb652ljb6P/nXv5ShLgsre+fQ0OFGe+z+wI9A9bQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-sub-str@5.3.0": { + "integrity": "sha512-eWwIKdz6878shFiiguRjkMzVu5X8r0+KnzkG9ulnmARDz3ISkXKIpQoQsIj8sZmUtxpl4wS9sEgVjvj5umlagA==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-subject@5.3.0": { + "integrity": "sha512-pj0RCMF9oaYdXgxwh13c4c5x4YthuFfMnOMhat9FtmbN991gutTqdBHP4dxsML1iRyYfpk/WOl+DnEY6CSBxCA==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-subtraction@5.3.0": { + "integrity": "sha512-j5uzCNw5EqJ9GjthhBlo4IpX8MSJvCbU3DbVGB1N/NZkGg5LMeHC3/CKfYurusgWCNbD7c7RXr65pAohj5X5ow==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/context-entries@5.3.0", + "@comunica/utils-expression-evaluator", + "bignumber.js" + ] + }, + "@comunica/actor-function-factory-term-timezone@5.3.0": { + "integrity": "sha512-TtQNwQFzBuot0YtgnIr6uGjazblmJpvUYaIJmHxCZEhDxmLyidNS7pWvw45n3w/puwYArjzwn+tS4zSCZlwYVQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-triple@5.3.0": { + "integrity": "sha512-Cj4kSimz2e7/SRswnn8RuK2ccNWWT00Wwvz0stYBEGll6X+G/jGiOEnd8yx57G9GoeTh2/ggE8vG5wK+rBF+kg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-tz@5.3.0": { + "integrity": "sha512-OpGcbjrp5/L+efY/IouVX6x4UM2FbNtyUQhPon2UJPvg/JPzJlBKZCq2NwmjmAmXVyU2t1WPaaO7ZbuWHWaNBA==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-ucase@5.3.0": { + "integrity": "sha512-bwdotNq4cemUE/ryFaqI0XTqE4mR7cthUjkZ+Y1NdFVX/7JbFXH92xSTwZp6e6wWNALVJXjcW7ilWjwC8WsQ3g==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-unary-minus@5.3.0": { + "integrity": "sha512-Iqs5SCMaSDCU60rkgDVDlXlSK1VSOVcCQojobdX5fwMpfLRNfTSk5kiZDsFYZZ7givTcWtrhzwJdpH0xbL3snA==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-unary-plus@5.3.0": { + "integrity": "sha512-Vmrf4sKYZx/p3cHvolVXpNySBB8egFFsK5x0CBLkjWknFMAaLQgJ+/VHCpAX3S4Fa2BxzEzfiReLZdzJaWYD3w==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-uuid@5.3.0": { + "integrity": "sha512-pU1Bkb6wJaC9v+OFBQW5vPHztC7O0Z5qxyOvF1A+ACc70Cm+Vpf/dqQkTfGCw29J0QqtDvR+WDWcwzOpcGOw0g==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator", + "@types/uuid", + "uuid" + ] + }, + "@comunica/actor-function-factory-term-xsd-to-boolean@5.3.0": { + "integrity": "sha512-epMZs8+BF24LiEfx+oESctP6Yz6l2iee4etwi3U63qT8GdLBQ+K8yBYB12HeXd9jUBcx4thUGFlg5QRKWH8RpQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-xsd-to-date@5.3.0": { + "integrity": "sha512-fV5W3gExau7dp6OTQjCROjDhcUU9+rEBuY+clNi06IKEoKeza61Mw8aGExe+uz5PbmXJlo9HU1n1sHjSXnLY1g==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-xsd-to-datetime@5.3.0": { + "integrity": "sha512-WhiWzCFFldi6ggYzIOBRHnLrXZXd7qnrXVwiH2b/qldaiCBpQ/S/OdaMWA3YeRuWj9UUyWQEJJfKDn6UOT8Hcg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-xsd-to-day-time-duration@5.3.0": { + "integrity": "sha512-Bnemng9tfPdEkt++vM9tnmkXAHy6ktcX5RbePK0V8lDxpyED8nwc/7fEMrYa2X0uFc40doxOOhiO5Nl3P0pMmw==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-xsd-to-decimal@5.3.0": { + "integrity": "sha512-NrIwHXj1uLf7i+QgJMVnHqrSe0HGWhID/wBwORk6nrv+PFjI3ErBhvqzLapDbcmr0BlPaxyVx118lYzQZF5TQg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-xsd-to-double@5.3.0": { + "integrity": "sha512-Fhqy/BiEO4XvSkh6vaOEuE9bPZm+kw0kd5XK7WklwYcrTjA62kXlKeJnOHy5JyKXLxNhF+ii5hjJ51WIKnujAQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-xsd-to-duration@5.3.0": { + "integrity": "sha512-flpjFPFHL2Zmu3w+Re2AYvkAV5MK3JhysnRqeLR/+37wk4k113hf1UUCm8xt6rxg5fgSBlW7/7akfphEzGmHbQ==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-xsd-to-float@5.3.0": { + "integrity": "sha512-Dn9HLU13KkI0hnHoY2PRSLb8lj9fHA7ABHkhvHcg0s39SuI1VZva6GtdKOeDlJiUFOztjgDpyZXg6GpPW0c0KA==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-xsd-to-integer@5.3.0": { + "integrity": "sha512-LbgcUNtZ1QVqS+cWUPH/tjeCpyhsWin3y2/5gt3susk2CgehBmt7XiDGm49V2hZwtfQRpTShBrkvDMM5fhTHXg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-xsd-to-string@5.3.0": { + "integrity": "sha512-vNXIcD2DCnGjPnaW58IMORI//bcfYTcHQlK/hvgbl/Ggrw3O/hGRwtMdrBt8wRQWbd9/ylBOrbIJe6dFer0Dcw==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-xsd-to-time@5.3.0": { + "integrity": "sha512-fCRzgcgY6aNn07fGw4YpsUsYcEASJewWGIK8M7XNJqt8ZlJmxEgLpviLuzYpJkMUq85gM0XlH1zfMUkEl17ViA==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-xsd-to-year-month-duration@5.3.0": { + "integrity": "sha512-q+qKRm8Cni2x8GN+rNtTrPKzjv6eEWkMaR6KwGVdkt89/PKcj8exX/xEDlHuV3smUt8FwVUALL8zGGQ22wk2gA==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/types@5.3.0", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-function-factory-term-year@5.3.0": { + "integrity": "sha512-/FLzdcP/sIdmOjaRqDwo8gfhp4CajNC/QEPxcvMaM5awjIgAJ77xxmgIBwIVBD5PUQMVTQQsZ8eeicm4TLSxaA==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/actor-hash-bindings-murmur@5.3.0": { + "integrity": "sha512-fd82PmyTl6B/XJT0Ny8y8Tm6D6dpCGNONfox5E07nA12won/ot7YDdE0UyygHvq1ypIWnWNmnO7HirVzGDJkkQ==", + "dependencies": [ + "@comunica/bus-hash-bindings", + "@comunica/core@5.3.0", + "@types/imurmurhash", + "imurmurhash" + ] + }, + "@comunica/actor-hash-quads-murmur@5.3.0": { + "integrity": "sha512-AhqeHlcfxTzOz3Y1EuaDlDi6/WqyCOQcnZ61TegIMlQXA+JjntMtefYkAdysdWEppB63LohAcp+hvClVsTh6mA==", + "dependencies": [ + "@comunica/bus-hash-quads", + "@comunica/core@5.3.0", + "@types/imurmurhash", + "imurmurhash" + ] + }, + "@comunica/actor-http-fetch@4.5.0": { + "integrity": "sha512-rhPBWOWe0tGDgwXbRgURwiGcbw1KY58oMByT7MVi5SLMpiK1Tjjb6KoMz5SOkZWsD1z6JY65J/VLxKFSj37ogQ==", + "dependencies": [ + "@comunica/bus-http@4.5.0", + "@comunica/context-entries@4.5.0", + "@comunica/core@4.5.0", + "@comunica/mediatortype-time@4.5.0" + ] + }, + "@comunica/actor-http-proxy@4.5.0": { + "integrity": "sha512-M5UQ+/IqXFNXLu9qSFNeeph/vaP349HQozqZzOY+HTO4TNWSIcB/XO6HgE3SC7r4G+KV+s9WbHwQO/8PxshBPQ==", + "dependencies": [ + "@comunica/bus-http@4.5.0", + "@comunica/context-entries@4.5.0", + "@comunica/core@4.5.0", + "@comunica/mediatortype-time@4.5.0", + "@comunica/types@4.5.0" + ] + }, + "@comunica/actor-http-proxy@5.3.0": { + "integrity": "sha512-XzIDfH5Jhg2Q63vpUb4gyltaHqWeg00Pa1Oc+qdOREzy71hi6lsqQPTXdfh2zrK7I61PGvBB9DKpMloY3MObkQ==", + "dependencies": [ + "@comunica/bus-http@5.3.0", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/mediatortype-time@5.3.0", + "@comunica/types@5.3.0" + ] + }, + "@comunica/actor-init-query@5.3.0": { + "integrity": "sha512-57nD6J9g4hPTM9XX8HA4F07q/KlW6YfbmIyqZuUdLz5IkT1my8ceoGkNdRBQyZmjN174ChZUCZkBuR+oPzBVWg==", + "dependencies": [ + "@comunica/actor-http-proxy@5.3.0", + "@comunica/bus-http-invalidate", + "@comunica/bus-init@5.3.0", + "@comunica/bus-query-process", + "@comunica/bus-query-result-serialize", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/logger-pretty", + "@comunica/runner", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@rdfjs/types@2.0.1", + "@types/yargs", + "asynciterator", + "negotiate", + "rdf-quad", + "readable-stream@4.7.0", + "yargs" + ], + "optionalDependencies": [ + "process" + ] + }, + "@comunica/actor-optimize-query-operation-assign-sources-exhaustive@5.3.0": { + "integrity": "sha512-PX42YLREzgZcZ5Lz0Kdxp2OZYM5qEIzFqK2tUZ4pmIdfqJD2nqss5fIDwWChO1XZVjFE55/+TvykCTyPWBddQg==", + "dependencies": [ + "@comunica/bus-optimize-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-optimize-query-operation-bgp-to-join@5.3.0": { + "integrity": "sha512-n6ss2cRvdg3wyKdGC/kp/px+0geAvkk24Ob1dDdy4+7bosSubhbFmMH0azpwApvqWETdbZQznhw+MW+YN5JeVw==", + "dependencies": [ + "@comunica/bus-optimize-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/utils-algebra" + ] + }, + "@comunica/actor-optimize-query-operation-construct-distinct@5.3.0": { + "integrity": "sha512-bM1g6HC2+WKPrtjD5x1FOI0OYgqfN7d+0Ks+vW/uSFC5ag0e6mVH/GeSRjby2PSd+Vmi2EAs8xnshq45T9T7MA==", + "dependencies": [ + "@comunica/bus-optimize-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/utils-algebra" + ] + }, + "@comunica/actor-optimize-query-operation-describe-to-constructs-subject@5.3.0": { + "integrity": "sha512-+tg/JKfHZMVx5zRBH/taZP1J2zkJlPRWnwGTB6T7t15OXUN+zAcTMwf0v93QfN1wdlRY2hPqJMMi6BTUJMV+DA==", + "dependencies": [ + "@comunica/bus-optimize-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/utils-algebra" + ] + }, + "@comunica/actor-optimize-query-operation-distinct-terms-pushdown@5.3.0": { + "integrity": "sha512-1t2dXxAcFMNj+sltazjM2MawOKxPWjq7su6i7sSFVwU2iyBBF6FHGYq7AZHEcgeZZESepu1Wc1N6cfwIigiUUg==", + "dependencies": [ + "@comunica/bus-optimize-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-optimize-query-operation-filter-pushdown@5.3.0": { + "integrity": "sha512-qEHY1gL5h6SdXi79s4JGPZKrDdzdtC3mXRX7JfRaxcaS6RvUT2Nfqf4HCEhz1VT5dca2NfV4bLMdVIHiHevdmw==", + "dependencies": [ + "@comunica/bus-optimize-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation", + "@rdfjs/types@2.0.1", + "rdf-terms" + ] + }, + "@comunica/actor-optimize-query-operation-group-file-sources@5.3.0": { + "integrity": "sha512-/7GTHmbimaAgWCnnuP6BH4wvhMWvUlgYiDyei6fjYtTlKG50oAhUmDcGbt3awsA/xgHfBhHLVXYghdNcTLn0jQ==", + "dependencies": [ + "@comunica/bus-optimize-query-operation", + "@comunica/bus-query-source-identify", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0" + ] + }, + "@comunica/actor-optimize-query-operation-group-sources@5.3.0": { + "integrity": "sha512-MYQG9QbSKkrxct4UH8Rrs9BV9F2KiXtJakApabZ4o5Nzn4cbQirhc1nZY2dMZyT9M5HLDauswfHUWBGsrto0zw==", + "dependencies": [ + "@comunica/bus-optimize-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-optimize-query-operation-join-bgp@5.3.0": { + "integrity": "sha512-kImYzuGpH6FE6lJZPqP23tyfTiJzo46Wo6X3oiePri79tLmlVaulADqUKTRrOZHNFTQi4F0L3MI2yaMJkrHifw==", + "dependencies": [ + "@comunica/bus-optimize-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/utils-algebra" + ] + }, + "@comunica/actor-optimize-query-operation-join-connected@5.3.0": { + "integrity": "sha512-Iywr/GkLf/wmruAv9IGEnSDqEyzmNcZudHVR5kWS0YF2RLzSt4t0PX/VGd+iZoOu5nGpYiMbRONJr4EAOhoGRA==", + "dependencies": [ + "@comunica/bus-optimize-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra" + ] + }, + "@comunica/actor-optimize-query-operation-leftjoin-expression-pushdown@5.3.0": { + "integrity": "sha512-U1q9CeRNB0Gcdbhq87G5zMv9lyBL8W3qHi+PLn/K5KZIw2W6B2vMGbdmiXmYxOMeTxpHd6pJIK/sX8EBikdrug==", + "dependencies": [ + "@comunica/bus-optimize-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/actor-optimize-query-operation-prune-empty-source-operations@5.3.0": { + "integrity": "sha512-DWSgeL6y2ph5ia/8vlfj3TSIniCwyKT2LSPwsSIpVdn2MkCKw80p6jxDbpdTG1mLqEXqz0Kjp25jgVGoW/CdYg==", + "dependencies": [ + "@comunica/bus-optimize-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-optimize-query-operation-query-source-identify@5.3.0": { + "integrity": "sha512-jvU5zrpJj/32F6fQ3G1VU3QhG7xpXlfBWk4tKKdbs+d4hbwBS0Nn34/utn6DWiTpOUIWuGpio9Z2uQ4VJMHpyA==", + "dependencies": [ + "@comunica/bus-context-preprocess", + "@comunica/bus-http-invalidate", + "@comunica/bus-optimize-query-operation", + "@comunica/bus-query-source-identify", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation", + "lru-cache@11.5.2" + ] + }, + "@comunica/actor-optimize-query-operation-query-source-skolemize@5.3.0": { + "integrity": "sha512-utQuZ0ED6Bc21/jblXi15Ec+dO4OrAtugZDpP2TKEeousDh3fCgnEGTAuAfcpbkdJ8/4Wft8mv68YaoqVWv13A==", + "dependencies": [ + "@comunica/bus-optimize-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-data-factory", + "@comunica/utils-metadata", + "@rdfjs/types@2.0.1", + "asynciterator", + "rdf-terms" + ] + }, + "@comunica/actor-optimize-query-operation-rewrite-add@5.3.0": { + "integrity": "sha512-Uh+dZ+8BlUcyd9LBU6OmhmLNorNzv9VUc81BQhMAcEyJPjMUHZUDpGtBRqne4BdSYF0/08dxx52QerPcp1+13g==", + "dependencies": [ + "@comunica/bus-optimize-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@rdfjs/types@2.0.1", + "rdf-data-factory@2.0.2" + ] + }, + "@comunica/actor-optimize-query-operation-rewrite-copy@5.3.0": { + "integrity": "sha512-Y3oGFfn14K4J4MAMvuZss43N9MqdJhkCShaTFJk96bm4FWKRPhDNJvQ9sMf/lMprRIocOO+AP0gA+J1UWKg4rQ==", + "dependencies": [ + "@comunica/bus-optimize-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra" + ] + }, + "@comunica/actor-optimize-query-operation-rewrite-move@5.3.0": { + "integrity": "sha512-4gHdgEvPNosME8ecYBAFGUd9jw6Cih1At6NdhoPIWG2To6RAyXbYNA4Lj+JymiFl/HDwz6pxC60o/Y17QvOIyw==", + "dependencies": [ + "@comunica/bus-optimize-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra" + ] + }, + "@comunica/actor-query-operation-ask@5.3.0": { + "integrity": "sha512-9ozBM6K5VLQsD3mZkOoE6NH5jITghM6EtmB9+0DZlk/k9HF+TbhvXkh8h8NLo/mY05urrYsYyl8YgjN9X/ZtmQ==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-query-operation-bgp-join@5.3.0": { + "integrity": "sha512-8veOnDvl6HZdHCCoy+VIX9WlQdZFlndCf2bZQaCBYt9Rgcu7maMfx19sDmwFK04fAly73dws35l2VZO7v6TD9A==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra" + ] + }, + "@comunica/actor-query-operation-construct@5.3.0": { + "integrity": "sha512-I+V1jDXwWm6Pfxd4csbB0Gjjci/NCutKSr/GS1nu4SGdWxaL9oQDVjBtwaklnYA43iAUsl5vB9j5wuhtCyj/Kw==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation", + "@rdfjs/types@2.0.1", + "asynciterator", + "rdf-terms" + ] + }, + "@comunica/actor-query-operation-distinct-identity@5.3.0": { + "integrity": "sha512-xiTM6zAvaXOL2ubLpj59jNeBbcMXTGWl7oip/2zfyOwr5EA47jgRkHbitWlqrpIbOVJBjtOlGXJVGH2u3Hdf2A==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation", + "@rdfjs/types@2.0.1", + "asynciterator", + "rdf-string" + ] + }, + "@comunica/actor-query-operation-extend@5.3.0": { + "integrity": "sha512-Xv8lfdDRqOtoA06YBUgrCaXY66js7Lhll7v9D5Tvkso3Mszsk1GCLnVwWgiMIkWK5qd+ZD1yoo8+f/UIRe953w==", + "dependencies": [ + "@comunica/bus-expression-evaluator-factory", + "@comunica/bus-query-operation", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "@comunica/utils-expression-evaluator", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-query-operation-filter@5.3.0": { + "integrity": "sha512-KNHa3ESOY58EDp8MrknzBVirdYkgQa335jpz99edXoJ48YJSlsWUbQpVR3MwHri3aGjK9V6LV7cQn8oU5DrfbA==", + "dependencies": [ + "@comunica/bus-expression-evaluator-factory", + "@comunica/bus-query-operation", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "@comunica/utils-expression-evaluator", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-query-operation-from-quad@5.3.0": { + "integrity": "sha512-L+vl1QVIi+wPZMEb0Q6SWAJ2GYvPpsNPztU73EGTRsLuo5rePOCg47V8iz1Nj5psNv9IVW+e9bdA8R7ACY1FdQ==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/actor-query-operation-group@5.3.0": { + "integrity": "sha512-TGBfjuVECdGCF+AUIPfc+Zv6c4EXSEKVQoXRcBuAhK7YxXd/U74uurar6KnoWjgc61IsNfuS7J3t567IKZ+oNg==", + "dependencies": [ + "@comunica/bus-bindings-aggregator-factory", + "@comunica/bus-merge-bindings-context", + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "@comunica/utils-query-operation", + "@rdfjs/types@2.0.1", + "asynciterator" + ] + }, + "@comunica/actor-query-operation-join@5.3.0": { + "integrity": "sha512-CcHxkuaVUg+5K2UkhrMOZ3m5V7cGhMgQsqu6N2N+Y+g+QjJ9Nsm5xsSRJuu5jGM8MS/40sXUXuBArJNj/Sx63g==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/bus-rdf-join", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-metadata", + "@comunica/utils-query-operation", + "@rdfjs/types@2.0.1", + "asynciterator", + "rdf-data-factory@2.0.2" + ] + }, + "@comunica/actor-query-operation-leftjoin@5.3.0": { + "integrity": "sha512-6NhfaXJGM480CSpFnjlJm1s51YJdzfVaRKkRLQ9shIPeWiDgQfVo+IJm/WMchYUFYs1RYAGUU4z0e7IEgcbhjg==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/bus-rdf-join", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-query-operation-minus@5.3.0": { + "integrity": "sha512-1pyEv8lNmbsZYxpbnAcyUjkSndgvkeTlyeyIyALhSrkbFo/y1c7cAC5HVD3F/CQVbDsM9Zjm8ZNi6eb0fspszw==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/bus-rdf-join", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-query-operation-nodes@5.3.0": { + "integrity": "sha512-QN4wnv7WDYC8QEyltEliDcqNpVYE2tgrLzW/zyp9DpnUDbwBJt2/29WcrXNfg2riS5UZ6z1EVjBRZ68h4kD3Jw==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-query-operation-nop@5.3.0": { + "integrity": "sha512-nuhkZg3dWHSawedwQjMXzV+Ei6LoEyVuPHl6QvOdWyryJl1jc9onRvjmGqcWgNef4e68O4JDKkC2XcAJ2DyMNA==", + "dependencies": [ + "@comunica/bus-merge-bindings-context", + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "@comunica/utils-metadata", + "@rdfjs/types@2.0.1", + "asynciterator" + ] + }, + "@comunica/actor-query-operation-orderby@5.3.0": { + "integrity": "sha512-8Ytd/AWtrgG3yui1VI6AlE4dZNy1CSeOygh6aYvTJuGhEotmq0U/2rRvKgXJ0soRFCrjKiqVZH0hB0dOoPqMoQ==", + "dependencies": [ + "@comunica/bus-expression-evaluator-factory", + "@comunica/bus-query-operation", + "@comunica/bus-term-comparator-factory", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-expression-evaluator", + "@comunica/utils-query-operation", + "asynciterator" + ] + }, + "@comunica/actor-query-operation-path-alt@5.3.0": { + "integrity": "sha512-NgOB1qb+fVQlZyBF1NILvXwEY3cyOSNtFuGthTmbwnsEAbWtNyN6VRTnYLXwQE1MQiJmmIR/WBs9dcFEhCkYbg==", + "dependencies": [ + "@comunica/actor-abstract-path", + "@comunica/actor-query-operation-union", + "@comunica/bus-query-operation", + "@comunica/bus-rdf-metadata-accumulate", + "@comunica/context-entries@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation", + "asynciterator" + ] + }, + "@comunica/actor-query-operation-path-inv@5.3.0": { + "integrity": "sha512-trWKSWwyoOKxfSBqLxQ3q2CVkqDBX6RyZt34AUhtptuLCdCCeV8zzrrtDJOpQbXrZVJ/IAJNGsgype8aIKU3Vg==", + "dependencies": [ + "@comunica/actor-abstract-path", + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra" + ] + }, + "@comunica/actor-query-operation-path-link@5.3.0": { + "integrity": "sha512-rVioPKxpTx9VtIuwt6Ej9ws+plFtSGcqk/7QcjGt66MyZA1CHuCqdYOgY3CiKRuz74SW76Kp+fNpau/EpFw0cw==", + "dependencies": [ + "@comunica/actor-abstract-path", + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra" + ] + }, + "@comunica/actor-query-operation-path-nps@5.3.0": { + "integrity": "sha512-c1DoFCYUsejZBTR1i3zaLW68FQqVgrrVr0cmBGcApz4iBUTqGWP7Ygl/0Uu88GY/krUSPjuPB6m6Bl/DhXNO/g==", + "dependencies": [ + "@comunica/actor-abstract-path", + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-query-operation-path-one-or-more@5.3.0": { + "integrity": "sha512-JdhnJvRrzroyQMqokRBPWNQ6lSwNjpR5mh8nzvGSvMOxLqua9TXs8ZOksrJZiru1/L97SgNYzlDWm1LVmGmwlw==", + "dependencies": [ + "@comunica/actor-abstract-path", + "@comunica/bus-merge-bindings-context", + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "@comunica/utils-query-operation", + "asynciterator" + ] + }, + "@comunica/actor-query-operation-path-seq@5.3.0": { + "integrity": "sha512-ERERE7n+BJuw/wwWV8Kc2X2/vFWANLHkP/eGUO2tN+6fHgKsWSzNRRbJokhnjE4ldqNgs3qSZgDA9ioW5qxBcQ==", + "dependencies": [ + "@comunica/actor-abstract-path", + "@comunica/bus-query-operation", + "@comunica/bus-rdf-join", + "@comunica/context-entries@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-query-operation-path-zero-or-more@5.3.0": { + "integrity": "sha512-v/F3KwJFDGJhjr6oRmhYED9Ra2XZFa/982nTIIl3uOwP2lw0TDTPHR5hwIG65bv77IY8G/CZ7d8UDJq9jEu9HA==", + "dependencies": [ + "@comunica/actor-abstract-path", + "@comunica/bus-merge-bindings-context", + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "asynciterator" + ] + }, + "@comunica/actor-query-operation-path-zero-or-one@5.3.0": { + "integrity": "sha512-P8aGi+DL7bqqF2mO4pZewTjxxL90CHRK/iIjwQzx6MHXBYY5+X5uoSrWMDx0GtIZ1kzX1HYZiLFS0SJNg+e29w==", + "dependencies": [ + "@comunica/actor-abstract-path", + "@comunica/bus-merge-bindings-context", + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "@comunica/utils-metadata", + "@comunica/utils-query-operation", + "asynciterator" + ] + }, + "@comunica/actor-query-operation-project@5.3.0": { + "integrity": "sha512-5JlXX0+iH2dXIFN0mAA8r0iP6i5Sxd3yMNu1nJq2EaMNY+yUDkW0sanjDVqi+3c+vUP4CVaI3uwYjbgEPykf+w==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-data-factory", + "@comunica/utils-query-operation", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/actor-query-operation-reduced-hash@5.3.0": { + "integrity": "sha512-3OLKzcq0aO1Kyjz1qOWJEotiNPae29h2+v0uzTgbDzfsZxxVk0S85zl1AWQSTYs+A79PItKFYPaiDVzsYDiKtQ==", + "dependencies": [ + "@comunica/bus-hash-bindings", + "@comunica/bus-query-operation", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation", + "@rdfjs/types@2.0.1", + "lru-cache@11.5.2" + ] + }, + "@comunica/actor-query-operation-slice@5.3.0": { + "integrity": "sha512-A+aNV+wF7KT2f+GEprahjqNd6n2/KQZfbKNoDU/9ZJVEPkl8vT9zZ1ScM7iife/VVTeLybw3KIFJcqOrDveUvQ==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra" + ] + }, + "@comunica/actor-query-operation-source@5.3.0": { + "integrity": "sha512-YyBseNXKnm5QuueihMeOui0hkNGTS7f4XqxDGxoILi9AgxQZIJI+UAhhLXN4Jt+wcvSyIqGMMhleYkpINemdZQ==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-metadata", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-query-operation-union@5.3.0": { + "integrity": "sha512-btM/bNbtWh6LIlXgvpTgjFOqNXUfv7kW4izCVBx4uS+e4yb+7rTEi2jNJ9dsF2uXHltRW13m24NR82d/P92TUg==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/bus-rdf-metadata-accumulate", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-metadata", + "@comunica/utils-query-operation", + "asynciterator" + ] + }, + "@comunica/actor-query-operation-update-clear@5.3.0": { + "integrity": "sha512-jfJG+p/1aZWqgvKfw5Wp6jdhQkpJZPD5WbK87RXR6guqxj6YPSeTNSrKtJncp8lUg3y99OPgAYTTNqVdFJPA8w==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/bus-rdf-update-quads", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/actor-query-operation-update-compositeupdate@5.3.0": { + "integrity": "sha512-6dfRIzfU65soQ99wBZLyEQ2vapG8wLaM7tIbL6c70zcsmT+FrvR8TyqbwE9J9udl4x7TdhZYFpltvCfkUewZ2Q==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-query-operation-update-create@5.3.0": { + "integrity": "sha512-sesINoFuaEfUvysskio+E7rD34mSmYEwLhEn/CACrDb9dztdgqej/IatGFQWKZpw6PezDysBVYW5vp5MQS5Bhg==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/bus-rdf-update-quads", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-query-operation-update-deleteinsert@5.3.0": { + "integrity": "sha512-yorNuXAvhoWN8A4SmVvqaXREpEadNFPX5gZ97rxPel8auiOnICMCLP1LaRk4mp1RgVRx6b14caQnw8rXMQo1cg==", + "dependencies": [ + "@comunica/actor-query-operation-construct", + "@comunica/bus-merge-bindings-context", + "@comunica/bus-query-operation", + "@comunica/bus-rdf-update-quads", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "@comunica/utils-query-operation", + "@rdfjs/types@2.0.1", + "asynciterator" + ] + }, + "@comunica/actor-query-operation-update-drop@5.3.0": { + "integrity": "sha512-FHWlHRHkNTqQWkudlgjXTtZlruwK/kRbZLyMU4kD1XyJMvYeyvJeXUxi+ZYBSJ0DBoZuYnfCupLw97xGcgYkkw==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/bus-rdf-update-quads", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/actor-query-operation-update-load@5.3.0": { + "integrity": "sha512-Qi+a6rI56UnSTY7vMJdDwo5x0JRvqBH6W5tNYFjcVSp4pBSJQyt5mgeGECh4nXPOhNSqCSmrwVIoL0YJpytl4w==", + "dependencies": [ + "@comunica/bus-query-operation", + "@comunica/bus-query-source-identify", + "@comunica/bus-rdf-update-quads", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-query-operation-values@5.3.0": { + "integrity": "sha512-SbUXQvAbGrKH5s/6A2w1JuQDfssrPgJWXAoC3YfdNlEn8CKC2xGrzNmwGma97ldKZwhxZAQaIMPK0kMOKKst+w==", + "dependencies": [ + "@comunica/bus-merge-bindings-context", + "@comunica/bus-query-operation", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "@comunica/utils-metadata", + "asynciterator" + ] + }, + "@comunica/actor-query-parse-sparql@5.3.0": { + "integrity": "sha512-SiSf65f9I3NM4jvzHp8DjfvuLeTLoBemRl54BwdM/VF7LF3XcsqcRrtY/BKIcPNipEt21z6hP6UWrRyywjTrYA==", + "dependencies": [ + "@comunica/bus-query-parse", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@traqula/algebra-sparql-1-2", + "@traqula/parser-sparql-1-2", + "@traqula/rules-sparql-1-2" + ] + }, + "@comunica/actor-query-process-sequential@5.3.0": { + "integrity": "sha512-e7J6oAfs5OufRdCLY29jv/gNhLkNqWWUrbmJFFfZ6sKKfu1K/Jxqb5OT+jAC4DiMfcB1Z8WMUAKe6ptQkL7WeQ==", + "dependencies": [ + "@comunica/bus-context-preprocess", + "@comunica/bus-merge-bindings-context", + "@comunica/bus-optimize-query-operation", + "@comunica/bus-query-operation", + "@comunica/bus-query-parse", + "@comunica/bus-query-process", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "@comunica/utils-query-operation", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/actor-query-source-identify-rdfjs@5.3.0": { + "integrity": "sha512-40YD/5Ole/BjVfsRqaaLaW/kW/NtuMCBKO8rqJXsCmVFDUoaFFOn4TQOE9T710hxRu3cZuadlaTuciPuEKLoUQ==", + "dependencies": [ + "@comunica/bus-merge-bindings-context", + "@comunica/bus-query-source-identify", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "@comunica/utils-metadata", + "@rdfjs/types@2.0.1", + "asynciterator", + "rdf-terms" + ] + }, + "@comunica/actor-rdf-join-entries-sort-cardinality@5.3.0": { + "integrity": "sha512-QnPoP58iijCZ5ES+24kPygP7sFaxInjYSiBtFn6RhVESe0lW5r2A7r5jeFGkwlAJuHXkJUOxw3mn0Nyn+z8qQw==", + "dependencies": [ + "@comunica/bus-rdf-join-entries-sort", + "@comunica/core@5.3.0" + ] + }, + "@comunica/actor-rdf-join-entries-sort-selectivity@5.3.0": { + "integrity": "sha512-AJienaS/Zdpl76KuT6uJ2hm3oF3+z5U843A4wY9j4/iuc/7W62orU2mGLHVG7EuE6ynRrG1jB5tQXZQKH7pEdg==", + "dependencies": [ + "@comunica/bus-rdf-join-entries-sort", + "@comunica/bus-rdf-join-selectivity", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0" + ] + }, + "@comunica/actor-rdf-join-inner-hash@5.3.0": { + "integrity": "sha512-KGxul6J+cezhVkM73ivPaQyha8+1ghpN3kPbExN2K1/iUjU0Ew2Prh0DYdnhLaRTrHsd/rhtzcIPgE0Xx2bXZg==", + "dependencies": [ + "@comunica/bus-hash-bindings", + "@comunica/bus-rdf-join", + "@comunica/core@5.3.0", + "@comunica/mediatortype-join-coefficients", + "@comunica/types@5.3.0", + "@comunica/utils-bindings-index", + "@comunica/utils-iterator", + "asynciterator", + "asyncjoin", + "rdf-string" + ] + }, + "@comunica/actor-rdf-join-inner-multi-bind-source@5.3.0": { + "integrity": "sha512-Kt7G31sbSdj5vexXAHnbtbW47idiZ/vbjWIm4SuUsvYCOm2jKpag2UeyFC0A+T1TPKFb32g5vt/OM0Snn616KQ==", + "dependencies": [ + "@comunica/bus-rdf-join", + "@comunica/bus-rdf-join-entries-sort", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/mediatortype-join-coefficients", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-iterator", + "@comunica/utils-query-operation", + "asynciterator" + ] + }, + "@comunica/actor-rdf-join-inner-multi-bind@5.3.0": { + "integrity": "sha512-rmvWZEG8F4WKPqpiRMKYvMwA6wA10WkeZwhYoS5cUKl42ywemvNDExLA6JgtJ6Ib9smlZcyZWWQYav+5l09gHA==", + "dependencies": [ + "@comunica/bus-merge-bindings-context", + "@comunica/bus-query-operation", + "@comunica/bus-rdf-join", + "@comunica/bus-rdf-join-entries-sort", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/mediatortype-join-coefficients", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "@comunica/utils-query-operation", + "asynciterator" + ] + }, + "@comunica/actor-rdf-join-inner-multi-empty@5.3.0": { + "integrity": "sha512-h7W1/cZOb87f/vd7BowSWsvmW6r1CiBbkbSU9/R+PIn4oTIOiHQG+i6IaYee/6is7SLhnziVC5Kr4TgP5/C/CQ==", + "dependencies": [ + "@comunica/bus-rdf-join", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/mediatortype-join-coefficients", + "@comunica/types@5.3.0", + "@comunica/utils-metadata", + "@rdfjs/types@2.0.1", + "asynciterator" + ] + }, + "@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings@5.3.0": { + "integrity": "sha512-LbFKEI6Fr0bqxm15esb+BbM2nYs6OKhf/2893wKoIoUEqWm4laGtZfsZaqFEE97ePPAYih5PoUyufSHrnpUUag==", + "dependencies": [ + "@comunica/bus-rdf-join", + "@comunica/bus-rdf-join-entries-sort", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/mediatortype-join-coefficients", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "@comunica/utils-iterator", + "@comunica/utils-query-operation", + "asynciterator" + ] + }, + "@comunica/actor-rdf-join-inner-multi-smallest@5.3.0": { + "integrity": "sha512-oLm0sYvlD6l80WwkDpqiieUbd2zOoR/QIdl7utcf9V/ZIdmoNubtoIhezWfcAwpcvTJ6YyIL0srX93dQ9mjiYA==", + "dependencies": [ + "@comunica/bus-rdf-join", + "@comunica/bus-rdf-join-entries-sort", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/mediatortype-join-coefficients", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-rdf-join-inner-nestedloop@5.3.0": { + "integrity": "sha512-/PrAyVVFrKxWMVu/SMXIpJzBo10W4rQCQI0adWi2b8/NV01CSjf9Lbo4Ikxkn17giZJHid8ni7bS1hRE3c14MQ==", + "dependencies": [ + "@comunica/bus-rdf-join", + "@comunica/core@5.3.0", + "@comunica/mediatortype-join-coefficients", + "asyncjoin" + ] + }, + "@comunica/actor-rdf-join-inner-none@5.3.0": { + "integrity": "sha512-uRbdlP4OjkcvIiAenU2Jxo2Sw1uOBo0QoGO/UcmJfFCMQWbvzFliVICJfgjwPazrpfZLtIBQ/8xpkTbzn7GjgQ==", + "dependencies": [ + "@comunica/bus-merge-bindings-context", + "@comunica/bus-rdf-join", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/mediatortype-join-coefficients", + "@comunica/types@5.3.0", + "@comunica/utils-bindings-factory", + "@comunica/utils-metadata", + "@rdfjs/types@2.0.1", + "asynciterator" + ] + }, + "@comunica/actor-rdf-join-inner-single@5.3.0": { + "integrity": "sha512-XTQXtQgTbjxMqwaXonWt0AdXHHQ49dDNeG5VUNdGsEYrY4uHio8m1zAfWV8ZBCwf8x371v2sXWl4Sz3rL5zNoQ==", + "dependencies": [ + "@comunica/bus-rdf-join", + "@comunica/core@5.3.0", + "@comunica/mediatortype-join-coefficients" + ] + }, + "@comunica/actor-rdf-join-inner-symmetrichash@5.3.0": { + "integrity": "sha512-r09fO1Fwg6P9rud0Gv/vmt39KD8hmXT17zYlKn0mkg1cLhtmSFVNra1tW0PdQzdpYWXWNDxyAojerDW1HjZ8dQ==", + "dependencies": [ + "@comunica/bus-hash-bindings", + "@comunica/bus-rdf-join", + "@comunica/core@5.3.0", + "@comunica/mediatortype-join-coefficients", + "asyncjoin" + ] + }, + "@comunica/actor-rdf-join-minus-hash@5.3.0": { + "integrity": "sha512-836AXeggHS1NZ7/cE5jRpT4DGeBPzKnkOakJzzLzExeHp6+d33Qsa3okB9LrkJoptEgL7QGaoUreyfhOhJO1uA==", + "dependencies": [ + "@comunica/bus-rdf-join", + "@comunica/core@5.3.0", + "@comunica/mediatortype-join-coefficients", + "@comunica/types@5.3.0", + "@comunica/utils-bindings-factory", + "@comunica/utils-bindings-index", + "@comunica/utils-iterator", + "@rdfjs/types@2.0.1", + "rdf-string" + ] + }, + "@comunica/actor-rdf-join-optional-bind@5.3.0": { + "integrity": "sha512-G+1CySU4KRuN16YTOENfEuE7Ba/CbIBDBXX9dpPUMDWTlxJQ787oHmK9keop6mtAgIvh1J8ukhpcAxG2QNPPrw==", + "dependencies": [ + "@comunica/actor-rdf-join-inner-multi-bind", + "@comunica/bus-merge-bindings-context", + "@comunica/bus-query-operation", + "@comunica/bus-rdf-join", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/mediatortype-join-coefficients", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "@comunica/utils-query-operation" + ] + }, + "@comunica/actor-rdf-join-optional-hash@5.3.0": { + "integrity": "sha512-EExbPqR+N9ux07lewB9FJHACCINpz+b0hBw4fZDObjB3C7MzHUAlV3iJrEbiRQI8KtHGE0A2Dz1xcYWV66p0fw==", + "dependencies": [ + "@comunica/bus-rdf-join", + "@comunica/core@5.3.0", + "@comunica/mediatortype-join-coefficients", + "@comunica/types@5.3.0", + "@comunica/utils-bindings-factory", + "@comunica/utils-bindings-index", + "@comunica/utils-iterator", + "asynciterator", + "rdf-string" + ] + }, + "@comunica/actor-rdf-join-optional-nestedloop@5.3.0": { + "integrity": "sha512-vsYkMqBbvoAgUBjgGQB4BxtO09l0T178OGqO33Np0RXEo3vuAkL+jjIUD4wL10Zr9F8XZ6OEAmrhT/di9FMqww==", + "dependencies": [ + "@comunica/bus-rdf-join", + "@comunica/core@5.3.0", + "@comunica/mediatortype-join-coefficients", + "asyncjoin" + ] + }, + "@comunica/actor-rdf-join-selectivity-variable-counting@5.3.0": { + "integrity": "sha512-1VG2rIYdE+zVpG3T3QtACffrFBFR3tDdXZNCnwMur+HTvDlBZB7ni4tRGl1ENnGnXw8JUKdJoJTPX0a7YiGYnQ==", + "dependencies": [ + "@comunica/bus-rdf-join-selectivity", + "@comunica/core@5.3.0", + "@comunica/mediatortype-accuracy", + "@comunica/utils-algebra" + ] + }, + "@comunica/actor-rdf-metadata-accumulate-cardinality@5.3.0": { + "integrity": "sha512-vDNJOHoRO7Lhk+dmIT9ZWiUBjDBi5hbOJDMke0akZP5mc2rooVckKyWDlofxqyk6bI4bDGDfQs8T9LnFw9v9xg==", + "dependencies": [ + "@comunica/bus-rdf-metadata-accumulate", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0" + ] + }, + "@comunica/actor-rdf-metadata-accumulate-pagesize@5.3.0": { + "integrity": "sha512-93ibAxT9DTXNWMsOB9NGCmBaDNMNnGHXW+n8BsqNnUeqX9SY1C96wxD34u8nNvfb8BAtwEopzsMqCA3a+9HCfA==", + "dependencies": [ + "@comunica/bus-rdf-metadata-accumulate", + "@comunica/core@5.3.0" + ] + }, + "@comunica/actor-rdf-metadata-accumulate-requesttime@5.3.0": { + "integrity": "sha512-TJ3mj+Y1l2CgfekoPdbx2w9yIbAwPam9mWL/YLaNkYkYEfQkcgAq+SN3eLPbIklRmjzcfkaXmE57QR1NZgTlng==", + "dependencies": [ + "@comunica/bus-rdf-metadata-accumulate", + "@comunica/core@5.3.0" + ] + }, + "@comunica/actor-rdf-parse-html-microdata@4.5.0": { + "integrity": "sha512-wxoXLS0nxV4ZqJEsx+zdZLjkRxZPFo+bXt+0fVEuDdBwL5WaJ6WPEL3fqbiH3QuaTu08k9klnsg2L1ncCeHhGg==", + "dependencies": [ + "@comunica/bus-rdf-parse-html", + "@comunica/context-entries@4.5.0", + "@comunica/core@4.5.0", + "@comunica/types@4.5.0", + "microdata-rdf-streaming-parser" + ] + }, + "@comunica/actor-rdf-parse-html-rdfa@4.5.0": { + "integrity": "sha512-o39tqHXAvKHnsa82Zm5FIbDRj+CSN46Nxj19TBSpCIsRlv5wJ9NpD6yxd7nGr1ovS5/5Ky7vDSdLcJ0MnJaNSQ==", + "dependencies": [ + "@comunica/bus-rdf-parse-html", + "@comunica/context-entries@4.5.0", + "@comunica/core@4.5.0", + "@comunica/types@4.5.0", + "rdfa-streaming-parser" + ] + }, + "@comunica/actor-rdf-parse-html-script@4.5.0": { + "integrity": "sha512-eobWYbV4w7o/NK+6GMVkcaoGEQbTq2RmDDN63J1I/U0sTSQX0qvtLr0L4buOzGliIUttBbpsYfOc5YtJX6PP0g==", + "dependencies": [ + "@comunica/bus-rdf-parse", + "@comunica/bus-rdf-parse-html", + "@comunica/context-entries@4.5.0", + "@comunica/core@4.5.0", + "@comunica/types@4.5.0", + "@rdfjs/types@2.0.1", + "readable-stream@4.7.0", + "relative-to-absolute-iri" + ] + }, + "@comunica/actor-rdf-parse-html@4.5.0": { + "integrity": "sha512-43PrAVCdHLcbJtPqZOVB9/4Zm5EDwIZrzUJhFPx7y30lzda1LmchL5aPrn5OPyrP3/AxK6U0Y9ISDZOBguOAEw==", + "dependencies": [ + "@comunica/bus-rdf-parse", + "@comunica/bus-rdf-parse-html", + "@comunica/core@4.5.0", + "@comunica/types@4.5.0", + "@rdfjs/types@2.0.1", + "htmlparser2@10.1.0", + "readable-stream@4.7.0" + ] + }, + "@comunica/actor-rdf-parse-jsonld@4.5.0": { + "integrity": "sha512-QuYhMRNH7oc2RjpDCUWNoZiEkwgOGgQvT+GnCZz2pd2kHuTcH3iBo5FvDTLornSVO0RVchcpWGItN9zA2dCNoQ==", + "dependencies": [ + "@comunica/bus-http@4.5.0", + "@comunica/bus-rdf-parse", + "@comunica/context-entries@4.5.0", + "@comunica/core@4.5.0", + "@comunica/types@4.5.0", + "@jeswr/stream-to-string", + "jsonld-context-parser@2.4.0", + "jsonld-streaming-parser" + ] + }, + "@comunica/actor-rdf-parse-n3@4.5.0": { + "integrity": "sha512-rERwWLr+fiFWuzWJe5Zoh0JvlaZn9DkvFGRl/5DntnDuwI91/U/p/atXBKfz/abpPAUs4hRGj5gkqmfdZg/bBQ==", + "dependencies": [ + "@comunica/bus-rdf-parse", + "@comunica/context-entries@4.5.0", + "@comunica/types@4.5.0", + "n3@1.26.0" + ] + }, + "@comunica/actor-rdf-parse-rdfxml@4.5.0": { + "integrity": "sha512-KDmXZ7w++eMO1HXaKwbkx6o5wKTtSMTCdhMGb/ewHinw4XVwesAy9nu/C5CAhi8LpCjdAxa7kf5POejBXUWd3Q==", + "dependencies": [ + "@comunica/bus-rdf-parse", + "@comunica/context-entries@4.5.0", + "rdfxml-streaming-parser" + ] + }, + "@comunica/actor-rdf-parse-shaclc@4.5.0": { + "integrity": "sha512-YFYn9ml/eCfZhBTYeaYJ0Qk6HerBi0H4acZYppcMKdh/GPJklzW9LOLlEfEzYstrqwPIKZzqgoBg5yvVgbmXpA==", + "dependencies": [ + "@comunica/bus-rdf-parse", + "@comunica/types@4.5.0", + "@jeswr/stream-to-string", + "@rdfjs/types@2.0.1", + "asynciterator", + "readable-stream@4.7.0", + "shaclc-parse" + ] + }, + "@comunica/actor-rdf-parse-xml-rdfa@4.5.0": { + "integrity": "sha512-1uQuq3xsokT0wWf9O6d+SyuNEvGX+bgSSGBCQF9YDjc2RygiZATUdThDmh4VDUYJzUCxHb3YM1XyJ+U2Si6xpA==", + "dependencies": [ + "@comunica/bus-rdf-parse", + "@comunica/context-entries@4.5.0", + "@comunica/types@4.5.0", + "rdfa-streaming-parser" + ] + }, + "@comunica/actor-rdf-update-quads-rdfjs-store@5.3.0": { + "integrity": "sha512-NQd2F2MU5Wk6XjDTXHcV1P3Ttv6JzWfTEVpQM+9TcT0S55BTQWcMwJ03KhgHNwrCFFUOc3enQxMhwXL0g4ckIg==", + "dependencies": [ + "@comunica/bus-rdf-update-quads", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-query-operation", + "@rdfjs/types@2.0.1", + "asynciterator", + "event-emitter-promisify", + "rdf-string" + ] + }, + "@comunica/actor-term-comparator-factory-expression-evaluator@5.3.0": { + "integrity": "sha512-Qg08JwUHQLjMYlQt5S07Basrd1dPJAIUlW9/NGtvPOrXCu8ukEfVjbPy7KIuz64okmLJUxS5IAcit6OqAl3OoQ==", + "dependencies": [ + "@comunica/actor-expression-evaluator-factory-default", + "@comunica/bus-function-factory", + "@comunica/bus-term-comparator-factory", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/utils-bindings-factory", + "@comunica/utils-expression-evaluator", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/bus-bindings-aggregator-factory@5.3.0": { + "integrity": "sha512-SxMOl6Zd9jolBbOIOIqkgLCGIR/6rbL/pCwsDpBU+dcpQPECEQZW51N55/t9R3pSBci20ft8AIUjyv2HC6MkdQ==", + "dependencies": [ + "@comunica/bus-expression-evaluator-factory", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-expression-evaluator", + "@rdfjs/types@2.0.1", + "rdf-string" + ] + }, + "@comunica/bus-context-preprocess@5.3.0": { + "integrity": "sha512-zEXJE1fzbG652rGTsb4CVfvI+H9B+YwCAXQq6UtMJqelVFFBSYBXMsyzHbYYN5EafRUMyfwtxxETGd4q809/sw==", + "dependencies": [ + "@comunica/core@5.3.0", + "@comunica/types@5.3.0" + ] + }, + "@comunica/bus-expression-evaluator-factory@5.3.0": { + "integrity": "sha512-5IxLzVAmwv9Aj30F17viNVFQT3EKDWXeTV1WFBLfkxFFiah5fX5gqOTKPVCYgf4n3uAjmcKtEkkRUpXU10a+Ig==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/bus-merge-bindings-context", + "@comunica/bus-query-operation", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra" + ] + }, + "@comunica/bus-function-factory@5.3.0": { + "integrity": "sha512-s/zSlCwvFLiFqSS+qhYeorOEUD/5CUMm/dJilTZsy1Dct8VYCx6Rk0wbNYkgxlnd91K/xj1ZCgCMITA+m23J5g==", + "dependencies": [ + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-expression-evaluator" + ] + }, + "@comunica/bus-hash-bindings@5.3.0": { + "integrity": "sha512-Kapq4bVjWEhHm4+c/8K50UdiGMzcePyWeDv9nj9SBRIqu+lnu67Rzwb+zk9KmiHiQKlJqr4EIguaYJqJPuym3w==", + "dependencies": [ + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/bus-hash-quads@5.3.0": { + "integrity": "sha512-cPblIA/tIgl3Hr/zkEpnckxr9YP3u+8MovWCwOlQ/7qmO8CZQGyhj+g23gzzMstrLG3KtGnFinkXPiYqr1qytg==", + "dependencies": [ + "@comunica/core@5.3.0", + "rdf-data-factory@2.0.2" + ] + }, + "@comunica/bus-http-invalidate@5.3.0": { + "integrity": "sha512-RZw7IEYNLy2DY2fUvXA4CUxzrLeYYofr+soXdKKpvwDYyXqOoNGEZoJP962/RDFORm5hvgZyOWoau5Rg9MAkUg==", + "dependencies": [ + "@comunica/core@5.3.0" + ] + }, + "@comunica/bus-http@4.5.0": { + "integrity": "sha512-wWyPNNOl6shDbtibdBl/pa9OIcoEMemNIo/J4tUViXxYXZ8i1h4FZ6PqaLtAls6O+pV71mR4SKJzKEUuiZiXPg==", + "dependencies": [ + "@comunica/core@4.5.0", + "@jeswr/stream-to-string", + "is-stream", + "readable-from-web", + "readable-stream-node-to-web" + ] + }, + "@comunica/bus-http@5.3.0": { + "integrity": "sha512-/d8FS02Jb5gvFDw21ZiH2Bvt3PRkMN3kkowTRBIArB4wJjt1c7DRXCt2uS7zToNVa0mAdZmKIlC1vpY6g6o3SA==", + "dependencies": [ + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@jeswr/stream-to-string", + "is-stream", + "readable-from-web", + "readable-stream-node-to-web" + ] + }, + "@comunica/bus-init@4.5.0": { + "integrity": "sha512-9TYFLjirHDt7HPXj3eQW9KX3x5T3mZ1G/EKadL1gQxo0FAqs3y8TdicepCLhk3HY/egidlyv9WQYAPvJ+WAmAg==", + "dependencies": [ + "@comunica/core@4.5.0", + "readable-stream@4.7.0" + ] + }, + "@comunica/bus-init@5.3.0": { + "integrity": "sha512-d0Eyp1MhjTAttzBsglLJd3CLi+D7Z3Beat1a396+qdrqXWNV74TFazKMhymSmwwEUZMeyiIR/YttosOkl1ujkw==", + "dependencies": [ + "@comunica/core@5.3.0", + "readable-stream@4.7.0" + ] + }, + "@comunica/bus-merge-bindings-context@5.3.0": { + "integrity": "sha512-1o8i7aVxWkZhlSEFbbO5YsRvEtQcepRxbrcwovX9qhDpoaZgcEcOIG3cG56+McxD6hZcJoRIJAnOjggmL5rPiw==", + "dependencies": [ + "@comunica/core@5.3.0", + "@comunica/types@5.3.0" + ] + }, + "@comunica/bus-optimize-query-operation@5.3.0": { + "integrity": "sha512-YsI+cfmW8Syblu50hs1HrSRZIkW/cZMmdjGlq02kRr9YUyexk05h1mzAblWP1/63VbvTVc42MPkm57JShp5Z0g==", + "dependencies": [ + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra" + ] + }, + "@comunica/bus-query-operation@5.3.0": { + "integrity": "sha512-acJ87Hsw62NGSCKGbb/YN51zC4d+Tjin3V3DARjnbP7koyltInW8BkNbsZjPr+R5rhvEQbCfxLSuwuk7bg4IIQ==", + "dependencies": [ + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-metadata", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/bus-query-parse@5.3.0": { + "integrity": "sha512-DnklxCi7+HjsB/6zmVrupmjQxDEkWydWXBOp++suVjrrxaD0BbOXNwInD33Kr5j9pSMPrBUck0nk8+mHc8JiZA==", + "dependencies": [ + "@comunica/core@5.3.0", + "@comunica/utils-algebra", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/bus-query-process@5.3.0": { + "integrity": "sha512-NOpHUBA3qxF9Y4vmHaGlnGnGxPUNthT9GdkvT3jyH3ykU8RPIbrpeRZfS5Kdv2rj3Z/EvTlUXIEF63ENdAReAA==", + "dependencies": [ + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra" + ] + }, + "@comunica/bus-query-result-serialize@5.3.0": { + "integrity": "sha512-jWz0031xw1AfdgdpvDPAGV1s1jkK9wSMY5dm3kAAn9bzudLOQekvxyMDUiX5Wrk7nF4xDo/CZO1HsCX6eLCOtw==", + "dependencies": [ + "@comunica/actor-abstract-mediatyped@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0" + ] + }, + "@comunica/bus-query-source-identify@5.3.0": { + "integrity": "sha512-7tMFWemw1CojMqYwJpd42ojZA5QZQCN1/ITDTuUVTh1stny+siCTpAmqMLAwxpKs2AWeuj9ytkUGd/jk8zH6Ww==", + "dependencies": [ + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "@comunica/utils-iterator", + "@comunica/utils-metadata", + "@rdfjs/types@2.0.1", + "asynciterator", + "rdf-string", + "rdf-terms" + ] + }, + "@comunica/bus-rdf-join-entries-sort@5.3.0": { + "integrity": "sha512-J5ivYZTKWy61W0KwuxBCbgNlNaX+acJTUaS5s/pR5SLrrMDE19yBaJAgOAP8bPlW19IPnqjMuvmrAhGRes/qyA==", + "dependencies": [ + "@comunica/core@5.3.0", + "@comunica/types@5.3.0" + ] + }, + "@comunica/bus-rdf-join-selectivity@5.3.0": { + "integrity": "sha512-vH3RVitPhWEBGOPgA3Utq4eOT2YJXYAsLMShH9fmckW+Gyn8gHkn/bvUyX3XX3eC0eFhOno3reCUQWXjgcOmfw==", + "dependencies": [ + "@comunica/core@5.3.0", + "@comunica/mediatortype-accuracy", + "@comunica/types@5.3.0" + ] + }, + "@comunica/bus-rdf-join@5.3.0": { + "integrity": "sha512-frR1cwzcM6knfkxMB0kLgTc31N2dU3XhK4DeZhbkXtj8Nyu2g7YMhrU/HEOToNj/lrr4/utxsisg63c9e2/IUg==", + "dependencies": [ + "@comunica/bus-rdf-join-entries-sort", + "@comunica/bus-rdf-join-selectivity", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/mediatortype-join-coefficients", + "@comunica/types@5.3.0", + "@comunica/utils-iterator", + "@comunica/utils-metadata", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/bus-rdf-metadata-accumulate@5.3.0": { + "integrity": "sha512-qQFIhWFvqNVT3Lbfe+gF8pWFEyFGhZ4nHRBbSYuhfF53Uq4odEwx/NwFkbrPqH4QWAnKy+uqUCr1RTvNa/0Zyg==", + "dependencies": [ + "@comunica/core@5.3.0", + "@comunica/types@5.3.0" + ] + }, + "@comunica/bus-rdf-parse-html@4.5.0": { + "integrity": "sha512-yKsPuCIOLF5TXqoXXo+utZehG2diTCBnNleXrOI8Utr4Qu5rAU4oQ5+FC0UByMu5hr+g/TGm2A+IHSVzFRCUfw==", + "dependencies": [ + "@comunica/core@4.5.0", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/bus-rdf-parse@4.5.0": { + "integrity": "sha512-TnTS9F2GSbibuCd0Rep20C9WXU0KH0iWl2S2xycefMFrZK7noA8LeT/AHNshQlMPKejKxWME+jNsvcXgC++8zw==", + "dependencies": [ + "@comunica/actor-abstract-mediatyped@4.5.0", + "@comunica/actor-abstract-parse", + "@comunica/core@4.5.0", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/bus-rdf-update-quads@5.3.0": { + "integrity": "sha512-3GiRK60Cdnu0jnk7ux9EZBy/GlfsKCITReuFiAQEwUQs5nqRHq2MQ+f8gjaVICc9L50jICNGOXHRn095IFskpA==", + "dependencies": [ + "@comunica/actor-optimize-query-operation-query-source-skolemize", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@rdfjs/types@2.0.1", + "asynciterator" + ] + }, + "@comunica/bus-term-comparator-factory@5.3.0": { + "integrity": "sha512-Xk61lo643QXfH9f34M7vNdaOART32Gjp3R6IdOsLqgCmrwM0FtvUt8UB+FWgTV4G6n8aRJwFw2e8M9v3kw3obg==", + "dependencies": [ + "@comunica/bus-function-factory", + "@comunica/bus-merge-bindings-context", + "@comunica/bus-query-operation", + "@comunica/core@5.3.0", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/config-query-sparql@4.4.0": { + "integrity": "sha512-ZVK6eqpYLNa3MRLOWjRaudgfSdraJH/oZIkc5S2doJI2ZmnHROqQUtjPs13kwkI3hGZ6MVBtLm55oz+tKj2lKA==" + }, + "@comunica/config-query-sparql@5.3.0": { + "integrity": "sha512-5snTR5p0yjQCIiRrNu6tzNAD1EfahkSNmQUB2AUI04S/lfz97HQ1ycvQroeJ7P08goyBtld2s0AReexUnNhcfw==" + }, + "@comunica/context-entries@4.5.0": { + "integrity": "sha512-mgeSYFBcpMKLq34COpy129LVHigGUgA1uEI66WXmk3mdmlAKRQNe9D/W2Q924w0FZZmIOpeLMo+s358tFsodow==", + "dependencies": [ + "@comunica/core@4.5.0", + "@comunica/types@4.5.0", + "@rdfjs/types@2.0.1", + "jsonld-context-parser@2.4.0", + "sparqlalgebrajs" + ] + }, + "@comunica/context-entries@5.3.0": { + "integrity": "sha512-B4KXcYgYDrg1HCl1kCyhHM2I/xvyJsSbf8bxHY2xWnaqqytLJPyyMffKdHFRflHc1JmlqpYV6vyc4+5ZBUWzAw==", + "dependencies": [ + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@rdfjs/types@2.0.1", + "jsonld-context-parser@2.4.0" + ] + }, + "@comunica/core@4.5.0": { + "integrity": "sha512-UFHBboFaY0eESH0H8qJRIRuRfda2QduS886l2sRum/V4qhzJkMpf3zdOoZoBbRDU24PBmliWysi9TEsaPsyRwg==", + "dependencies": [ + "@comunica/types@4.5.0", + "immutable" + ] + }, + "@comunica/core@5.3.0": { + "integrity": "sha512-f3TIl78jS/Td4b7jcXm8Ps2aTz70yujgrMn2vYKg6YLcvumA7yVJ5yVvgDz+jhv7wnQfk8yJfnzi2PYwuM4UMw==", + "dependencies": [ + "@comunica/types@5.3.0", + "immutable" + ] + }, + "@comunica/logger-pretty@5.3.0": { + "integrity": "sha512-GcpITJMRzlnOCJ8XbiKWIFQZJ1a6SyCHo5Yb/aXW24JIS7F4DFmogKdywQSffPnxT+0qTFPJn8ZDPaMeLfp1Jg==", + "dependencies": [ + "@comunica/types@5.3.0", + "object-inspect", + "process" + ] + }, + "@comunica/logger-void@5.3.0": { + "integrity": "sha512-/AY/8lT7A33nEtJ1bKgecVF52zR8mj6WQKoEM2RDvDG3ZKjwVDy3uZd2rOiz18lN58YHL7sCN1bxyrVGgjc40g==", + "dependencies": [ + "@comunica/types@5.3.0" + ] + }, + "@comunica/mediator-all@5.3.0": { + "integrity": "sha512-Fl2VqjdMGZSdqxJ/QkShgTH+kO0m0J3wiMGI1nzB4eSxqcJi8vI/AFDmlEnlodGR8xQyRKTM54/PVF6HUdd96w==", + "dependencies": [ + "@comunica/core@5.3.0" + ] + }, + "@comunica/mediator-combine-pipeline@4.5.0": { + "integrity": "sha512-Z4uLxugl+Ls8oAwD0dAIQg+i1rkiXbpiFLhgv5h6nksnz9q6Nv14xItm6baivxAJ9p8XVHCOwPxW46YJBtWIoQ==", + "dependencies": [ + "@comunica/core@4.5.0", + "@comunica/types@4.5.0" + ] + }, + "@comunica/mediator-combine-pipeline@5.3.0": { + "integrity": "sha512-I3OzVq2HlFOREEUBm5r4Hs8J1gDGyL4Ms45e2gJfEfuQuMKIIdCeUkdLrqHhqA1xgryybFV2PZ2bD7L6V2/xVw==", + "dependencies": [ + "@comunica/core@5.3.0", + "@comunica/types@5.3.0" + ] + }, + "@comunica/mediator-combine-union@4.5.0": { + "integrity": "sha512-aCoO3CiANssR8PEjad2aNuCcfhKdUFZWplTWq77cVUMVc4nsUWNleeEvN6kfOx51qdT8lFpH3b8X+S7bT8CABg==", + "dependencies": [ + "@comunica/core@4.5.0" + ] + }, + "@comunica/mediator-combine-union@5.3.0": { + "integrity": "sha512-us4Ficcn9dMfeMAWPYaM386hwsWzBjYF2VClSkCn3hQW8G702HOs384pxFA5CDaqUUpn2HZZdokM72S8JTMFCg==", + "dependencies": [ + "@comunica/core@5.3.0" + ] + }, + "@comunica/mediator-join-coefficients-fixed@5.3.0": { + "integrity": "sha512-oqMfzit7DD6vwGxxLtFf5gBZVrVvLRGe6scksmnp32aq4RWPv5/PLg2DmsCq8bRIzKnMG4kDJaFh9aSBAmXG8g==", + "dependencies": [ + "@comunica/bus-rdf-join", + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/mediatortype-join-coefficients", + "@comunica/types@5.3.0" + ] + }, + "@comunica/mediator-number@4.5.0": { + "integrity": "sha512-fChc4gh+gtwPOS0F5eNeDuU4Kyb2fAuppN28d1/5s+OUr5v+1Wya7yZ1zbPHYxDMWZEpJBR06eX6djcI0gKlkQ==", + "dependencies": [ + "@comunica/core@4.5.0" + ] + }, + "@comunica/mediator-number@5.3.0": { + "integrity": "sha512-Mb21LNiMZfjN4fF9st7eBpupX+AdrPLSrzJ8jquv5N5jK3ss8ctAPU6Kqs8c6DLkTmdfGIqUt9lQMQ7fodgj1A==", + "dependencies": [ + "@comunica/core@5.3.0" + ] + }, + "@comunica/mediator-race@4.5.0": { + "integrity": "sha512-eAWjQolFMOxKoKuUMmcQzxwf/ZL9ooT0/OUWv1vbVfHIQb/eqDs/h8wDqwXMgEiK5dIF9ZQYaRL2vEaLq+U3Ew==", + "dependencies": [ + "@comunica/core@4.5.0" + ] + }, + "@comunica/mediator-race@5.3.0": { + "integrity": "sha512-m66N9pMJ5FHS4Pt8arLyIS85cfDsXmhAcUxUVbxQw1+hAfBoQKRmWfZdTqdW55d9xeMxZysGFV1w3k5aar4SKA==", + "dependencies": [ + "@comunica/core@5.3.0" + ] + }, + "@comunica/mediatortype-accuracy@5.3.0": { + "integrity": "sha512-+A9HiGR4iIu95xSGysrJSzKvCkxY7mXZOO96by0cr3ZqbaCuCcHNBlxQLQcPWHExLz7eo1t+43KLUB3DkzSRig==", + "dependencies": [ + "@comunica/core@5.3.0" + ] + }, + "@comunica/mediatortype-join-coefficients@5.3.0": { + "integrity": "sha512-v3iZCMrnjtBoXkYIdLg/9PDI0SZTVvk/txuMS9k4BNS9hp+e8FE73HmufH8oLdkQ8vxHCIY/G6cacqAn0eEMnA==", + "dependencies": [ + "@comunica/core@5.3.0", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/mediatortype-time@4.5.0": { + "integrity": "sha512-HND+om4L0VW3VcQrLHHE4+7Nsg7soC98i7g7UqqzDkJ4fix2FnJs0i9WH4RP+oLcx+bPhBSl5mG1m44A6sV19g==", + "dependencies": [ + "@comunica/core@4.5.0" + ] + }, + "@comunica/mediatortype-time@5.3.0": { + "integrity": "sha512-5OF11XzzolSbD2L0pA9QQdrYa3VGCge0eH88uBD8wYh/7UChOmo3J6lVjWE9Ct2GEWosJc1kUa33iu7Dfy962g==", + "dependencies": [ + "@comunica/core@5.3.0" + ] + }, + "@comunica/query-sparql-rdfjs-lite@5.3.0": { + "integrity": "sha512-t31sGSBYSEoDu3jCqMiwXFvnfhfb3wwSs4yUtfEez9CQ9JIg4dR9/i13xP8YRTd2Mfcltm/0iId9bj5V0JuHlA==", + "dependencies": [ + "@comunica/actor-bindings-aggregator-factory-average", + "@comunica/actor-bindings-aggregator-factory-count", + "@comunica/actor-bindings-aggregator-factory-group-concat", + "@comunica/actor-bindings-aggregator-factory-max", + "@comunica/actor-bindings-aggregator-factory-min", + "@comunica/actor-bindings-aggregator-factory-sample", + "@comunica/actor-bindings-aggregator-factory-sum", + "@comunica/actor-bindings-aggregator-factory-wildcard-count", + "@comunica/actor-context-preprocess-convert-shortcuts", + "@comunica/actor-context-preprocess-set-defaults", + "@comunica/actor-context-preprocess-source-to-destination", + "@comunica/actor-expression-evaluator-factory-default", + "@comunica/actor-function-factory-expression-bnode", + "@comunica/actor-function-factory-expression-bound", + "@comunica/actor-function-factory-expression-coalesce", + "@comunica/actor-function-factory-expression-concat", + "@comunica/actor-function-factory-expression-extensions", + "@comunica/actor-function-factory-expression-if", + "@comunica/actor-function-factory-expression-in", + "@comunica/actor-function-factory-expression-logical-and", + "@comunica/actor-function-factory-expression-logical-or", + "@comunica/actor-function-factory-expression-not-in", + "@comunica/actor-function-factory-expression-same-term", + "@comunica/actor-function-factory-term-abs", + "@comunica/actor-function-factory-term-addition", + "@comunica/actor-function-factory-term-ceil", + "@comunica/actor-function-factory-term-contains", + "@comunica/actor-function-factory-term-datatype", + "@comunica/actor-function-factory-term-day", + "@comunica/actor-function-factory-term-division", + "@comunica/actor-function-factory-term-encode-for-uri", + "@comunica/actor-function-factory-term-equality", + "@comunica/actor-function-factory-term-floor", + "@comunica/actor-function-factory-term-greater-than", + "@comunica/actor-function-factory-term-greater-than-equal", + "@comunica/actor-function-factory-term-has-lang", + "@comunica/actor-function-factory-term-has-langdir", + "@comunica/actor-function-factory-term-hours", + "@comunica/actor-function-factory-term-inequality", + "@comunica/actor-function-factory-term-iri", + "@comunica/actor-function-factory-term-is-blank", + "@comunica/actor-function-factory-term-is-iri", + "@comunica/actor-function-factory-term-is-literal", + "@comunica/actor-function-factory-term-is-numeric", + "@comunica/actor-function-factory-term-is-triple", + "@comunica/actor-function-factory-term-lang", + "@comunica/actor-function-factory-term-langdir", + "@comunica/actor-function-factory-term-langmatches", + "@comunica/actor-function-factory-term-lcase", + "@comunica/actor-function-factory-term-lesser-than", + "@comunica/actor-function-factory-term-lesser-than-equal", + "@comunica/actor-function-factory-term-md5", + "@comunica/actor-function-factory-term-minutes", + "@comunica/actor-function-factory-term-month", + "@comunica/actor-function-factory-term-multiplication", + "@comunica/actor-function-factory-term-not", + "@comunica/actor-function-factory-term-now", + "@comunica/actor-function-factory-term-object", + "@comunica/actor-function-factory-term-predicate", + "@comunica/actor-function-factory-term-rand", + "@comunica/actor-function-factory-term-regex", + "@comunica/actor-function-factory-term-replace", + "@comunica/actor-function-factory-term-round", + "@comunica/actor-function-factory-term-seconds", + "@comunica/actor-function-factory-term-sha1", + "@comunica/actor-function-factory-term-sha256", + "@comunica/actor-function-factory-term-sha384", + "@comunica/actor-function-factory-term-sha512", + "@comunica/actor-function-factory-term-str", + "@comunica/actor-function-factory-term-str-after", + "@comunica/actor-function-factory-term-str-before", + "@comunica/actor-function-factory-term-str-dt", + "@comunica/actor-function-factory-term-str-ends", + "@comunica/actor-function-factory-term-str-lang", + "@comunica/actor-function-factory-term-str-langdir", + "@comunica/actor-function-factory-term-str-len", + "@comunica/actor-function-factory-term-str-starts", + "@comunica/actor-function-factory-term-str-uuid", + "@comunica/actor-function-factory-term-sub-str", + "@comunica/actor-function-factory-term-subject", + "@comunica/actor-function-factory-term-subtraction", + "@comunica/actor-function-factory-term-timezone", + "@comunica/actor-function-factory-term-triple", + "@comunica/actor-function-factory-term-tz", + "@comunica/actor-function-factory-term-ucase", + "@comunica/actor-function-factory-term-unary-minus", + "@comunica/actor-function-factory-term-unary-plus", + "@comunica/actor-function-factory-term-uuid", + "@comunica/actor-function-factory-term-xsd-to-boolean", + "@comunica/actor-function-factory-term-xsd-to-date", + "@comunica/actor-function-factory-term-xsd-to-datetime", + "@comunica/actor-function-factory-term-xsd-to-day-time-duration", + "@comunica/actor-function-factory-term-xsd-to-decimal", + "@comunica/actor-function-factory-term-xsd-to-double", + "@comunica/actor-function-factory-term-xsd-to-duration", + "@comunica/actor-function-factory-term-xsd-to-float", + "@comunica/actor-function-factory-term-xsd-to-integer", + "@comunica/actor-function-factory-term-xsd-to-string", + "@comunica/actor-function-factory-term-xsd-to-time", + "@comunica/actor-function-factory-term-xsd-to-year-month-duration", + "@comunica/actor-function-factory-term-year", + "@comunica/actor-hash-bindings-murmur", + "@comunica/actor-hash-quads-murmur", + "@comunica/actor-init-query", + "@comunica/actor-optimize-query-operation-assign-sources-exhaustive", + "@comunica/actor-optimize-query-operation-bgp-to-join", + "@comunica/actor-optimize-query-operation-construct-distinct", + "@comunica/actor-optimize-query-operation-describe-to-constructs-subject", + "@comunica/actor-optimize-query-operation-distinct-terms-pushdown", + "@comunica/actor-optimize-query-operation-filter-pushdown", + "@comunica/actor-optimize-query-operation-group-file-sources", + "@comunica/actor-optimize-query-operation-group-sources", + "@comunica/actor-optimize-query-operation-join-bgp", + "@comunica/actor-optimize-query-operation-join-connected", + "@comunica/actor-optimize-query-operation-leftjoin-expression-pushdown", + "@comunica/actor-optimize-query-operation-prune-empty-source-operations", + "@comunica/actor-optimize-query-operation-query-source-identify", + "@comunica/actor-optimize-query-operation-query-source-skolemize", + "@comunica/actor-optimize-query-operation-rewrite-add", + "@comunica/actor-optimize-query-operation-rewrite-copy", + "@comunica/actor-optimize-query-operation-rewrite-move", + "@comunica/actor-query-operation-ask", + "@comunica/actor-query-operation-bgp-join", + "@comunica/actor-query-operation-construct", + "@comunica/actor-query-operation-distinct-identity", + "@comunica/actor-query-operation-extend", + "@comunica/actor-query-operation-filter", + "@comunica/actor-query-operation-from-quad", + "@comunica/actor-query-operation-group", + "@comunica/actor-query-operation-join", + "@comunica/actor-query-operation-leftjoin", + "@comunica/actor-query-operation-minus", + "@comunica/actor-query-operation-nodes", + "@comunica/actor-query-operation-nop", + "@comunica/actor-query-operation-orderby", + "@comunica/actor-query-operation-path-alt", + "@comunica/actor-query-operation-path-inv", + "@comunica/actor-query-operation-path-link", + "@comunica/actor-query-operation-path-nps", + "@comunica/actor-query-operation-path-one-or-more", + "@comunica/actor-query-operation-path-seq", + "@comunica/actor-query-operation-path-zero-or-more", + "@comunica/actor-query-operation-path-zero-or-one", + "@comunica/actor-query-operation-project", + "@comunica/actor-query-operation-reduced-hash", + "@comunica/actor-query-operation-slice", + "@comunica/actor-query-operation-source", + "@comunica/actor-query-operation-union", + "@comunica/actor-query-operation-update-clear", + "@comunica/actor-query-operation-update-compositeupdate", + "@comunica/actor-query-operation-update-create", + "@comunica/actor-query-operation-update-deleteinsert", + "@comunica/actor-query-operation-update-drop", + "@comunica/actor-query-operation-update-load", + "@comunica/actor-query-operation-values", + "@comunica/actor-query-parse-sparql", + "@comunica/actor-query-process-sequential", + "@comunica/actor-query-source-identify-rdfjs", + "@comunica/actor-rdf-join-entries-sort-cardinality", + "@comunica/actor-rdf-join-entries-sort-selectivity", + "@comunica/actor-rdf-join-inner-hash", + "@comunica/actor-rdf-join-inner-multi-bind", + "@comunica/actor-rdf-join-inner-multi-bind-source", + "@comunica/actor-rdf-join-inner-multi-empty", + "@comunica/actor-rdf-join-inner-multi-smallest", + "@comunica/actor-rdf-join-inner-multi-smallest-filter-bindings", + "@comunica/actor-rdf-join-inner-nestedloop", + "@comunica/actor-rdf-join-inner-none", + "@comunica/actor-rdf-join-inner-single", + "@comunica/actor-rdf-join-inner-symmetrichash", + "@comunica/actor-rdf-join-minus-hash", + "@comunica/actor-rdf-join-optional-bind", + "@comunica/actor-rdf-join-optional-hash", + "@comunica/actor-rdf-join-optional-nestedloop", + "@comunica/actor-rdf-join-selectivity-variable-counting", + "@comunica/actor-rdf-metadata-accumulate-cardinality", + "@comunica/actor-rdf-metadata-accumulate-pagesize", + "@comunica/actor-rdf-metadata-accumulate-requesttime", + "@comunica/actor-rdf-update-quads-rdfjs-store", + "@comunica/actor-term-comparator-factory-expression-evaluator", + "@comunica/bus-function-factory", + "@comunica/bus-http-invalidate", + "@comunica/bus-query-operation", + "@comunica/config-query-sparql@5.3.0", + "@comunica/core@5.3.0", + "@comunica/logger-void", + "@comunica/mediator-all", + "@comunica/mediator-combine-pipeline@5.3.0", + "@comunica/mediator-combine-union@5.3.0", + "@comunica/mediator-join-coefficients-fixed", + "@comunica/mediator-number@5.3.0", + "@comunica/mediator-race@5.3.0", + "@comunica/runner", + "@comunica/types@5.3.0" + ] + }, + "@comunica/runner@5.3.0": { + "integrity": "sha512-RjbneWhBfD0TYQbDQ6hEfjAJQe2HhF7eVEA3CwJd8zHHMSUaypijK2ptERIi75prL5llN8Rvod9i/B4eYQ6FRA==", + "dependencies": [ + "@comunica/bus-init@5.3.0", + "@comunica/core@5.3.0", + "componentsjs", + "process" + ], + "bin": true + }, + "@comunica/types@4.5.0": { + "integrity": "sha512-XhnkspVgYilchErpSAELHRA7B4wRszDdvCkhbd52vjLrThzGUDfDoGx+56y4AeziWkxQLNug8AZbo/Q6J2vCzQ==", + "dependencies": [ + "@rdfjs/types@2.0.1", + "@types/yargs", + "asynciterator", + "lru-cache@10.4.3", + "sparqlalgebrajs" + ] + }, + "@comunica/types@5.3.0": { + "integrity": "sha512-kuEX8uPzCgkVFQRFBrIA7ZYYkiWmQ3BhLlhii9GL3PfbquU0V2QOsebcP21l3rOSNBV63G3IQiWFdhk1Lql2pw==", + "dependencies": [ + "@comunica/utils-algebra", + "@rdfjs/types@2.0.1", + "@types/yargs", + "asynciterator", + "lru-cache@11.5.2" + ] + }, + "@comunica/utils-algebra@5.3.0": { + "integrity": "sha512-P/2qjAtuI/wk5RXDkrJuGlgwrRYh+vtl45ZzADs1YEeklzNM4AWT1Fbl501qnwi4MApr6xwPK6OxoQQ+ergB7g==", + "dependencies": [ + "@rdfjs/types@2.0.1", + "@traqula/algebra-transformations-1-2", + "@traqula/core", + "rdf-terms" + ] + }, + "@comunica/utils-bindings-factory@5.3.0": { + "integrity": "sha512-CFlQAMKg00a42S/bFKFNUUCyECXPhcqApV/VFcbh4lNWZ0y/9SqQ4Qq/JymH9R3DigshFjEgBCxQ0AIOzBV8Jw==", + "dependencies": [ + "@comunica/bus-merge-bindings-context", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@rdfjs/types@2.0.1", + "immutable", + "rdf-string" + ] + }, + "@comunica/utils-bindings-index@5.3.0": { + "integrity": "sha512-8k36woPeAEkSU/kcUvs9mgYIi7dawfPH9+si/nQlfST3NegUK8TPE0qAnzFQV/uvqDSg5+Cpo2cfl4/h0C4jWQ==", + "dependencies": [ + "@comunica/types@5.3.0", + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/utils-data-factory@5.0.0": { + "integrity": "sha512-F5nkZjDSDdydAItS19svrWdWdCTx7pLCGlVomePa1IiF117TOZZMyI9bcFmh9SoIpmoitfMPHre3Fhm8DSd0uQ==", + "dependencies": [ + "@rdfjs/types@2.0.1" + ] + }, + "@comunica/utils-expression-evaluator@5.3.0": { + "integrity": "sha512-moaI6ZA5G62dvxUzTjiw9xqoc+EKopIgSp/a+aBVu95gqj02zm0rHWVOAdgCLyu19l58uMK7MCR6hwDbLnbsDQ==", + "dependencies": [ + "@comunica/context-entries@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@rdfjs/types@2.0.1", + "lru-cache@11.5.2", + "rdf-data-factory@2.0.2", + "rdf-string" + ] + }, + "@comunica/utils-iterator@5.0.0": { + "integrity": "sha512-iognyhJ4kkwZe2zZTB9MbELiUKypVGWjLFSY+xnVqu7WjDAAkmj2KuD9jRKXdYsvMT43CUo7JXh+2vIxYGL68Q==", + "dependencies": [ + "asynciterator" + ] + }, + "@comunica/utils-metadata@5.3.0": { + "integrity": "sha512-4INJurpISwJQ37YjguK2+usOs5nLVbD3/cXiKE2Kc44QKMdX3ykySjmNvZRd3VSfd5G50ML8KtHeCZUR5C8CbQ==", + "dependencies": [ + "@comunica/types@5.3.0", + "@rdfjs/types@2.0.1", + "asynciterator" + ] + }, + "@comunica/utils-query-operation@5.3.0": { + "integrity": "sha512-gmqfXoo1G7UMKemyOYgp6yF8KEqb/PLiWX2MlRB8+YniswjotGSJ/IBY/24UEW6GnHqNMSQsNQ8LjKa5UxzrGw==", + "dependencies": [ + "@comunica/context-entries@5.3.0", + "@comunica/core@5.3.0", + "@comunica/types@5.3.0", + "@comunica/utils-algebra", + "@comunica/utils-bindings-factory", + "@rdfjs/types@2.0.1", + "rdf-data-factory@2.0.2", + "rdf-string", + "rdf-terms" + ] + }, + "@dabh/diagnostics@2.0.8": { + "integrity": "sha512-R4MSXTVnuMzGD7bzHdW2ZhhdPC/igELENcq5IjEverBvq5hn1SXCWcsi6eSsdWP0/Ur+SItRRjAktmdoX/8R/Q==", + "dependencies": [ + "@so-ric/colorspace", + "enabled", + "kuler" + ] + }, + "@jeswr/stream-to-string@2.0.0": { + "integrity": "sha512-VmoW6xYRjVzdMr2njBObVSlUc5KCJT+gyuuH+tea9ZLE59XhgfLNc8ufN5Md38STxCyAJUDUVcCBfaOo11BfuA==", + "dependencies": [ + "event-emitter-promisify" + ] + }, + "@rdfjs/data-model@2.1.2": { + "integrity": "sha512-yoSVlyCltqbaCTse3uSdf5Vo3q4UskcTm+3klaUQTwOq7Z5aCZLtLPZatXTPzr+S0WEcjTZvD++A+r3QmgamsA==", + "bin": true + }, + "@rdfjs/namespace@2.0.1": { + "integrity": "sha512-U85NWVGnL3gWvOZ4eXwUcv3/bom7PAcutSBQqmVWvOaslPy+kDzAJCH1WYBLpdQd4yMmJ+bpJcDl9rcHtXeixg==", + "dependencies": [ + "@rdfjs/data-model" + ] + }, + "@rdfjs/term-map@2.0.2": { + "integrity": "sha512-EJ2FmmdEUsSR/tU1nrizRLWzH24YzhuvesrbUWxC3Fs0ilYNdtTbg0RaFJDUnJF3HkbNBQe8Zrt/uvU/hcKnHg==", + "dependencies": [ + "@rdfjs/to-ntriples" + ] + }, + "@rdfjs/term-set@2.0.3": { + "integrity": "sha512-DyXrKWEx+mtAFUZVU7bc3Va6/KZ8PsIp0RVdyWT9jfDgI/HCvNisZaBtAcm+SYTC45o+7WLkbudkk1bfaKVB0A==", + "dependencies": [ + "@rdfjs/to-ntriples" + ] + }, + "@rdfjs/to-ntriples@3.0.1": { + "integrity": "sha512-gjoPAvh4j7AbGMjcDn/8R4cW+d/FPtbfbMM0uQXkyfBFtNUW2iVgrqsgJ65roLc54Y9A2TTFaeeTGSvY9a0HCQ==" + }, + "@rdfjs/types@1.1.2": { + "integrity": "sha512-wqpOJK1QCbmsGNtyzYnojPU8gRDPid2JO0Q0kMtb4j65xhCK880cnKAfEOwC+dX85VJcCByQx5zOwyyfCjDJsg==", + "dependencies": [ + "@types/node" + ] + }, + "@rdfjs/types@2.0.1": { + "integrity": "sha512-uyAzpugX7KekAXAHq26m3JlUIZJOC0uSBhpnefGV5i15bevDyyejoB7I+9MKeUrzXD8OOUI3+4FeV1wwQr5ihA==", + "dependencies": [ + "@types/node" + ] + }, + "@rubensworks/saxes@6.0.1": { + "integrity": "sha512-UW4OTIsOtJ5KSXo2Tchi4lhZqu+tlHrOAs4nNti7CrtB53kAZl3/hyrTi6HkMihxdbDM6m2Zc3swc/ZewEe1xw==", + "dependencies": [ + "xmlchars" + ] + }, + "@so-ric/colorspace@1.1.6": { + "integrity": "sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==", + "dependencies": [ + "color", + "text-hex" + ] + }, + "@traqula/algebra-sparql-1-1@1.1.8": { + "integrity": "sha512-N0ICB2FNvkR1ftyyHPsFoJUQwnFC6k0aDtwJJH3FjgMOID0sD8l+rOMjI/5/DYP74S1FA/O1FcfQuPfaxXhScg==", + "dependencies": [ + "@traqula/algebra-transformations-1-1", + "@traqula/core", + "@traqula/rules-sparql-1-1" + ] + }, + "@traqula/algebra-sparql-1-2@1.1.8": { + "integrity": "sha512-RJAodXn4ghjwPiFZPAzMSBYOpP4WiRjmmcDjw/SYqfsh8efN02OddnrTVeBlVf19m6QxGjxc60TkC4SLYDf+LA==", + "dependencies": [ + "@traqula/algebra-sparql-1-1", + "@traqula/algebra-transformations-1-1", + "@traqula/algebra-transformations-1-2", + "@traqula/core" + ] + }, + "@traqula/algebra-transformations-1-1@1.1.8": { + "integrity": "sha512-vE31gohd2uENWJHXLQZDFzA+tuR979tlRswHPfdKFGXWdRQpeWGsJ9DvZ8VbryqHMh6TEDSdrXmeQ1/SlyCyjQ==", + "dependencies": [ + "@traqula/core", + "@traqula/rules-sparql-1-1", + "fast-deep-equal", + "rdf-data-factory@2.0.2", + "rdf-isomorphic", + "rdf-string" + ] + }, + "@traqula/algebra-transformations-1-2@1.1.8": { + "integrity": "sha512-r+qi7UzXaD6Y1tl7hzAv+Vf1pfj7phSPn/mnmbSti1FmQbwWl2cxWpfvFQSK5FF9oNxuNkh20r/yOz6i4OH03w==", + "dependencies": [ + "@traqula/algebra-transformations-1-1", + "@traqula/rules-sparql-1-2", + "rdf-string" + ] + }, + "@traqula/chevrotain@1.1.0": { + "integrity": "sha512-VpcoQKb2ZnsOQPlPO2mE9hfR0Aidp7drwTCtaXfpdRHGkXeQ5Nv4rnxmxwUoEDRzu6b/3z4n8oTd+sYhe4fAaA==" + }, + "@traqula/core@1.1.4": { + "integrity": "sha512-oSY1Ig2CDKoVflW87oaLvQuPYYbkknwLjIkGE1TsMpYYcbxUiVfN5KCqP2qhRIZPdLTjWUd07HxYhZ7K07ERDw==", + "dependencies": [ + "@traqula/chevrotain" + ] + }, + "@traqula/parser-sparql-1-1@1.1.8": { + "integrity": "sha512-gvfX6BjGADxqU1pBUX453mk9+dnK5SOEnWRpT1WcMX53z1cE+qsja0Lk3XRAW7YcYP7OF5gHO9YtZrv/PWEA1A==", + "dependencies": [ + "@traqula/core", + "@traqula/rules-sparql-1-1" + ] + }, + "@traqula/parser-sparql-1-2@1.1.8": { + "integrity": "sha512-mmSzL34x6AIcVZruhhZaYUW+rn0+XSes/OPDYb2oHn8wnPIZRN6q2OAqV9QjGQMYWYP+3R3DX8eHOYJ2oRrjAw==", + "dependencies": [ + "@traqula/core", + "@traqula/parser-sparql-1-1", + "@traqula/rules-sparql-1-1", + "@traqula/rules-sparql-1-2", + "rdf-data-factory@2.0.2" + ] + }, + "@traqula/rules-sparql-1-1@1.1.4": { + "integrity": "sha512-E/IbmR7PM50yLDHlWP19amsAf2X0+KBb8lYI8lRQH92/rhVCP7QYEhSZksJ75+w6jm/l+OQvmQKolCZaMF7JHA==", + "dependencies": [ + "@traqula/chevrotain", + "@traqula/core" + ] + }, + "@traqula/rules-sparql-1-2@1.1.6": { + "integrity": "sha512-oAvTdBly6g/4yOywpwLeU2v2LjmJsquxMaDr+3vhHwbk2a62EhJQiP1zyuhdnTmO6Kzap3QV8Phds2YXi9bExQ==", + "dependencies": [ + "@traqula/core", + "@traqula/rules-sparql-1-1" + ] + }, + "@types/http-link-header@1.0.7": { + "integrity": "sha512-snm5oLckop0K3cTDAiBnZDy6ncx9DJ3mCRDvs42C884MbVYPP74Tiq2hFsSDRTyjK6RyDYDIulPiW23ge+g5Lw==", + "dependencies": [ + "@types/node" + ] + }, + "@types/imurmurhash@0.1.4": { + "integrity": "sha512-Zo/QlTiAvOP3pd9nuPOw33k0l/QssLOBrriShWzUE4qhIZByIF3rCoyF8ZTxdyFTUM2mYljYLqMUeLvA3NJUmQ==" + }, + "@types/minimist@1.2.5": { + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==" + }, + "@types/node@18.19.130": { + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "dependencies": [ + "undici-types" + ] + }, + "@types/readable-stream@2.3.15": { + "integrity": "sha512-oM5JSKQCcICF1wvGgmecmHldZ48OZamtMxcGGVICOJA8o8cahXC1zEVAif8iwoc5j8etxFaRFnf095+CDsuoFQ==", + "dependencies": [ + "@types/node", + "safe-buffer@5.1.2" + ] + }, + "@types/readable-stream@4.0.24": { + "integrity": "sha512-NRvUNC/JFGPJvqdAfEve8oginbM6V08u5NzLWpG8MwA2kTPOLnqk+wpwuPT+mp3aUsxyuT6m2gnrPuHYCruzEg==", + "dependencies": [ + "@types/node" + ] + }, + "@types/semver@7.7.1": { + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==" + }, + "@types/spark-md5@3.0.5": { + "integrity": "sha512-lWf05dnD42DLVKQJZrDHtWFidcLrHuip01CtnC2/S6AMhX4t9ZlEUj4iuRlAnts0PQk7KESOqKxeGE/b6sIPGg==" + }, + "@types/sparqljs@3.1.12": { + "integrity": "sha512-zg/sdKKtYI0845wKPSuSgunyU1o/+7tRzMw85lHsf4p/0UbA6+65MXAyEtv1nkaqSqrq/bXm7+bqXas+Xo5dpQ==", + "dependencies": [ + "@rdfjs/types@2.0.1" + ] + }, + "@types/triple-beam@1.3.5": { + "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==" + }, + "@types/uuid@10.0.0": { + "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==" + }, + "@types/yargs-parser@21.0.3": { + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" + }, + "@types/yargs@17.0.35": { + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "dependencies": [ + "@types/yargs-parser" + ] + }, "abort-controller@3.0.0": { "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", "dependencies": [ "event-target-shim" ] }, + "ansi-regex@5.0.1": { + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles@4.3.0": { + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": [ + "color-convert@2.0.1" + ] + }, + "async@3.2.6": { + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==" + }, + "asynciterator@3.10.0": { + "integrity": "sha512-eDOBoUf2m+4ht0ETVn2SCfuBIZZ6UWyyQbP++LRPKoK7PmrCQq37pJ6vRvyef4o1Pn+CwWnzMlkXxGdh/krVIw==", + "dependencies": [ + "tiny-set-immediate" + ] + }, + "asyncjoin@1.2.4": { + "integrity": "sha512-7/1g5uV2/iTDQteJ/pxqZq6qkO5406V+vNyOCYtHJ+mo6bmvvQHHrZgd7AtU/rx+cnz08NPWlwk8daW61thnlA==", + "dependencies": [ + "asynciterator" + ] + }, "base64-js@1.5.1": { "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "bignumber.js@11.1.5": { + "integrity": "sha512-6WmzCNtUnfKpbozq+hOgWaZMMzORmYBwF1xZScyoIX3QRYWeKTtxxwDOW5tIz7C9BdjkIYHGTcelCLkXg0mndw==" + }, "buffer@6.0.3": { "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dependencies": [ @@ -40,25 +2879,441 @@ "ieee754" ] }, + "canonicalize@1.0.8": { + "integrity": "sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==" + }, + "cliui@8.0.1": { + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": [ + "string-width", + "strip-ansi", + "wrap-ansi" + ] + }, + "color-convert@2.0.1": { + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": [ + "color-name@1.1.4" + ] + }, + "color-convert@3.1.3": { + "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", + "dependencies": [ + "color-name@2.1.0" + ] + }, + "color-name@1.1.4": { + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "color-name@2.1.0": { + "integrity": "sha512-1bPaDNFm0axzE4MEAzKPuqKWeRaT43U/hyxKPBdqTfmPF+d6n7FSoTFxLVULUJOmiLp01KjhIPPH+HrXZJN4Rg==" + }, + "color-string@2.1.4": { + "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", + "dependencies": [ + "color-name@2.1.0" + ] + }, + "color@5.0.3": { + "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", + "dependencies": [ + "color-convert@3.1.3", + "color-string" + ] + }, + "componentsjs@6.4.0": { + "integrity": "sha512-H3AmzWARyQB5V/XJ7brjnFVfqywedjVFX3n528GKjEpQvNY4HXu5CBOAWDADjeSC42cufVc7C+J+cGTsgeKRzg==", + "dependencies": [ + "@rdfjs/types@2.0.1", + "@types/minimist", + "@types/node", + "@types/semver", + "jsonld-context-parser@3.1.0", + "minimist", + "rdf-data-factory@2.0.2", + "rdf-object", + "rdf-parse", + "rdf-quad", + "rdf-string", + "rdf-terms", + "semver", + "winston" + ], + "bin": true + }, + "cross-fetch@3.2.0": { + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "dependencies": [ + "node-fetch" + ] + }, + "dom-serializer@2.0.0": { + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": [ + "domelementtype", + "domhandler", + "entities@4.5.0" + ] + }, + "domelementtype@2.3.0": { + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domhandler@5.0.3": { + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": [ + "domelementtype" + ] + }, + "domutils@3.2.2": { + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "dependencies": [ + "dom-serializer", + "domelementtype", + "domhandler" + ] + }, + "emoji-regex@8.0.0": { + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "enabled@2.0.0": { + "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" + }, + "entities@4.5.0": { + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "entities@7.0.1": { + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==" + }, + "escalade@3.2.0": { + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==" + }, + "event-emitter-promisify@1.1.0": { + "integrity": "sha512-uyHG8gjwYGDlKoo0Txtx/u1HI1ubj0FK0rVqI4O0s1EymQm4iAEMbrS5B+XFlSaS8SZ3xzoKX+YHRZk8Nk/bXg==" + }, "event-target-shim@5.0.1": { "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" }, "events@3.3.0": { "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" }, + "fast-deep-equal@3.1.3": { + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fecha@4.2.3": { + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, + "fn.name@1.1.0": { + "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" + }, + "get-caller-file@2.0.5": { + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "grapoi@1.2.0": { + "integrity": "sha512-oK+qPeiYugQKEm57IlgmedU6NrZMz0nA5g8MJ6db5afOp//isTC1P0zqwSlwfDJrUt+2TEGIoQlW7C8/a2QalQ==", + "dependencies": [ + "@rdfjs/namespace", + "@rdfjs/term-set" + ] + }, + "hash.js@1.1.7": { + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": [ + "inherits", + "minimalistic-assert" + ] + }, + "htmlparser2@10.1.0": { + "integrity": "sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==", + "dependencies": [ + "domelementtype", + "domhandler", + "domutils", + "entities@7.0.1" + ] + }, + "htmlparser2@8.0.2": { + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dependencies": [ + "domelementtype", + "domhandler", + "domutils", + "entities@4.5.0" + ] + }, + "http-link-header@1.1.4": { + "integrity": "sha512-xT3GPW6/ZbGuw4UvwHqErSCEjNUlwbQJuZn9/q5U4WEKfp2kENVCAlousG1zLxHeaQ/ffOHUNpWamvkbBW0eNw==" + }, "ieee754@1.2.1": { "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, + "immutable@5.1.9": { + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==" + }, + "imurmurhash@0.1.4": { + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + }, + "inherits@2.0.4": { + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "is-fullwidth-code-point@3.0.0": { + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-stream@2.0.1": { + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "jsonld-context-parser@2.4.0": { + "integrity": "sha512-ZYOfvh525SdPd9ReYY58dxB3E2RUEU4DJ6ZibO8AitcowPeBH4L5rCAitE2om5G1P+HMEgYEYEr4EZKbVN4tpA==", + "dependencies": [ + "@types/http-link-header", + "@types/node", + "cross-fetch", + "http-link-header", + "relative-to-absolute-iri" + ], + "bin": true + }, + "jsonld-context-parser@3.1.0": { + "integrity": "sha512-BfgNJ/t9jjK7Lun9XRCJM6YeNqDk8B6/lg+KS8rzhXAOtS0FvoClSmtLvF24V1M2CDYRy2LcEBt0ilxqSX93WA==", + "dependencies": [ + "@types/http-link-header", + "@types/node", + "http-link-header", + "relative-to-absolute-iri" + ], + "bin": true + }, + "jsonld-streaming-parser@4.0.1": { + "integrity": "sha512-6M4y9YGgADk3nXJebbRrxEdMVBJ9bnz+peAvjTXUievopqaE8sg/qml/I6Sp1ln7rpOKffsNZWSre6B7N76szw==", + "dependencies": [ + "@bergos/jsonparse", + "@rdfjs/types@2.0.1", + "@types/http-link-header", + "@types/readable-stream@4.0.24", + "buffer", + "canonicalize", + "http-link-header", + "jsonld-context-parser@3.1.0", + "rdf-data-factory@1.1.3", + "readable-stream@4.7.0" + ] + }, + "kuler@2.0.0": { + "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" + }, + "lodash@4.18.1": { + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==" + }, + "logform@2.7.0": { + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", + "dependencies": [ + "@colors/colors", + "@types/triple-beam", + "fecha", + "ms", + "safe-stable-stringify", + "triple-beam" + ] + }, + "lru-cache@10.4.3": { + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "lru-cache@11.5.2": { + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==" + }, + "microdata-rdf-streaming-parser@2.0.1": { + "integrity": "sha512-oEEYP3OwPGOtoE4eIyJvX1eJXI7VkGR4gKYqpEufaRXc2ele/Tkid/KMU3Los13wGrOq6woSxLEGOYSHzpRvwA==", + "dependencies": [ + "@rdfjs/types@2.0.1", + "htmlparser2@8.0.2", + "rdf-data-factory@1.1.3", + "readable-stream@4.7.0", + "relative-to-absolute-iri" + ] + }, + "minimalistic-assert@1.0.1": { + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimist@1.2.8": { + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "ms@2.1.3": { + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "n3@1.26.0": { + "integrity": "sha512-SQknS0ua90rN+3RHuk8BeIqeYyqIH/+ecViZxX08jR4j6MugqWRjtONl3uANG/crWXnOM2WIqBJtjIhVYFha+w==", + "dependencies": [ + "buffer", + "readable-stream@4.7.0" + ] + }, "n3@2.0.3": { "integrity": "sha512-um/toGVENTarHBYIK2TdH6ByBhW75WpdKpv8iTYt9wF2QfBk8s8a16iaWZFUAAC1BKfGdb99kfgx6pltdDwfKA==", "dependencies": [ "buffer", - "readable-stream" + "readable-stream@4.7.0" + ] + }, + "negotiate@1.0.1": { + "integrity": "sha512-KBCIM4dAIT9j/pSXLHHQbZG74NmKNXTtxU2zHN0HG6uzzuFE01m1UdGoUmVHmACiBuCAOL7KwfqSW1oUQBj/vg==" + }, + "node-fetch@2.7.0": { + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": [ + "whatwg-url" + ] + }, + "object-inspect@1.13.4": { + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==" + }, + "one-time@1.0.0": { + "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", + "dependencies": [ + "fn.name" ] }, "process@0.11.10": { "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" }, + "promise-polyfill@1.1.6": { + "integrity": "sha512-7rrONfyLkDEc7OJ5QBkqa4KI4EBhCd340xRuIUPGCfu13znS+vx+VDdrT9ODAJHlXm7w4lbxN3DRjyv58EuzDg==" + }, + "rdf-data-factory@1.1.3": { + "integrity": "sha512-ny6CI7m2bq4lfQQmDYvcb2l1F9KtGwz9chipX4oWu2aAtVoXjb7k3d8J1EsgAsEbMXnBipB/iuRen5H2fwRWWQ==", + "dependencies": [ + "@rdfjs/types@1.1.2" + ] + }, + "rdf-data-factory@2.0.2": { + "integrity": "sha512-WzPoYHwQYWvIP9k+7IBLY1b4nIDitzAK4mA37WumAF/Cjvu/KOtYJH9IPZnUTWNSd5K2+pq4vrcE9WZC4sRHhg==", + "dependencies": [ + "@rdfjs/types@2.0.1" + ] + }, + "rdf-isomorphic@2.0.1": { + "integrity": "sha512-8pfA3PeDs1sVrZ2R3dCR4KRM69m3pQGhzviNQq5Az/+Zch4I+fKstjGxCZ5ADAFPsm9zxHk8zMEQ/BFcqlnLKw==", + "dependencies": [ + "imurmurhash", + "rdf-string", + "rdf-terms" + ] + }, + "rdf-literal@2.0.0": { + "integrity": "sha512-jlQ+h7EvnXmncmk8OzOYR8T3gNfd4g0LQXbflHkEkancic8dh0Tdt5RiRq8vUFndjIeNHt1RWeA5TAj6rgrtng==", + "dependencies": [ + "rdf-data-factory@2.0.2" + ] + }, + "rdf-object@3.0.0": { + "integrity": "sha512-qefryIRh1d9gqZUKp2qQwzIWLbmQspsc2bvVoOCCp126MZmKubcUTigHiMlCrUI9g7MDCrdTFAwcAal1lVR09A==", + "dependencies": [ + "jsonld-context-parser@3.1.0", + "rdf-data-factory@2.0.2", + "rdf-string", + "streamify-array" + ] + }, + "rdf-parse@4.0.0": { + "integrity": "sha512-lNVuUKPVAdX9lJYYrJFhdQHFulYjk95BYvuNsE+eUs/M93sdsovH/Ga8bTAxagmpsoQ4LzMPa2YqeHX8ysltOA==", + "dependencies": [ + "@comunica/actor-http-fetch", + "@comunica/actor-http-proxy@4.5.0", + "@comunica/actor-rdf-parse-html", + "@comunica/actor-rdf-parse-html-microdata", + "@comunica/actor-rdf-parse-html-rdfa", + "@comunica/actor-rdf-parse-html-script", + "@comunica/actor-rdf-parse-jsonld", + "@comunica/actor-rdf-parse-n3", + "@comunica/actor-rdf-parse-rdfxml", + "@comunica/actor-rdf-parse-shaclc", + "@comunica/actor-rdf-parse-xml-rdfa", + "@comunica/bus-http@4.5.0", + "@comunica/bus-init@4.5.0", + "@comunica/bus-rdf-parse", + "@comunica/bus-rdf-parse-html", + "@comunica/config-query-sparql@4.4.0", + "@comunica/context-entries@4.5.0", + "@comunica/core@4.5.0", + "@comunica/mediator-combine-pipeline@4.5.0", + "@comunica/mediator-combine-union@4.5.0", + "@comunica/mediator-number@4.5.0", + "@comunica/mediator-race@4.5.0", + "@rdfjs/types@2.0.1", + "rdf-data-factory@1.1.3", + "readable-stream@4.7.0", + "stream-to-string" + ] + }, + "rdf-quad@2.0.0": { + "integrity": "sha512-wR3x+ypdPh6jlFy+i/+U3jUlr5078GHfBkqf3TPPJa7zJVurkJY0J8ALKPWYd1V4oyYsqJCHr3xNM5RDlvH32A==", + "dependencies": [ + "rdf-data-factory@2.0.2", + "rdf-literal", + "rdf-string" + ] + }, + "rdf-string@2.0.1": { + "integrity": "sha512-SMW4ponnKNrsP9kYpOLyICeM4UJmEXIeS3zri7kPK9gzLFsHD88oiza8LnokNYxd76zW4JoYWD+v4x0g8rJBjw==", + "dependencies": [ + "rdf-data-factory@2.0.2" + ] + }, + "rdf-terms@2.0.0": { + "integrity": "sha512-9O+ifVcvY4ZktOr+uXKswoOV6airAsIKeqCr+C47kFZBB8X+NyPSqDRGgI6X+je8It6z2e9jZhWwjJiEZ8Yn5Q==", + "dependencies": [ + "rdf-data-factory@2.0.2", + "rdf-string" + ] + }, + "rdf-validation@0.1.1": { + "integrity": "sha512-z2RbRcsKOM+CWa7qoI4LWCQQTji64eoBNLvbP3++0ZE4pO4EP1xkV5asSH4TULeLfDEuMhzyDXRnAjA+8R2l4w==", + "dependencies": [ + "@rdfjs/data-model", + "@rdfjs/namespace", + "@rdfjs/term-map", + "@rdfjs/to-ntriples" + ] + }, + "rdfa-streaming-parser@2.0.1": { + "integrity": "sha512-7Yyaj030LO7iQ38Wh/RNLVeYrVFJeyx3dpCK7C1nvX55eIN/gE4HWfbg4BYI9X7Bd+eUIUMVeiKYLmYjV6apow==", + "dependencies": [ + "@rdfjs/types@2.0.1", + "htmlparser2@8.0.2", + "rdf-data-factory@1.1.3", + "readable-stream@4.7.0", + "relative-to-absolute-iri" + ] + }, + "rdfxml-streaming-parser@2.4.0": { + "integrity": "sha512-f+tdI1wxOiPzMbFWRtOwinwPsqac0WIN80668yFKcVdFCSTGOWTM70ucQGUSdDZZo7pce/UvZgV0C3LDj0P7tg==", + "dependencies": [ + "@rdfjs/types@2.0.1", + "@rubensworks/saxes", + "@types/readable-stream@2.3.15", + "buffer", + "rdf-data-factory@1.1.3", + "readable-stream@4.7.0", + "relative-to-absolute-iri", + "validate-iri" + ] + }, + "readable-from-web@1.0.0": { + "integrity": "sha512-tei03fQhxqLEklpIvocFUR9hO42hiyYvdhwoNHAjJztPAQ8QS1NqF2AhLwzGxIGidPBJ4MCqB48wn7OAFCfhsQ==", + "dependencies": [ + "@types/readable-stream@4.0.24", + "readable-stream@4.7.0" + ] + }, + "readable-stream-node-to-web@1.0.1": { + "integrity": "sha512-OGzi2VKLa8H259kAx7BIwuRrXHGcxeHj4RdASSgEGBP9Q2wowdPvBc65upF4Q9O05qWgKqBw1+9PiLTtObl7uQ==" + }, + "readable-stream@3.6.2": { + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": [ + "inherits", + "string_decoder", + "util-deprecate" + ] + }, "readable-stream@4.7.0": { "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", "dependencies": [ @@ -69,13 +3324,191 @@ "string_decoder" ] }, + "relative-to-absolute-iri@1.0.8": { + "integrity": "sha512-U1TmhrhCmXKkDL9mI8gBbF5TN6TKcuv28k5+H3gMCAjoz0TyyHAICHlaGDZsTEBSu2Y3HhDKc8e6X9n33qeIqA==" + }, + "require-directory@2.1.1": { + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" + }, + "safe-buffer@5.1.2": { + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, "safe-buffer@5.2.1": { "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, + "safe-stable-stringify@2.5.0": { + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==" + }, + "semver@7.8.5": { + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "bin": true + }, + "shacl-engine@1.1.2": { + "integrity": "sha512-ypclUwHJ6KPYUZb8ggslN7BSOwza9vgIwQgLY0oey0Xbzla6B7cRWroeDvfkntYzU1HnERgGvC/qsKge3a6s1Q==", + "dependencies": [ + "@comunica/query-sparql-rdfjs-lite", + "@comunica/utils-bindings-factory", + "@rdfjs/namespace", + "@rdfjs/term-map", + "@rdfjs/term-set", + "@rdfjs/to-ntriples", + "grapoi", + "lodash", + "rdf-literal", + "rdf-validation", + "readable-stream@4.7.0" + ] + }, + "shaclc-parse@1.4.3": { + "integrity": "sha512-MQJWVFjfzzMUvieFO0STWjIo49ywy63UkVSsr0e8+8xHUns6X+i3yWYxNKd+GtSEJjBNZxxrUubog+hnd7PvRA==", + "dependencies": [ + "@rdfjs/types@2.0.1", + "n3@1.26.0" + ] + }, + "spark-md5@3.0.2": { + "integrity": "sha512-wcFzz9cDfbuqe0FZzfi2or1sgyIrsDwmPwfZC4hiNidPdPINjeUwNfv5kldczoEAcjl9Y1L3SM7Uz2PUEQzxQw==" + }, + "sparqlalgebrajs@5.0.2": { + "integrity": "sha512-Xz7byRqWqCMkbM+3ogGmKO/wsezQKQQNleoggP03sCTTFfCh/ZlN5CGt+HkrOenDSktZ93jpKFbbaIRjLOYtWw==", + "dependencies": [ + "@types/sparqljs", + "fast-deep-equal", + "minimist", + "rdf-data-factory@2.0.2", + "rdf-isomorphic", + "rdf-string", + "rdf-terms", + "sparqljs" + ], + "bin": true + }, + "sparqljs@3.7.4": { + "integrity": "sha512-hb4C84gf7KM7vz+iG595mPwvqxOvBJCm9L3dCxtV2zZDht6ZMmMG0tHeeqFeqwb9875yU9U4lhYe4LYRvWj0BQ==", + "dependencies": [ + "rdf-data-factory@1.1.3" + ], + "deprecated": true, + "bin": true + }, + "stack-trace@0.0.10": { + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==" + }, + "stream-to-string@1.2.1": { + "integrity": "sha512-WsvTDNF8UYs369Yko3pcdTducQtYpzEZeOV7cTuReyFvOoA9S/DLJ6sYK+xPafSPHhUMpaxiljKYnT6JSFztIA==", + "dependencies": [ + "promise-polyfill" + ] + }, + "streamify-array@1.0.1": { + "integrity": "sha512-ZnswaBcC6B1bhPLSQOlC6CdaDUSzU0wr2lvvHpbHNms8V7+DLd8uEAzDAWpsjxbFkijBHhuObFO/qqu52DZUMA==" + }, + "string-width@4.2.3": { + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": [ + "emoji-regex", + "is-fullwidth-code-point", + "strip-ansi" + ] + }, "string_decoder@1.3.0": { "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dependencies": [ - "safe-buffer" + "safe-buffer@5.2.1" + ] + }, + "strip-ansi@6.0.1": { + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": [ + "ansi-regex" + ] + }, + "text-hex@1.0.0": { + "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" + }, + "tiny-set-immediate@1.0.2": { + "integrity": "sha512-EVbaM4zXFWS4CIqVoPzY7XIioQ5LU1p49AHizwPO1KyFyp/gxy5SA8mDmfDVl/2WLQiHgUL+esO6Ig+KhpUxUw==" + }, + "tr46@0.0.3": { + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "triple-beam@1.4.1": { + "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==" + }, + "undici-types@5.26.5": { + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "util-deprecate@1.0.2": { + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "uuid@11.1.1": { + "integrity": "sha512-vIYxrBCC/N/K+Js3qSN88go7kIfNPssr/hHCesKCQNAjmgvYS2oqr69kIufEG+O4+PfezOH4EbIeHCfFov8ZgQ==", + "bin": true + }, + "validate-iri@1.0.1": { + "integrity": "sha512-gLXi7351CoyVVQw8XE5sgpYawRKatxE7kj/xmCxXOZS1kMdtcqC0ILIqLuVEVnAUQSL/evOGG3eQ+8VgbdnstA==" + }, + "webidl-conversions@3.0.1": { + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url@5.0.0": { + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": [ + "tr46", + "webidl-conversions" + ] + }, + "winston-transport@4.9.0": { + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", + "dependencies": [ + "logform", + "readable-stream@3.6.2", + "triple-beam" + ] + }, + "winston@3.19.0": { + "integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==", + "dependencies": [ + "@colors/colors", + "@dabh/diagnostics", + "async", + "is-stream", + "logform", + "one-time", + "readable-stream@3.6.2", + "safe-stable-stringify", + "stack-trace", + "triple-beam", + "winston-transport" + ] + }, + "wrap-ansi@7.0.0": { + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": [ + "ansi-styles", + "string-width", + "strip-ansi" + ] + }, + "xmlchars@2.2.0": { + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, + "y18n@5.0.8": { + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, + "yargs-parser@21.1.1": { + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + }, + "yargs@17.7.3": { + "integrity": "sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==", + "dependencies": [ + "cliui", + "escalade", + "get-caller-file", + "require-directory", + "string-width", + "y18n", + "yargs-parser" ] } }, @@ -83,7 +3516,8 @@ "dependencies": [ "jsr:@std/assert@1", "jsr:@std/path@1", - "npm:n3@2.0.3" + "npm:n3@2.0.3", + "npm:shacl-engine@1.1.2" ] } } diff --git a/notes/ont.dev.release-runbook.md b/notes/ont.dev.release-runbook.md index cbed635f..d451d16f 100644 --- a/notes/ont.dev.release-runbook.md +++ b/notes/ont.dev.release-runbook.md @@ -78,7 +78,24 @@ python3 -m pip install --requirement requirements-shacl.txt deno task ci ``` -The Python dependency executes the shipped SHACL-SPARQL constraints against positive and negative fixtures. Deno tests continue to own RDF graph guardrails and targeted structural checks; both layers are required because a present-but-broken `sh:select` query is not useful validation. +The Python dependency executes the shipped SHACL-SPARQL constraints against the canonical positive and negative fixture corpus. `deno task ci` also runs the same corpus through pinned `shacl-engine` over a minimal N3 RDF/JS dataset. Deno tests continue to own RDF graph guardrails and targeted structural checks; all layers are required because a present-but-broken `sh:select` query is not useful validation. + +For a release candidate, emit semantic receipts from PySHACL and the public JavaScript runner, run pinned Apache Jena SHACL rather than treating Riot as a SHACL engine, obtain the private Stagecraft adapter receipt when that consumer is an explicit release gate, and compare all receipts: + +```sh +python3 scripts/validate_shacl.py --output /tmp/sflo-pyshacl.json +deno task conformance:js -- --output /tmp/sflo-shacl-engine.json +deno task conformance:jena -- --output /tmp/sflo-jena.json +deno task conformance:compare -- /tmp/sflo-pyshacl.json /tmp/sflo-shacl-engine.json /tmp/sflo-jena.json +``` + +When a private Stagecraft adapter is an explicit gate for the release, produce that receipt first and include it in the comparison: + +```sh +deno task conformance:compare -- /tmp/sflo-pyshacl.json /tmp/sflo-shacl-engine.json /tmp/sflo-stagecraft-shacl.json /tmp/sflo-jena.json +``` + +The Jena task is pinned to Apache Jena SHACL 6.2.0 and refuses a different version. The execution profile unions the checked-out core ontology with each case, uses the checked-out shapes unchanged, enables no inference, reports warnings explicitly, and performs no network loads. Compare normalized conformance, severity, focus node, result path, constraint component, and message key; serialized report bytes, ordering, and engine blank-node identifiers are not comparison surfaces. Any unexpected conformance or severity disagreement blocks publication. Record the candidate commit, engine versions, commands, matrix, adjudications, and receipt digests in an `ont.report.*` note such as [[ont.report.2026-08-21-v0.4.0-shacl-conformance]]. Validate Turtle syntax: @@ -86,6 +103,8 @@ Validate Turtle syntax: riot --validate semantic-flow-core-ontology.ttl semantic-flow-core-shacl.ttl semantic-flow-config-ontology.ttl semantic-flow-job-ontology.ttl semantic-flow-prov-ontology.ttl ``` +Riot is syntax preflight only; it does not satisfy the Apache Jena SHACL execution gate. + Check for whitespace damage: ```sh diff --git a/notes/ont.release-notes.v0.4.0.md b/notes/ont.release-notes.v0.4.0.md new file mode 100644 index 00000000..3e61da49 --- /dev/null +++ b/notes/ont.release-notes.v0.4.0.md @@ -0,0 +1,79 @@ +--- +id: z6p1m8v4k2r9x5t3n7h0bca +title: 'SFLO Ontology Release Notes v0.4.0' +desc: 'v0.4.0: exact SHA-256 digest bearer, expectation, and observation semantics; extraction provenance; and executable cross-engine SHACL conformance' +created: 1787367600000 +--- + +## Summary + +`v0.4.0` is a breaking pre-1.0 semantic and validation release. It defines an exact interoperable SHA-256 content-digest contract, separates standing byte claims from pre-resolution expectations and event observations, narrows direct digest bearers to exact manifestations and located files, adds artifact-level extraction provenance, and makes the shipped digest SHACL executable across four independent validator paths. + +This is a minor release because existing data that relied on generic digest syntax, repository-locator digest placement, or a broad `rdfs:Resource` domain can now violate SHACL or infer a different class. No transition aliases or compatibility profile are provided. + +## Release Surfaces + +The tagged source contains: + +- `semantic-flow-core-ontology.ttl` +- `semantic-flow-core-shacl.ttl` +- `semantic-flow-config-ontology.ttl` +- `semantic-flow-job-ontology.ttl` +- `semantic-flow-prov-ontology.ttl` + +The `/sflo/` GitHub Pages publication covers core, config, and core SHACL at these release payload URLs: + +- `https://semantic-flow.github.io/sflo/ontology/releases/v0.4.0/ttl/semantic-flow-core-ontology.ttl` +- `https://semantic-flow.github.io/sflo/ontology/shacl/releases/v0.4.0/ttl/semantic-flow-core-shacl.ttl` +- `https://semantic-flow.github.io/sflo/config/releases/v0.4.0/ttl/semantic-flow-config-ontology.ttl` + +The job and provenance ontologies remain source-only because their namespaces are outside the `/sflo/` project Pages base and their publication topology is still unsettled. + +## Highlights + +- **One exact digest wire form.** `hasContentDigest`, `expectsContentDigest`, and `observedContentDigest` support exactly `sha256:<64 lowercase hexadecimal digits>` as `xsd:string` in this release. +- **Release-extensible method vocabulary.** `ContentDigestMethod`, `contentDigestMethod_sha256`, and functional `contentDigestMethodToken "sha256"` publish the method supported by the release without turning methods or digest values into artifacts. +- **Explicit digest bearers.** `ContentDigestBearer` is now the domain of `hasContentDigest`. `ArtifactManifestation` and `LocatedFile` are direct bearer subclasses; downstream vocabularies may define narrower bearer subclasses for other resources with one determinate or retrievable byte stream. +- **Exact manifestation identity.** One `ArtifactManifestation` denotes one exact byte sequence. Byte-changing formatting, line-ending, compression, packaging, canonicalization, or serialization changes create another manifestation. Multiple located files can provide one manifestation only as byte-identical replicas. +- **Extraction provenance.** New object property `extractedFrom` specializes `prov:wasDerivedFrom` for content produced by extraction from a governing artifact or known historical state. Citation, translation, revision, and new-edition relations are explicitly outside this predicate. +- **Cross-engine executable SHACL.** One SFLO-owned eleven-case corpus runs through PySHACL 0.40.0, public `shacl-engine` 1.1.2 over N3/RDF/JS, Stagecraft's exact `shacl-engine`/Oxigraph adapter, and Apache Jena SHACL 6.2.0. [[ont.report.2026-08-21-v0.4.0-shacl-conformance]] records the agreeing semantic receipts. + +## Breaking Or Changed Semantic And Validation Behavior + +- **Domain inference changed.** `hasContentDigest` no longer has domain `rdfs:Resource`; its domain is `ContentDigestBearer`. Using the property entails bearer status. Consumers should still assert the narrower known bearer type when one exists. +- **Direct bearer scope is narrow.** `ArtifactManifestation` and `LocatedFile` are direct bearer types. `DigitalArtifact`, `ArtifactHistory`, `HistoricalState`, and repository locator classes do not become bearers merely through their existing class membership. +- **DigitalArtifact and standalone file identity is clarified.** A `LocatedFile` may stand alone when no governing `DigitalArtifact` is named or described, and exact-facet predicates may refer to it directly. This does not make the file IRI the identity of a `DigitalArtifact`; predicates requiring the governing artifact must still target one. +- **Manifestation and file claims must agree.** When an `ArtifactManifestation` and a linked `LocatedFile` both assert a digest for the same method, different values are a SHACL Violation. A mismatch means the file does not truthfully provide that manifestation's exact bytes. +- **Same-method uniqueness is enforced.** One subject may not assert multiple distinct `hasContentDigest` values for the same method, and one observation may not assert multiple distinct `observedContentDigest` values for the same method. Future simultaneous different-method values remain possible when a later release adds methods. +- **Digest grammar is fail-closed.** The former generic `algorithm:value` Warning is replaced by the exact lowercase SHA-256 pattern at Violation severity for standing, expected, and observed digest properties. Uppercase hex, wrong lengths, non-hex characters, missing prefixes, and unsupported algorithms now violate. +- **Repository locators carry no digest property.** `RepositorySourceLocator` and `RepositorySourceFloatingLocator` must not carry `hasContentDigest`, `expectsContentDigest`, or `observedContentDigest`. A pre-existing requirement belongs on the `ArtifactResolutionSpec`; computed evidence belongs on an `ArtifactResolutionObservation`. +- **Expected and observed lifecycle is explicit.** `expectsContentDigest` is supplied before resolution by a caller, authored policy, or durable binding. `observedContentDigest` is computed from bytes during an event. A computed observation must not be promoted into a retroactive expectation. +- **Expected/observed mismatch remains a runtime operation boundary.** Runtimes must fail before successful use or persistence when a current expectation and the observed bytes disagree. SHACL deliberately does not compare a mutable current expectation against every appendable historical observation, because a later expectation update must not invalidate honest earlier evidence. +- **Observed constraints target property subjects.** Digest grammar, required observation spec, timestamp, and same-method checks now fire for every subject of `observedContentDigest`, even when the subject lacks an explicit `ArtifactResolutionObservation` type and no RDFS inference is enabled. +- **Subject-typing advisories are portable Warnings.** A standing digest subject should be explicitly typed `ContentDigestBearer` or a subclass, and an expected digest subject should be an `ArtifactResolutionSpec` or subclass. Dedicated warning node shapes carry the severity consistently across engines without weakening lexical or placement violations. +- **Manifestation-targeted local resolution is recognized as exact.** A local resolution spec with `targetManifestation` no longer receives the generic missing-mode/evidence warning. +- **Release metadata is self-conforming.** Release payload metadata now explicitly types the Turtle manifestation and its located file, so the ontology-plus-fixture execution profile validates without unrelated release-state warnings. + +Existing canonical digest claims on `LocatedFile` remain valid. Moving or copying those claims to `ArtifactManifestation` is optional unless a downstream profile requires manifestation-level identity; if both levels assert the method, they must match. + +## Validation + +Commands required and run for this release candidate: + +- `deno task release:set-version -- --version 0.4.0 --issued 2026-08-21` +- `deno task ci` for formatting, lint, type checks, 30 Deno guardrails, 11 PySHACL fixtures, public `shacl-engine` conformance, and release validation +- GitHub CI pinned to Deno 2.9.2; Deno 2.7.14 cannot resolve the public SHACL-SPARQL adapter's transitive `cross-fetch/polyfill` entry +- `deno task conformance:jena` with Apache Jena SHACL 6.2.0 +- the Stagecraft `createPopulationValidator` receipt at Stagecraft commit `b83fcf6e22e81a4c74ba371ef22706003cb1baa7`, using `shacl-engine` 1.1.2 and Oxigraph 0.5.9 +- `deno task conformance:compare` over all four receipt bundles; all eleven normalized semantic receipts agreed +- `riot --validate` over all five active Turtle files and the canonical fixture corpus; Riot was syntax preflight only +- `deno task release:validate -- --version 0.4.0` and `--require-tag` after tagging +- `git diff --check` + +## Known Limitations + +- Pre-1.0 modeling remains unstable; later minor releases may add methods or narrow vocabulary without compatibility aliases. +- SHA-256 is the only supported digest method. RDF graph canonicalization, directory/tree digests, archive digests, signatures, and structured checksum nodes are out of scope. +- SHACL checks assertion placement and consistency but does not retrieve bytes or recompute hashes. Runtime operations remain responsible for exact-byte hashing and fail-closed expectation verification. +- Failed-attempt provenance is not modeled in this release. +- The job and provenance ontologies remain tagged source only and are not published under `/sflo/` Pages. diff --git a/notes/ont.report.2026-08-21-v0.4.0-shacl-conformance.md b/notes/ont.report.2026-08-21-v0.4.0-shacl-conformance.md new file mode 100644 index 00000000..6f3090ad --- /dev/null +++ b/notes/ont.report.2026-08-21-v0.4.0-shacl-conformance.md @@ -0,0 +1,75 @@ +--- +id: q7m2x9v4k1r8p5t3n6h0bca +title: v0.4.0 Cross-Engine SHACL Conformance +desc: 'Release-candidate semantic receipts for the SFLO content-digest corpus under PySHACL, public shacl-engine, the private Stagecraft adapter, and Apache Jena SHACL' +created: 1787367600000 +--- + +## Scope + +This report records the completed release-candidate gate from [[ont.task.2026.2026-08-21_1048-cross-engine-shacl-conformance]] for the SFLO v0.4.0 content-digest contract. All engines executed the same eleven cases from `tests/shacl/content-digest/cases.json`, the checked-out `semantic-flow-core-ontology.ttl`, and the checked-out `semantic-flow-core-shacl.ttl` at SFLO commit `7d4933a939ae33492dfc0e5e54503f31b8ccd2a9`. + +## Execution Profile + +- Data graph: union of the checked-out core ontology and one canonical case. +- Shapes graph: checked-out `semantic-flow-core-shacl.ttl`, unchanged between engines. +- Inference: none. +- SHACL-SPARQL: enabled. +- Warnings: retained as results and compared explicitly. +- Network/imports: disabled; every graph came from the checked-out SFLO source tree. +- Comparison: normalized case conformance, maximum severity, focus node, result path, constraint component, and stable message key. Report byte serialization, result order, and blank-node identifiers were ignored. + +## Engines And Commands + +`SFLO_ROOT` denotes the root of the checked-out SFLO repository used for the receipt run. + +| Engine | Version and adapter | Command | +| --- | --- | --- | +| PySHACL | 0.40.0 over RDFlib, SFLO graph-union adapter | `/tmp/sflo-v0.4.0-shacl-venv/bin/python scripts/validate_shacl.py --output /tmp/sflo-v0.4.0-pyshacl.json` | +| Public JavaScript | `shacl-engine` 1.1.2 with `shacl-engine/sparql.js` over a minimal N3 RDF/JS dataset | `deno task conformance:js -- --output /tmp/sflo-v0.4.0-shacl-engine.json` | +| Stagecraft private adapter | `shacl-engine` 1.1.2 and Oxigraph 0.5.9 through Stagecraft `createPopulationValidator`; Stagecraft commit `b83fcf6e22e81a4c74ba371ef22706003cb1baa7` | `node /tmp/sflo-stagecraft-shacl-adapter.mjs "$SFLO_ROOT" /tmp/sflo-v0.4.0-stagecraft-shacl.json` | +| Apache Jena SHACL | 6.2.0, pinned and version-refusing | `deno task conformance:jena -- --output /tmp/sflo-v0.4.0-jena.json` | +| Comparator | SFLO normalized semantic comparator | `deno task conformance:compare -- /tmp/sflo-v0.4.0-pyshacl.json /tmp/sflo-v0.4.0-shacl-engine.json /tmp/sflo-v0.4.0-stagecraft-shacl.json /tmp/sflo-v0.4.0-jena.json` | + +The comparator returned: `Compared 4 engines across 11 cases at 7d4933a939ae33492dfc0e5e54503f31b8ccd2a9; all normalized receipts agree.` + +## Fixture Matrix + +| Case | Expected and observed outcome | Maximum severity | Stable result keys | +| --- | --- | --- | --- | +| `valid-manifestation-target-resolution` | conforms | none | none | +| `valid-manifestation-file` | conforms | none | none | +| `valid-downstream-bearer` | conforms | none | none | +| `valid-historical-observation-after-expectation-change` | conforms | none | none | +| `invalid-untyped-observed-grammar` | rejects | Violation | `observed-digest-grammar` | +| `invalid-standing-same-method` | rejects | Violation | `standing-same-method` | +| `invalid-manifestation-file-mismatch` | rejects | Violation | `manifestation-file-digest-mismatch` | +| `invalid-observed-same-method` | rejects | Violation | `observed-same-method` | +| `invalid-repository-standing-digest` | rejects | Violation | `repository-standing-digest`, `explicit-bearer-type` Warning | +| `invalid-repository-expected-observed` | rejects | Violation | `repository-expected-digest`, `repository-observed-digest`, `expected-digest-spec-type` Warning | +| `warning-untyped-bearer` | rejects under the release warning policy | Warning | `explicit-bearer-type` | + +Every engine matched the manifest exactly after normalization. There were no unexplained differences in conformance, severity, focus node, result path, constraint component, or message key. + +## Adjudicated Portability Findings + +Three real source issues were corrected before the final agreeing run: + +- `shacl-engine` 1.1.2 compiles only one `sh:sparql` constraint reliably per node shape. The digest grammar/uniqueness and explicit-bearer advisory now live on separate source node shapes with the same target. No engine-specific shape rewrite is used. +- Warning severity had been attached to nested `sh:sparql` constraint nodes, where PySHACL applied the default Violation severity. The explicit-bearer and expected-digest subject-typing advisories now carry `sh:severity sh:Warning` on dedicated node shapes; violation-level lexical and placement constraints remain violations. +- The core ontology release state pointed at an untyped manifestation with no located-file link, so ontology-plus-case validation produced an unrelated warning. Release manifestation and located-file metadata are now explicit and self-conforming. + +The public JavaScript runner uses Deno 2.9.2 and its physical npm compatibility directory because `shacl-engine/sparql.js` does not resolve under cache-only mode. The previous Deno 2.7.14 CI pin also fails to resolve the plugin's transitive `cross-fetch/polyfill` entry even in physical mode, so ordinary SFLO CI now pins 2.9.2. The realized local dependency tree was 75 MiB. This is test/release tooling only; neither SFLO nor Weave adopted Oxigraph as runtime code. + +## Receipt Digests + +- PySHACL: `sha256:24fa2758dbfbaf6511a01fc500c108c24d61e4fb147418850c5bf3c339c09cc6` +- Public `shacl-engine`: `sha256:6184adae3ff0672721cbf293ea492fdbdbc17ba0e3fe90326242a211e4de7f7c` +- Stagecraft adapter: `sha256:7daa95c9f2eb4722097014053c439890406c22ab837fd21e24025aa49192a6de` +- Apache Jena SHACL: `sha256:060f9f1020aef61e88edc86668382027013b538800e14fba0e7698e995b07dd1` + +These digests bind the exact local JSON receipt files produced by the commands above. The durable semantic evidence is the engine/version/commit/profile/matrix and adjudication recorded in this note. + +## Gate Result + +PASS. Cross-engine conformance does not block SFLO v0.4.0 preparation. The gate must be rerun after any later change to the canonical fixture manifest, core ontology graph support used by the corpus, or core SHACL shapes. diff --git a/scripts/compare_shacl_receipts.ts b/scripts/compare_shacl_receipts.ts new file mode 100644 index 00000000..bd963a19 --- /dev/null +++ b/scripts/compare_shacl_receipts.ts @@ -0,0 +1,60 @@ +import type { + ShaclCaseReceipt, + ShaclReceiptBundle, +} from "./shacl_conformance.ts"; + +function comparable(cases: readonly ShaclCaseReceipt[]): string { + return JSON.stringify(cases); +} + +async function main(): Promise { + const paths = Deno.args[0] === "--" ? Deno.args.slice(1) : Deno.args; + if (paths.length < 2) { + throw new Error( + "Usage: deno task conformance:compare -- [...]", + ); + } + const bundles = await Promise.all( + paths.map(async (path) => + JSON.parse(await Deno.readTextFile(path)) as ShaclReceiptBundle + ), + ); + for (const bundle of bundles) { + if (bundle.schema !== "sflo.shacl-conformance-receipts.v1") { + throw new Error(`Unsupported receipt schema from ${bundle.engine.name}`); + } + } + const commits = new Set(bundles.map(({ sfloCommit }) => sfloCommit)); + if (commits.size !== 1) { + throw new Error( + `Receipt SFLO commits differ: ${[...commits].join(", ")}`, + ); + } + const engineIdentities = bundles.map(({ engine }) => JSON.stringify(engine)); + if (new Set(engineIdentities).size !== engineIdentities.length) { + throw new Error("Receipt bundles contain duplicate engine identities"); + } + const graphProfiles = new Set( + bundles.map(({ graphProfile }) => JSON.stringify(graphProfile)), + ); + if (graphProfiles.size !== 1) { + throw new Error("Receipt graph profiles differ"); + } + const baseline = comparable(bundles[0]!.cases); + for (const bundle of bundles.slice(1)) { + if (comparable(bundle.cases) !== baseline) { + throw new Error( + `Normalized SHACL receipts disagree: ${ + bundles[0]!.engine.name + } vs ${bundle.engine.name}`, + ); + } + } + console.log( + `Compared ${bundles.length} engines across ${ + bundles[0]!.cases.length + } cases at ${bundles[0]!.sfloCommit}; all normalized receipts agree.`, + ); +} + +if (import.meta.main) await main(); diff --git a/scripts/run_jena_shacl_conformance.ts b/scripts/run_jena_shacl_conformance.ts new file mode 100644 index 00000000..8626b27c --- /dev/null +++ b/scripts/run_jena_shacl_conformance.ts @@ -0,0 +1,186 @@ +import { DataFactory, Parser, type Quad, Store, type Term } from "n3"; +import { + assertReceiptMatchesCase, + currentGitCommit, + emitReceiptBundle, + loadShaclManifest, + localName, + maxSeverity, + messageKeyFor, + type NormalizedShaclResult, + outputPath, + receiptBundle, + semanticCaseReceipt, + type ShaclCaseReceipt, +} from "./shacl_conformance.ts"; + +const ROOT = new URL("../", import.meta.url).pathname.replace(/\/$/, ""); +const SHAPES_PATH = `${ROOT}/semantic-flow-core-shacl.ttl`; +const ONTOLOGY_PATH = `${ROOT}/semantic-flow-core-ontology.ttl`; +const CASES_ROOT = `${ROOT}/tests/shacl/content-digest`; +const EXPECTED_JENA_VERSION = "6.2.0"; +const SH = "http://www.w3.org/ns/shacl#"; + +function values( + graph: Store, + subject: Term, + predicate: string, +): Term[] { + return graph.getQuads( + subject, + DataFactory.namedNode(predicate), + null, + null, + ).map((quad: Quad) => quad.object); +} + +function one( + graph: Store, + subject: Term, + predicate: string, +): Term | undefined { + return values(graph, subject, predicate)[0]; +} + +async function jenaVersion(): Promise { + const output = await new Deno.Command("shacl", { + args: ["--version"], + stdout: "piped", + stderr: "piped", + }).output(); + const rendered = `${new TextDecoder().decode(output.stdout)}\n${ + new TextDecoder().decode(output.stderr) + }`; + const version = rendered.match(/Apache Jena SHACL version ([0-9.]+)/)?.[1]; + if (!output.success || version === undefined) { + throw new Error( + `Could not determine Apache Jena SHACL version: ${rendered}`, + ); + } + if (version !== EXPECTED_JENA_VERSION) { + throw new Error( + `Apache Jena SHACL ${EXPECTED_JENA_VERSION} is required; found ${version}`, + ); + } + return version; +} + +async function validateWithJena( + dataPath: string, +): Promise<{ rawConforms: boolean; graph: Store }> { + const output = await new Deno.Command("shacl", { + args: ["validate", "--shapes", SHAPES_PATH, "--data", dataPath], + stdout: "piped", + stderr: "piped", + }).output(); + if (!output.success) { + throw new Error( + `Jena SHACL failed: ${new TextDecoder().decode(output.stderr)}`, + ); + } + const graph = new Store( + new Parser({ format: "text/turtle" }).parse( + new TextDecoder().decode(output.stdout), + ), + ); + const conforms = graph.getQuads( + null, + DataFactory.namedNode(`${SH}conforms`), + null, + null, + )[0]?.object.value; + if (conforms !== "true" && conforms !== "false") { + throw new Error("Jena SHACL report omitted sh:conforms"); + } + return { rawConforms: conforms === "true", graph }; +} + +function normalizeResults( + graph: Store, + focusNamespace: string, + manifest: Awaited>, +): NormalizedShaclResult[] { + const resultNodes = graph.getQuads( + null, + DataFactory.namedNode(`${SH}result`), + null, + null, + ).map((quad: Quad) => quad.object); + return resultNodes.flatMap((result: Term) => { + const focus = one(graph, result, `${SH}focusNode`)?.value; + if (focus === undefined || !focus.startsWith(focusNamespace)) return []; + const severity = one(graph, result, `${SH}resultSeverity`)?.value; + const component = one( + graph, + result, + `${SH}sourceConstraintComponent`, + )?.value; + if (severity === undefined || component === undefined) { + throw new Error( + `Jena result ${result.value} omitted severity or component`, + ); + } + const messages = values(graph, result, `${SH}resultMessage`).map((term) => + term.value + ); + const path = one(graph, result, `${SH}resultPath`); + return [{ + severity: localName(severity) as NormalizedShaclResult["severity"], + focusNode: focus, + resultPath: path?.termType === "NamedNode" ? path.value : null, + constraintComponent: localName(component), + messageKey: messageKeyFor(manifest, messages), + }]; + }); +} + +async function main(): Promise { + const output = outputPath(Deno.args); + const manifest = await loadShaclManifest(ROOT); + const ontologyText = await Deno.readTextFile(ONTOLOGY_PATH); + const version = await jenaVersion(); + const tempDir = await Deno.makeTempDir({ prefix: "sflo-jena-shacl-" }); + const receipts: ShaclCaseReceipt[] = []; + try { + for (const fixture of manifest.cases) { + const caseText = await Deno.readTextFile( + `${CASES_ROOT}/${fixture.dataFile}`, + ); + const dataPath = `${tempDir}/${fixture.id}.ttl`; + await Deno.writeTextFile(dataPath, `${ontologyText}\n${caseText}`); + const { rawConforms, graph } = await validateWithJena(dataPath); + const results = normalizeResults( + graph, + manifest.focusNamespace, + manifest, + ); + const receipt = semanticCaseReceipt({ + caseId: fixture.id, + rawConforms, + conforms: results.length === 0, + maxSeverity: maxSeverity(results), + results, + }); + assertReceiptMatchesCase(receipt, fixture); + receipts.push(receipt); + } + } finally { + await Deno.remove(tempDir, { recursive: true }); + } + + await emitReceiptBundle( + receiptBundle({ + engine: { + name: "Apache Jena SHACL", + version, + adapter: "Jena shacl validate CLI over the ontology/case graph union", + }, + sfloCommit: await currentGitCommit(ROOT), + command: "deno task conformance:jena", + cases: receipts, + }), + output, + ); +} + +if (import.meta.main) await main(); diff --git a/scripts/run_shacl_engine_conformance.ts b/scripts/run_shacl_engine_conformance.ts new file mode 100644 index 00000000..d1874811 --- /dev/null +++ b/scripts/run_shacl_engine_conformance.ts @@ -0,0 +1,123 @@ +import { DataFactory, Parser, Store } from "n3"; +import { Validator } from "shacl-engine"; +import * as shaclSparql from "shacl-engine/sparql"; +import { + assertReceiptMatchesCase, + currentGitCommit, + emitReceiptBundle, + loadShaclManifest, + localName, + maxSeverity, + messageKeyFor, + type NormalizedShaclResult, + outputPath, + receiptBundle, + semanticCaseReceipt, + type ShaclCaseReceipt, +} from "./shacl_conformance.ts"; + +const ROOT = new URL("../", import.meta.url).pathname.replace(/\/$/, ""); +const SHAPES_PATH = `${ROOT}/semantic-flow-core-shacl.ttl`; +const ONTOLOGY_PATH = `${ROOT}/semantic-flow-core-ontology.ttl`; +const CASES_ROOT = `${ROOT}/tests/shacl/content-digest`; +const SHACL_ENGINE_VERSION = "1.1.2"; + +interface EngineResult { + constraintComponent?: { value?: string }; + focusNode?: { term?: { value?: string }; terms?: { value?: string }[] }; + message?: { value?: string }[]; + path?: { predicates?: { value?: string }[] }[] | null; + results?: EngineResult[]; + severity?: { value?: string }; +} + +function parseTurtle(contents: string): Store { + return new Store(new Parser({ format: "text/turtle" }).parse(contents)); +} + +function resultPath(result: EngineResult): string | null { + const predicates = (result.path ?? []).flatMap((segment) => + (segment.predicates ?? []).flatMap((term) => + term.value === undefined ? [] : [term.value] + ) + ); + return predicates.length === 1 ? predicates[0]! : null; +} + +function focusNode(result: EngineResult): string { + const value = result.focusNode?.term?.value ?? + result.focusNode?.terms?.[0]?.value; + if (value === undefined) throw new Error("SHACL result omitted a focus node"); + return value; +} + +function flatten(results: readonly EngineResult[]): EngineResult[] { + return results.flatMap(( + result, + ) => [result, ...flatten(result.results ?? [])]); +} + +async function main(): Promise { + const output = outputPath(Deno.args); + const manifest = await loadShaclManifest(ROOT); + const shapesText = await Deno.readTextFile(SHAPES_PATH); + const ontologyText = await Deno.readTextFile(ONTOLOGY_PATH); + const shapes = parseTurtle(shapesText); + const validator = new Validator(shapes, { + factory: DataFactory, + targetResolvers: shaclSparql.targetResolvers, + validations: shaclSparql.validations, + }); + + const receipts: ShaclCaseReceipt[] = []; + for (const fixture of manifest.cases) { + const caseText = await Deno.readTextFile( + `${CASES_ROOT}/${fixture.dataFile}`, + ); + const data = parseTurtle(`${ontologyText}\n${caseText}`); + const report = await validator.validate({ dataset: data }); + const normalized: NormalizedShaclResult[] = flatten( + report.results as EngineResult[], + ).flatMap((result) => { + const focus = focusNode(result); + if (!focus.startsWith(manifest.focusNamespace)) return []; + const messages = (result.message ?? []).flatMap((message) => + message.value === undefined ? [] : [message.value] + ); + return [{ + severity: localName( + result.severity?.value, + ) as NormalizedShaclResult["severity"], + focusNode: focus, + resultPath: resultPath(result), + constraintComponent: localName(result.constraintComponent?.value), + messageKey: messageKeyFor(manifest, messages), + }]; + }); + const receipt = semanticCaseReceipt({ + caseId: fixture.id, + rawConforms: report.conforms, + conforms: normalized.length === 0, + maxSeverity: maxSeverity(normalized), + results: normalized, + }); + assertReceiptMatchesCase(receipt, fixture); + receipts.push(receipt); + } + + await emitReceiptBundle( + receiptBundle({ + engine: { + name: "shacl-engine", + version: SHACL_ENGINE_VERSION, + adapter: "SFLO minimal N3 RDF/JS dataset with shacl-engine/sparql.js", + }, + sfloCommit: await currentGitCommit(ROOT), + command: "deno task conformance:js", + cases: receipts, + }), + output, + ); +} + +if (import.meta.main) await main(); diff --git a/scripts/shacl_conformance.ts b/scripts/shacl_conformance.ts new file mode 100644 index 00000000..2796034e --- /dev/null +++ b/scripts/shacl_conformance.ts @@ -0,0 +1,225 @@ +export type ShaclSeverity = "Info" | "Warning" | "Violation"; + +export interface NormalizedShaclResult { + severity: ShaclSeverity; + focusNode: string; + resultPath: string | null; + constraintComponent: string; + messageKey: string; +} + +export interface ShaclCase { + id: string; + dataFile: string; + expectedConforms: boolean; + expectedMaxSeverity: ShaclSeverity | null; + expectedResults: NormalizedShaclResult[]; +} + +export interface ShaclManifest { + schema: "sflo.shacl-content-digest-cases.v1"; + focusNamespace: string; + messageKeys: { key: string; contains: string }[]; + cases: ShaclCase[]; +} + +export interface ShaclCaseReceipt { + caseId: string; + rawConforms: boolean; + conforms: boolean; + maxSeverity: ShaclSeverity | null; + results: NormalizedShaclResult[]; +} + +export interface ShaclReceiptBundle { + schema: "sflo.shacl-conformance-receipts.v1"; + engine: { + name: string; + version: string; + adapter: string; + }; + sfloCommit: string; + command: string; + graphProfile: { + data: "ontology-union-case"; + shapes: "semantic-flow-core-shacl.ttl"; + inference: "none"; + warnings: "reported"; + network: "disabled"; + }; + cases: ShaclCaseReceipt[]; +} + +const SEVERITY_RANK: Record = { + Info: 1, + Warning: 2, + Violation: 3, +}; + +export async function loadShaclManifest( + root = Deno.cwd(), +): Promise { + const manifest = JSON.parse( + await Deno.readTextFile( + `${root}/tests/shacl/content-digest/cases.json`, + ), + ) as ShaclManifest; + if (manifest.schema !== "sflo.shacl-content-digest-cases.v1") { + throw new Error(`Unsupported SHACL case schema: ${manifest.schema}`); + } + return manifest; +} + +export async function currentGitCommit(root = Deno.cwd()): Promise { + const command = new Deno.Command("git", { + args: ["rev-parse", "HEAD"], + clearEnv: true, + cwd: root, + stdout: "piped", + stderr: "piped", + }); + const output = await command.output(); + if (!output.success) { + throw new Error( + `Could not resolve SFLO commit: ${ + new TextDecoder().decode(output.stderr) + }`, + ); + } + return new TextDecoder().decode(output.stdout).trim(); +} + +export function messageKeyFor( + manifest: ShaclManifest, + messages: readonly string[], +): string { + const matches = manifest.messageKeys.filter(({ contains }) => + messages.some((message) => message.includes(contains)) + ); + if (matches.length !== 1) { + throw new Error( + `Expected one message-key match, found ${matches.length}: ${ + JSON.stringify(messages) + }`, + ); + } + return matches[0]!.key; +} + +export function localName(iri: string | undefined): string { + if (iri === undefined || iri.length === 0) return "unknown"; + const index = Math.max(iri.lastIndexOf("#"), iri.lastIndexOf("/")); + return iri.slice(index + 1); +} + +export function sortAndDeduplicateResults( + results: readonly NormalizedShaclResult[], +): NormalizedShaclResult[] { + const byIdentity = new Map(); + for (const result of results) { + byIdentity.set(JSON.stringify(result), result); + } + return [...byIdentity.values()].sort((left, right) => + JSON.stringify(left).localeCompare(JSON.stringify(right)) + ); +} + +export function maxSeverity( + results: readonly NormalizedShaclResult[], +): ShaclSeverity | null { + let maximum: ShaclSeverity | null = null; + for (const { severity } of results) { + if ( + maximum === null || SEVERITY_RANK[severity] > SEVERITY_RANK[maximum] + ) { + maximum = severity; + } + } + return maximum; +} + +export function assertReceiptMatchesCase( + receipt: ShaclCaseReceipt, + expected: ShaclCase, +): void { + const expectedResults = sortAndDeduplicateResults(expected.expectedResults); + if (receipt.caseId !== expected.id) { + throw new Error( + `Receipt case ${receipt.caseId} does not match ${expected.id}`, + ); + } + if ( + receipt.rawConforms !== expected.expectedConforms || + receipt.conforms !== expected.expectedConforms + ) { + throw new Error( + `${expected.id}: expected conforms=${expected.expectedConforms}, raw=${receipt.rawConforms}, normalized=${receipt.conforms}`, + ); + } + if (receipt.maxSeverity !== expected.expectedMaxSeverity) { + throw new Error( + `${expected.id}: expected max severity ${expected.expectedMaxSeverity}, got ${receipt.maxSeverity}`, + ); + } + if (JSON.stringify(receipt.results) !== JSON.stringify(expectedResults)) { + throw new Error( + `${expected.id}: normalized results differ\nexpected=${ + JSON.stringify(expectedResults, null, 2) + }\nactual=${JSON.stringify(receipt.results, null, 2)}`, + ); + } +} + +export function receiptBundle( + options: Omit, +): ShaclReceiptBundle { + return { + schema: "sflo.shacl-conformance-receipts.v1", + graphProfile: { + data: "ontology-union-case", + shapes: "semantic-flow-core-shacl.ttl", + inference: "none", + warnings: "reported", + network: "disabled", + }, + ...options, + }; +} + +export function outputPath(args: readonly string[]): string | undefined { + const normalized = args[0] === "--" ? args.slice(1) : args; + if (normalized.length === 0) return undefined; + if ( + normalized.length === 2 && normalized[0] === "--output" && + normalized[1]!.length > 0 + ) { + return normalized[1]; + } + throw new Error("Usage: --output "); +} + +export async function emitReceiptBundle( + bundle: ShaclReceiptBundle, + path: string | undefined, +): Promise { + const rendered = `${JSON.stringify(bundle, null, 2)}\n`; + if (path === undefined) { + console.log( + `Executed ${bundle.cases.length} SHACL fixtures with ${bundle.engine.name} ${bundle.engine.version}.`, + ); + return; + } + await Deno.writeTextFile(path, rendered); + console.log( + `Wrote ${bundle.cases.length} ${bundle.engine.name} receipts to ${path}.`, + ); +} + +export function semanticCaseReceipt( + receipt: ShaclCaseReceipt, +): ShaclCaseReceipt { + return { + ...receipt, + results: sortAndDeduplicateResults(receipt.results), + }; +} diff --git a/scripts/validate_shacl.py b/scripts/validate_shacl.py index 068fba4d..bb069165 100644 --- a/scripts/validate_shacl.py +++ b/scripts/validate_shacl.py @@ -1,182 +1,185 @@ +import argparse +import json +import subprocess from pathlib import Path +from typing import Any +import pyshacl from pyshacl import validate -from rdflib import Graph +from rdflib import Graph, Namespace, URIRef ROOT = Path(__file__).resolve().parents[1] SHAPES_PATH = ROOT / "semantic-flow-core-shacl.ttl" ONTOLOGY_PATH = ROOT / "semantic-flow-core-ontology.ttl" -DIGEST_A = "sha256:" + "a" * 64 -DIGEST_B = "sha256:" + "b" * 64 - -PREFIXES = """ -@prefix ex: . -@prefix rdfs: . -@prefix sflo: . -""" - - -CASES = [ - ( - "manifestation target makes a local resolution spec exact", - True, - """ - ex:spec a sflo:ArtifactResolutionSpec ; - sflo:targetLocalRelativePath "source.ttl" ; - sflo:targetManifestation ex:manifestation . - ex:manifestation a sflo:ArtifactManifestation ; - sflo:locatedFileForManifestation ex:file . - ex:file a sflo:LocatedFile . - """, - None, - ), - ( - "valid manifestation and located-file claims", - True, - f""" - ex:manifestation a sflo:ArtifactManifestation ; - sflo:hasContentDigest "{DIGEST_A}" ; - sflo:locatedFileForManifestation ex:file . - ex:file a sflo:LocatedFile ; - sflo:hasContentDigest "{DIGEST_A}" . - """, - None, - ), - ( - "valid downstream bearer subclass", - True, - f""" - ex:CustomBearer rdfs:subClassOf sflo:ContentDigestBearer . - ex:content a ex:CustomBearer ; - sflo:hasContentDigest "{DIGEST_A}" . - """, - None, - ), - ( - "expected and historical observed values may differ in stored RDF", - True, - f""" - ex:requested a sflo:ArtifactResolutionSpec ; - sflo:expectsContentDigest "{DIGEST_A}" ; - sflo:hasResolutionObservation ex:observation . - ex:observation a sflo:ArtifactResolutionObservation ; - sflo:observedArtifactResolutionSpec [ a sflo:ArtifactResolutionSpec ] ; - sflo:observedContentDigest "{DIGEST_B}" . - """, - None, - ), - ( - "untyped malformed observed digest", - False, - """ - ex:observation sflo:observedContentDigest "sha256:XYZ" . - """, - "sflo:observedContentDigest values MUST use 'sha256:'", - ), - ( - "duplicate standing digest method", - False, - f""" - ex:file a sflo:LocatedFile ; - sflo:hasContentDigest "{DIGEST_A}", "{DIGEST_B}" . - """, - "MUST NOT declare different sflo:hasContentDigest values", - ), - ( - "manifestation and file mismatch without explicit manifestation type", - False, - f""" - ex:manifestation - sflo:hasContentDigest "{DIGEST_A}" ; - sflo:locatedFileForManifestation ex:file . - ex:file a sflo:LocatedFile ; - sflo:hasContentDigest "{DIGEST_B}" . - """, - "MUST NOT declare different content digests", - ), - ( - "duplicate observed digest method", - False, - f""" - ex:observation - sflo:observedArtifactResolutionSpec [ a sflo:ArtifactResolutionSpec ] ; - sflo:observedContentDigest "{DIGEST_A}", "{DIGEST_B}" . - """, - "MUST NOT declare different observed content-digest values", - ), - ( - "repository locator digest", - False, - f""" - ex:locator a sflo:RepositorySourceLocator ; - sflo:sourceRepositoryUrl "https://example.test/repository.git" ; - sflo:sourceRepositoryRef "main" ; - sflo:sourceRepositoryPath "source.ttl" ; - sflo:hasContentDigest "{DIGEST_A}" . - """, - "RepositorySourceLocator MUST NOT declare sflo:hasContentDigest", - ), - ( - "repository locator expected and observed digest leakage", - False, - f""" - ex:locator a sflo:RepositorySourceLocator ; - sflo:sourceRepositoryUrl "https://example.test/repository.git" ; - sflo:sourceRepositoryRef "main" ; - sflo:sourceRepositoryPath "source.ttl" ; - sflo:expectsContentDigest "{DIGEST_A}" ; - sflo:observedArtifactResolutionSpec [ a sflo:ArtifactResolutionSpec ] ; - sflo:observedContentDigest "{DIGEST_A}" . - """, - "RepositorySourceLocator MUST NOT declare sflo:observedContentDigest", - ), - ( - "standing digest without an explicit bearer type", - False, - f""" - ex:content sflo:hasContentDigest "{DIGEST_A}" . - """, - "SHOULD be explicitly typed sflo:ContentDigestBearer", - ), -] - - -def parse_turtle(contents: str) -> Graph: - graph = Graph() - graph.parse(data=PREFIXES + contents, format="turtle") - return graph +CASES_ROOT = ROOT / "tests" / "shacl" / "content-digest" +MANIFEST_PATH = CASES_ROOT / "cases.json" +SH = Namespace("http://www.w3.org/ns/shacl#") +SEVERITY_RANK = {"Info": 1, "Warning": 2, "Violation": 3} + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser() + parser.add_argument("--output", type=Path) + return parser.parse_args() + + +def local_name(value: URIRef) -> str: + iri = str(value) + return iri.rsplit("#", 1)[-1].rsplit("/", 1)[-1] + + +def load_manifest() -> dict[str, Any]: + manifest = json.loads(MANIFEST_PATH.read_text()) + if manifest["schema"] != "sflo.shacl-content-digest-cases.v1": + raise RuntimeError(f"Unsupported case schema: {manifest['schema']}") + return manifest + + +def message_key(manifest: dict[str, Any], messages: list[str]) -> str: + matches = [ + entry["key"] + for entry in manifest["messageKeys"] + if any(entry["contains"] in message for message in messages) + ] + if len(matches) != 1: + raise RuntimeError( + f"Expected one message-key match, found {len(matches)}: {messages!r}" + ) + return matches[0] + + +def normalized_results( + report: Graph, + manifest: dict[str, Any], +) -> list[dict[str, Any]]: + results: dict[str, dict[str, Any]] = {} + for report_node in report.subjects(SH.result, None): + for result in report.objects(report_node, SH.result): + focus = report.value(result, SH.focusNode) + if focus is None or not str(focus).startswith(manifest["focusNamespace"]): + continue + severity = report.value(result, SH.resultSeverity) + component = report.value(result, SH.sourceConstraintComponent) + if not isinstance(severity, URIRef) or not isinstance(component, URIRef): + raise RuntimeError(f"Incomplete SHACL result: {result}") + path = report.value(result, SH.resultPath) + messages = [str(value) for value in report.objects(result, SH.resultMessage)] + normalized = { + "severity": local_name(severity), + "focusNode": str(focus), + "resultPath": str(path) if isinstance(path, URIRef) else None, + "constraintComponent": local_name(component), + "messageKey": message_key(manifest, messages), + } + results[json.dumps(normalized, sort_keys=True)] = normalized + return sorted(results.values(), key=lambda value: json.dumps(value, sort_keys=True)) + + +def max_severity(results: list[dict[str, Any]]) -> str | None: + if not results: + return None + return max( + (result["severity"] for result in results), + key=lambda severity: SEVERITY_RANK[severity], + ) + + +def assert_expected(receipt: dict[str, Any], fixture: dict[str, Any]) -> None: + expected_results = sorted( + fixture["expectedResults"], + key=lambda value: json.dumps(value, sort_keys=True), + ) + if receipt["rawConforms"] != fixture["expectedConforms"]: + raise RuntimeError( + f"{fixture['id']}: expected raw conforms={fixture['expectedConforms']}, " + f"got {receipt['rawConforms']}" + ) + if receipt["conforms"] != fixture["expectedConforms"]: + raise RuntimeError( + f"{fixture['id']}: expected normalized conforms=" + f"{fixture['expectedConforms']}, got {receipt['conforms']}" + ) + if receipt["maxSeverity"] != fixture["expectedMaxSeverity"]: + raise RuntimeError( + f"{fixture['id']}: expected max severity " + f"{fixture['expectedMaxSeverity']}, got {receipt['maxSeverity']}" + ) + if receipt["results"] != expected_results: + raise RuntimeError( + f"{fixture['id']}: normalized results differ\n" + f"expected={json.dumps(expected_results, indent=2)}\n" + f"actual={json.dumps(receipt['results'], indent=2)}" + ) + + +def git_commit() -> str: + return subprocess.run( + ["git", "rev-parse", "HEAD"], + cwd=ROOT, + check=True, + capture_output=True, + text=True, + ).stdout.strip() def main() -> None: + args = parse_args() + manifest = load_manifest() shapes = Graph().parse(SHAPES_PATH, format="turtle") ontology = Graph().parse(ONTOLOGY_PATH, format="turtle") + receipts: list[dict[str, Any]] = [] - failures: list[str] = [] - for name, expected_conforms, turtle, expected_message in CASES: - conforms, _, report_text = validate( - data_graph=parse_turtle(turtle), + for fixture in manifest["cases"]: + data = Graph() + data += ontology + data.parse(CASES_ROOT / fixture["dataFile"], format="turtle") + conforms, report, _ = validate( + data_graph=data, shacl_graph=shapes, - ont_graph=ontology, inference="none", advanced=True, allow_infos=False, allow_warnings=False, + do_owl_imports=False, + ) + results = normalized_results(report, manifest) + receipt = { + "caseId": fixture["id"], + "rawConforms": bool(conforms), + "conforms": len(results) == 0, + "maxSeverity": max_severity(results), + "results": results, + } + assert_expected(receipt, fixture) + receipts.append(receipt) + + bundle = { + "schema": "sflo.shacl-conformance-receipts.v1", + "engine": { + "name": "PySHACL", + "version": pyshacl.__version__, + "adapter": "SFLO rdflib graph union with PySHACL advanced features", + }, + "sfloCommit": git_commit(), + "command": "deno task test:shacl", + "graphProfile": { + "data": "ontology-union-case", + "shapes": "semantic-flow-core-shacl.ttl", + "inference": "none", + "warnings": "reported", + "network": "disabled", + }, + "cases": receipts, + } + if args.output is not None: + args.output.write_text(json.dumps(bundle, indent=2) + "\n") + print(f"Wrote {len(receipts)} PySHACL receipts to {args.output}.") + else: + print( + f"Executed {len(receipts)} SHACL fixtures with " + f"PySHACL {pyshacl.__version__}." ) - if bool(conforms) != expected_conforms: - failures.append( - f"{name}: expected conforms={expected_conforms}, got {conforms}\n{report_text}" - ) - continue - if expected_message is not None and expected_message not in report_text: - failures.append( - f"{name}: report omitted expected message {expected_message!r}\n{report_text}" - ) - - if failures: - raise SystemExit("\n\n".join(failures)) - - print(f"Executed {len(CASES)} SHACL fixtures with PySHACL.") if __name__ == "__main__": diff --git a/semantic-flow-config-ontology.ttl b/semantic-flow-config-ontology.ttl index b997750b..e2b5aeee 100644 --- a/semantic-flow-config-ontology.ttl +++ b/semantic-flow-config-ontology.ttl @@ -12,22 +12,27 @@ dcterms:title "Semantic Flow Config Ontology" ; dcterms:description "Vocabulary for Semantic Flow configuration resources, authored config attachment, resolver policy, derived resolved-config records, and resource-page presentation policy. Content composition terms such as page regions, page sources, and direct target/current-byte locators remain in the core ontology." ; dcterms:creator ; - dcat:hasVersion ; + dcat:hasVersion ; dcterms:modified "2026-05-27"^^xsd:date ; - owl:versionIRI ; + owl:versionIRI ; vann:preferredNamespacePrefix "sfcfg" ; vann:preferredNamespaceUri "https://semantic-flow.github.io/sflo/config/" . - + a owl:Ontology, sflo:HistoricalState ; dcat:isVersionOf ; - dcterms:issued "2026-08-01"^^xsd:date ; - owl:versionInfo "0.3.0" ; - schema:contentUrl ; - sflo:hasManifestation . - - - dcat:downloadURL . + dcterms:issued "2026-08-21"^^xsd:date ; + owl:versionInfo "0.4.0" ; + schema:contentUrl ; + sflo:hasManifestation . + + + a sflo:ArtifactManifestation ; + dcat:downloadURL ; + sflo:locatedFileForManifestation . + + + a sflo:LocatedFile . ################################################################# ################################################################# diff --git a/semantic-flow-core-ontology.ttl b/semantic-flow-core-ontology.ttl index 86816364..1f008750 100644 --- a/semantic-flow-core-ontology.ttl +++ b/semantic-flow-core-ontology.ttl @@ -14,22 +14,27 @@ dcterms:title "Semantic Flow Core Ontology" ; dcterms:description "The Semantic Flow Core Ontology defines the classes and properties needed by Semantic Meshes." ; dcterms:creator ; - dcat:hasVersion ; + dcat:hasVersion ; dcterms:modified "2026-05-19"^^xsd:date ; - owl:versionIRI ; + owl:versionIRI ; vann:preferredNamespacePrefix "sflo" ; vann:preferredNamespaceUri "https://semantic-flow.github.io/sflo/ontology/" . - + a owl:Ontology, ; dcat:isVersionOf ; - dcterms:issued "2026-08-01"^^xsd:date ; - owl:versionInfo "0.3.0" ; - schema:contentUrl ; - . - - - dcat:downloadURL . + dcterms:issued "2026-08-21"^^xsd:date ; + owl:versionInfo "0.4.0" ; + schema:contentUrl ; + . + + + a ; + dcat:downloadURL ; + . + + + a . ################################################################# ################################################################# diff --git a/semantic-flow-core-shacl.ttl b/semantic-flow-core-shacl.ttl index ca24f7dc..a647901b 100644 --- a/semantic-flow-core-shacl.ttl +++ b/semantic-flow-core-shacl.ttl @@ -16,23 +16,28 @@ rdf:type owl:Ontology; dcterms:description "SHACL shapes for validating Semantic Flow data structures and operational invariants."; dcterms:creator ; - dcat:hasVersion ; + dcat:hasVersion ; dcterms:modified "2026-05-19"^^xsd:date; vann:preferredNamespacePrefix "sflo-shacl"; vann:preferredNamespaceUri "https://semantic-flow.github.io/sflo/ontology/shacl/"; - owl:versionIRI ; - owl:versionInfo "0.3.0" . + owl:versionIRI ; + owl:versionInfo "0.4.0" . - + rdf:type owl:Ontology, sflo:HistoricalState; dcat:isVersionOf ; - dcterms:issued "2026-08-01"^^xsd:date; - owl:versionInfo "0.3.0"; - schema:contentUrl ; - sflo:hasManifestation . + dcterms:issued "2026-08-21"^^xsd:date; + owl:versionInfo "0.4.0"; + schema:contentUrl ; + sflo:hasManifestation . - - dcat:downloadURL . + + a sflo:ArtifactManifestation; + dcat:downloadURL ; + sflo:locatedFileForManifestation . + + + a sflo:LocatedFile . rdf:type sh:NodeShape; @@ -579,11 +584,17 @@ sh:select "PREFIX sflo: \nSELECT $this WHERE {\n $this sflo:hasContentDigest ?firstDigest, ?secondDigest .\n FILTER(STRBEFORE(STR(?firstDigest), ':') = STRBEFORE(STR(?secondDigest), ':'))\n FILTER(STR(?firstDigest) != STR(?secondDigest))\n}"; sh:severity sh:Violation ]; + sh:targetSubjectsOf sflo:hasContentDigest . + + + rdf:type sh:NodeShape; + rdfs:comment "A content-digest subject should declare its known bearer type explicitly while keeping ContentDigestBearer open to downstream subclasses."; + rdfs:label "content digest bearer typing"; + sh:severity sh:Warning; sh:sparql [ rdf:type sh:SPARQLConstraint; sh:message "A subject using sflo:hasContentDigest SHOULD be explicitly typed sflo:ContentDigestBearer or a subclass."; - sh:select "PREFIX rdfs: \nPREFIX sflo: \nSELECT $this WHERE {\n $this sflo:hasContentDigest ?digest .\n FILTER NOT EXISTS { $this a/rdfs:subClassOf* sflo:ContentDigestBearer }\n}"; - sh:severity sh:Warning + sh:select "PREFIX rdfs: \nPREFIX sflo: \nSELECT $this WHERE {\n $this sflo:hasContentDigest ?digest .\n FILTER NOT EXISTS { $this a/rdfs:subClassOf* sflo:ContentDigestBearer }\n}" ]; sh:targetSubjectsOf sflo:hasContentDigest . @@ -616,11 +627,17 @@ sh:pattern "^sha256:[0-9a-f]{64}$"; sh:severity sh:Violation ]; + sh:targetSubjectsOf sflo:expectsContentDigest . + + + rdf:type sh:NodeShape; + rdfs:comment "An expected digest should be attached to an ArtifactResolutionSpec or one of its subclasses."; + rdfs:label "expected content digest subject typing"; + sh:severity sh:Warning; sh:sparql [ rdf:type sh:SPARQLConstraint; sh:message "sflo:expectsContentDigest SHOULD be used on resources typed sflo:ArtifactResolutionSpec or a subclass such as sflo:ExtractionSource, sflo:ReferenceSource, sflo:ImportSource, or sflo:IntegrationSource."; - sh:select "PREFIX rdfs: \nPREFIX sflo: \nSELECT $this WHERE {\n $this sflo:expectsContentDigest ?digest .\n FILTER NOT EXISTS { $this a/rdfs:subClassOf* sflo:ArtifactResolutionSpec }\n}"; - sh:severity sh:Warning + sh:select "PREFIX rdfs: \nPREFIX sflo: \nSELECT $this WHERE {\n $this sflo:expectsContentDigest ?digest .\n FILTER NOT EXISTS { $this a/rdfs:subClassOf* sflo:ArtifactResolutionSpec }\n}" ]; sh:targetSubjectsOf sflo:expectsContentDigest . diff --git a/semantic-flow-job-ontology.ttl b/semantic-flow-job-ontology.ttl index c8136e12..5f54095e 100644 --- a/semantic-flow-job-ontology.ttl +++ b/semantic-flow-job-ontology.ttl @@ -15,22 +15,27 @@ dcterms:title "Semantic Flow Job Ontology" ; dcterms:description "The Semantic Flow Job ontology defines public Semantic Flow API vocabulary for jobs, targets, progress, results, errors, and job events." ; dcterms:creator ; - dcat:hasVersion ; + dcat:hasVersion ; dcterms:modified "2026-05-06"^^xsd:date ; - owl:versionIRI ; + owl:versionIRI ; vann:preferredNamespacePrefix "sfjob" ; vann:preferredNamespaceUri "https://semantic-flow.github.io/ontology/job/" . - + a owl:Ontology, sflo:HistoricalState ; dcat:isVersionOf ; - dcterms:issued "2026-08-01"^^xsd:date ; - owl:versionInfo "0.3.0" ; - schema:contentUrl ; - sflo:hasManifestation . - - - dcat:downloadURL . + dcterms:issued "2026-08-21"^^xsd:date ; + owl:versionInfo "0.4.0" ; + schema:contentUrl ; + sflo:hasManifestation . + + + a sflo:ArtifactManifestation ; + dcat:downloadURL ; + sflo:locatedFileForManifestation . + + + a sflo:LocatedFile . ################################################################# ################################################################# diff --git a/semantic-flow-prov-ontology.ttl b/semantic-flow-prov-ontology.ttl index fa5600f2..fb080973 100644 --- a/semantic-flow-prov-ontology.ttl +++ b/semantic-flow-prov-ontology.ttl @@ -14,22 +14,27 @@ dcterms:title "Semantic Flow Provenance Ontology" ; dcterms:description "The Semantic Flow Meta ontology currently defines optional provenance vocabulary for Semantic Flow resources and jobs, including provenance contexts, delegation chains, and agent-role assignments. It intentionally stays narrow and does not try to define general metadata beyond provenance." ; dcterms:creator ; - dcat:hasVersion ; + dcat:hasVersion ; dcterms:modified "2026-05-06"^^xsd:date ; - owl:versionIRI ; + owl:versionIRI ; vann:preferredNamespacePrefix "sfprov" ; vann:preferredNamespaceUri "https://semantic-flow.github.io/ontology/prov/" . - + a owl:Ontology, sflo:HistoricalState ; dcat:isVersionOf ; - dcterms:issued "2026-08-01"^^xsd:date ; - owl:versionInfo "0.3.0" ; - schema:contentUrl ; - sflo:hasManifestation . - - - dcat:downloadURL . + dcterms:issued "2026-08-21"^^xsd:date ; + owl:versionInfo "0.4.0" ; + schema:contentUrl ; + sflo:hasManifestation . + + + a sflo:ArtifactManifestation ; + dcat:downloadURL ; + sflo:locatedFileForManifestation . + + + a sflo:LocatedFile . ################################################################# ################################################################# diff --git a/tests/shacl/content-digest/cases.json b/tests/shacl/content-digest/cases.json new file mode 100644 index 00000000..7f8655ad --- /dev/null +++ b/tests/shacl/content-digest/cases.json @@ -0,0 +1,198 @@ +{ + "schema": "sflo.shacl-content-digest-cases.v1", + "focusNamespace": "https://example.test/", + "messageKeys": [ + { + "key": "observed-digest-grammar", + "contains": "sflo:observedContentDigest values MUST use 'sha256:'" + }, + { + "key": "standing-same-method", + "contains": "MUST NOT declare different sflo:hasContentDigest values" + }, + { + "key": "manifestation-file-digest-mismatch", + "contains": "MUST NOT declare different content digests" + }, + { + "key": "observed-same-method", + "contains": "MUST NOT declare different observed content-digest values" + }, + { + "key": "repository-standing-digest", + "contains": "RepositorySourceLocator MUST NOT declare sflo:hasContentDigest" + }, + { + "key": "repository-expected-digest", + "contains": "RepositorySourceLocator MUST NOT declare sflo:expectsContentDigest" + }, + { + "key": "repository-observed-digest", + "contains": "RepositorySourceLocator MUST NOT declare sflo:observedContentDigest" + }, + { + "key": "explicit-bearer-type", + "contains": "SHOULD be explicitly typed sflo:ContentDigestBearer" + }, + { + "key": "expected-digest-spec-type", + "contains": "sflo:expectsContentDigest SHOULD be used on resources typed sflo:ArtifactResolutionSpec" + } + ], + "cases": [ + { + "id": "valid-manifestation-target-resolution", + "dataFile": "valid-manifestation-target-resolution.ttl", + "expectedConforms": true, + "expectedMaxSeverity": null, + "expectedResults": [] + }, + { + "id": "valid-manifestation-file", + "dataFile": "valid-manifestation-file.ttl", + "expectedConforms": true, + "expectedMaxSeverity": null, + "expectedResults": [] + }, + { + "id": "valid-downstream-bearer", + "dataFile": "valid-downstream-bearer.ttl", + "expectedConforms": true, + "expectedMaxSeverity": null, + "expectedResults": [] + }, + { + "id": "valid-historical-observation-after-expectation-change", + "dataFile": "valid-historical-observation-after-expectation-change.ttl", + "expectedConforms": true, + "expectedMaxSeverity": null, + "expectedResults": [] + }, + { + "id": "invalid-untyped-observed-grammar", + "dataFile": "invalid-untyped-observed-grammar.ttl", + "expectedConforms": false, + "expectedMaxSeverity": "Violation", + "expectedResults": [ + { + "severity": "Violation", + "focusNode": "https://example.test/observation", + "resultPath": "https://semantic-flow.github.io/sflo/ontology/observedContentDigest", + "constraintComponent": "PatternConstraintComponent", + "messageKey": "observed-digest-grammar" + } + ] + }, + { + "id": "invalid-standing-same-method", + "dataFile": "invalid-standing-same-method.ttl", + "expectedConforms": false, + "expectedMaxSeverity": "Violation", + "expectedResults": [ + { + "severity": "Violation", + "focusNode": "https://example.test/file", + "resultPath": null, + "constraintComponent": "SPARQLConstraintComponent", + "messageKey": "standing-same-method" + } + ] + }, + { + "id": "invalid-manifestation-file-mismatch", + "dataFile": "invalid-manifestation-file-mismatch.ttl", + "expectedConforms": false, + "expectedMaxSeverity": "Violation", + "expectedResults": [ + { + "severity": "Violation", + "focusNode": "https://example.test/manifestation", + "resultPath": null, + "constraintComponent": "SPARQLConstraintComponent", + "messageKey": "manifestation-file-digest-mismatch" + } + ] + }, + { + "id": "invalid-observed-same-method", + "dataFile": "invalid-observed-same-method.ttl", + "expectedConforms": false, + "expectedMaxSeverity": "Violation", + "expectedResults": [ + { + "severity": "Violation", + "focusNode": "https://example.test/observation", + "resultPath": null, + "constraintComponent": "SPARQLConstraintComponent", + "messageKey": "observed-same-method" + } + ] + }, + { + "id": "invalid-repository-standing-digest", + "dataFile": "invalid-repository-standing-digest.ttl", + "expectedConforms": false, + "expectedMaxSeverity": "Violation", + "expectedResults": [ + { + "severity": "Violation", + "focusNode": "https://example.test/locator", + "resultPath": "https://semantic-flow.github.io/sflo/ontology/hasContentDigest", + "constraintComponent": "MaxCountConstraintComponent", + "messageKey": "repository-standing-digest" + }, + { + "severity": "Warning", + "focusNode": "https://example.test/locator", + "resultPath": null, + "constraintComponent": "SPARQLConstraintComponent", + "messageKey": "explicit-bearer-type" + } + ] + }, + { + "id": "invalid-repository-expected-observed", + "dataFile": "invalid-repository-expected-observed.ttl", + "expectedConforms": false, + "expectedMaxSeverity": "Violation", + "expectedResults": [ + { + "severity": "Violation", + "focusNode": "https://example.test/locator", + "resultPath": "https://semantic-flow.github.io/sflo/ontology/expectsContentDigest", + "constraintComponent": "MaxCountConstraintComponent", + "messageKey": "repository-expected-digest" + }, + { + "severity": "Violation", + "focusNode": "https://example.test/locator", + "resultPath": "https://semantic-flow.github.io/sflo/ontology/observedContentDigest", + "constraintComponent": "MaxCountConstraintComponent", + "messageKey": "repository-observed-digest" + }, + { + "severity": "Warning", + "focusNode": "https://example.test/locator", + "resultPath": null, + "constraintComponent": "SPARQLConstraintComponent", + "messageKey": "expected-digest-spec-type" + } + ] + }, + { + "id": "warning-untyped-bearer", + "dataFile": "warning-untyped-bearer.ttl", + "expectedConforms": false, + "expectedMaxSeverity": "Warning", + "expectedResults": [ + { + "severity": "Warning", + "focusNode": "https://example.test/content", + "resultPath": null, + "constraintComponent": "SPARQLConstraintComponent", + "messageKey": "explicit-bearer-type" + } + ] + } + ] +} diff --git a/tests/shacl/content-digest/invalid-manifestation-file-mismatch.ttl b/tests/shacl/content-digest/invalid-manifestation-file-mismatch.ttl new file mode 100644 index 00000000..1a4a4069 --- /dev/null +++ b/tests/shacl/content-digest/invalid-manifestation-file-mismatch.ttl @@ -0,0 +1,9 @@ +@prefix ex: . +@prefix sflo: . + +ex:manifestation a sflo:ContentDigestBearer ; + sflo:hasContentDigest "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ; + sflo:locatedFileForManifestation ex:file . + +ex:file a sflo:LocatedFile ; + sflo:hasContentDigest "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" . diff --git a/tests/shacl/content-digest/invalid-observed-same-method.ttl b/tests/shacl/content-digest/invalid-observed-same-method.ttl new file mode 100644 index 00000000..316db838 --- /dev/null +++ b/tests/shacl/content-digest/invalid-observed-same-method.ttl @@ -0,0 +1,8 @@ +@prefix ex: . +@prefix sflo: . + +ex:observation + sflo:observedArtifactResolutionSpec [ a sflo:ArtifactResolutionSpec ] ; + sflo:observedContentDigest + "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" . diff --git a/tests/shacl/content-digest/invalid-repository-expected-observed.ttl b/tests/shacl/content-digest/invalid-repository-expected-observed.ttl new file mode 100644 index 00000000..152dbb69 --- /dev/null +++ b/tests/shacl/content-digest/invalid-repository-expected-observed.ttl @@ -0,0 +1,10 @@ +@prefix ex: . +@prefix sflo: . + +ex:locator a sflo:RepositorySourceLocator ; + sflo:sourceRepositoryUrl "https://example.test/repository.git" ; + sflo:sourceRepositoryRef "main" ; + sflo:sourceRepositoryPath "source.ttl" ; + sflo:expectsContentDigest "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ; + sflo:observedArtifactResolutionSpec [ a sflo:ArtifactResolutionSpec ] ; + sflo:observedContentDigest "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" . diff --git a/tests/shacl/content-digest/invalid-repository-standing-digest.ttl b/tests/shacl/content-digest/invalid-repository-standing-digest.ttl new file mode 100644 index 00000000..449990d5 --- /dev/null +++ b/tests/shacl/content-digest/invalid-repository-standing-digest.ttl @@ -0,0 +1,8 @@ +@prefix ex: . +@prefix sflo: . + +ex:locator a sflo:RepositorySourceLocator ; + sflo:sourceRepositoryUrl "https://example.test/repository.git" ; + sflo:sourceRepositoryRef "main" ; + sflo:sourceRepositoryPath "source.ttl" ; + sflo:hasContentDigest "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" . diff --git a/tests/shacl/content-digest/invalid-standing-same-method.ttl b/tests/shacl/content-digest/invalid-standing-same-method.ttl new file mode 100644 index 00000000..cce7a904 --- /dev/null +++ b/tests/shacl/content-digest/invalid-standing-same-method.ttl @@ -0,0 +1,7 @@ +@prefix ex: . +@prefix sflo: . + +ex:file a sflo:LocatedFile ; + sflo:hasContentDigest + "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" . diff --git a/tests/shacl/content-digest/invalid-untyped-observed-grammar.ttl b/tests/shacl/content-digest/invalid-untyped-observed-grammar.ttl new file mode 100644 index 00000000..591ccbca --- /dev/null +++ b/tests/shacl/content-digest/invalid-untyped-observed-grammar.ttl @@ -0,0 +1,6 @@ +@prefix ex: . +@prefix sflo: . + +ex:observation + sflo:observedArtifactResolutionSpec [ a sflo:ArtifactResolutionSpec ] ; + sflo:observedContentDigest "sha256:XYZ" . diff --git a/tests/shacl/content-digest/valid-downstream-bearer.ttl b/tests/shacl/content-digest/valid-downstream-bearer.ttl new file mode 100644 index 00000000..1c8009cc --- /dev/null +++ b/tests/shacl/content-digest/valid-downstream-bearer.ttl @@ -0,0 +1,8 @@ +@prefix ex: . +@prefix rdfs: . +@prefix sflo: . + +ex:CustomBearer rdfs:subClassOf sflo:ContentDigestBearer . + +ex:content a ex:CustomBearer ; + sflo:hasContentDigest "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" . diff --git a/tests/shacl/content-digest/valid-historical-observation-after-expectation-change.ttl b/tests/shacl/content-digest/valid-historical-observation-after-expectation-change.ttl new file mode 100644 index 00000000..767662c7 --- /dev/null +++ b/tests/shacl/content-digest/valid-historical-observation-after-expectation-change.ttl @@ -0,0 +1,10 @@ +@prefix ex: . +@prefix sflo: . + +ex:requested a sflo:ArtifactResolutionSpec ; + sflo:expectsContentDigest "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ; + sflo:hasResolutionObservation ex:observation . + +ex:observation a sflo:ArtifactResolutionObservation ; + sflo:observedArtifactResolutionSpec [ a sflo:ArtifactResolutionSpec ] ; + sflo:observedContentDigest "sha256:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb" . diff --git a/tests/shacl/content-digest/valid-manifestation-file.ttl b/tests/shacl/content-digest/valid-manifestation-file.ttl new file mode 100644 index 00000000..bd5866dc --- /dev/null +++ b/tests/shacl/content-digest/valid-manifestation-file.ttl @@ -0,0 +1,9 @@ +@prefix ex: . +@prefix sflo: . + +ex:manifestation a sflo:ArtifactManifestation ; + sflo:hasContentDigest "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" ; + sflo:locatedFileForManifestation ex:file . + +ex:file a sflo:LocatedFile ; + sflo:hasContentDigest "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" . diff --git a/tests/shacl/content-digest/valid-manifestation-target-resolution.ttl b/tests/shacl/content-digest/valid-manifestation-target-resolution.ttl new file mode 100644 index 00000000..a89143c9 --- /dev/null +++ b/tests/shacl/content-digest/valid-manifestation-target-resolution.ttl @@ -0,0 +1,11 @@ +@prefix ex: . +@prefix sflo: . + +ex:spec a sflo:ArtifactResolutionSpec ; + sflo:targetLocalRelativePath "source.ttl" ; + sflo:targetManifestation ex:manifestation . + +ex:manifestation a sflo:ArtifactManifestation ; + sflo:locatedFileForManifestation ex:file . + +ex:file a sflo:LocatedFile . diff --git a/tests/shacl/content-digest/warning-untyped-bearer.ttl b/tests/shacl/content-digest/warning-untyped-bearer.ttl new file mode 100644 index 00000000..aacd1597 --- /dev/null +++ b/tests/shacl/content-digest/warning-untyped-bearer.ttl @@ -0,0 +1,4 @@ +@prefix ex: . +@prefix sflo: . + +ex:content sflo:hasContentDigest "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" . diff --git a/tests/shacl_guardrails_test.ts b/tests/shacl_guardrails_test.ts index 03d0dbc0..f6bdc6b0 100644 --- a/tests/shacl_guardrails_test.ts +++ b/tests/shacl_guardrails_test.ts @@ -20,8 +20,12 @@ const RDFS_SUB_PROPERTY_OF = const SHAPES = { ContentDigestLiteral: `${SFLO_SHACL_NAMESPACE}ContentDigestLiteralShape`, + ContentDigestBearerTyping: + `${SFLO_SHACL_NAMESPACE}ContentDigestBearerTypingShape`, ContentDigestMethod: `${SFLO_SHACL_NAMESPACE}ContentDigestMethodShape`, ExpectedContentDigest: `${SFLO_SHACL_NAMESPACE}ExpectedContentDigestShape`, + ExpectedContentDigestTyping: + `${SFLO_SHACL_NAMESPACE}ExpectedContentDigestTypingShape`, ManifestationLocatedFileDigestConsistency: `${SFLO_SHACL_NAMESPACE}ManifestationLocatedFileDigestConsistencyShape`, RepositorySourceLocator: @@ -131,8 +135,10 @@ Deno.test("core SHACL declares key source-binding and resolution-mode shapes", a assertNodeShape(quads, SHAPES.ReferenceLink); assertNodeShape(quads, SHAPES.ContentDigestLiteral); + assertNodeShape(quads, SHAPES.ContentDigestBearerTyping); assertNodeShape(quads, SHAPES.ContentDigestMethod); assertNodeShape(quads, SHAPES.ExpectedContentDigest); + assertNodeShape(quads, SHAPES.ExpectedContentDigestTyping); assertNodeShape(quads, SHAPES.ManifestationLocatedFileDigestConsistency); assertNodeShape(quads, SHAPES.RepositorySourceLocator); assertNodeShape(quads, SHAPES.ReferenceSource); @@ -378,6 +384,42 @@ Deno.test("content-digest SHACL declares bearer and verification consistency con SHAPES.ContentDigestLiteral, "MUST NOT declare different sflo:hasContentDigest values", ); + assert( + hasTriple( + quads, + SHAPES.ContentDigestBearerTyping, + SH.targetSubjectsOf, + TERMS.hasContentDigest, + ), + "explicit bearer guidance should target every hasContentDigest subject", + ); + assert( + hasTriple( + quads, + SHAPES.ContentDigestBearerTyping, + SH.severity, + SH.Warning, + ), + "explicit bearer guidance should remain advisory", + ); + assert( + hasTriple( + quads, + SHAPES.ExpectedContentDigestTyping, + SH.targetSubjectsOf, + TERMS.expectsContentDigest, + ), + "expected-digest typing guidance should target every expectsContentDigest subject", + ); + assert( + hasTriple( + quads, + SHAPES.ExpectedContentDigestTyping, + SH.severity, + SH.Warning, + ), + "expected-digest typing guidance should remain advisory", + ); assertSparqlViolation( quads, SHAPES.ManifestationLocatedFileDigestConsistency,