@comunica/bus-query-source-identify 4.4.2-alpha.49.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"@context": [
|
|
3
|
-
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/bus-query-source-identify/^
|
|
4
|
-
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/core/^
|
|
3
|
+
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/bus-query-source-identify/^5.0.0/components/context.jsonld",
|
|
4
|
+
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/core/^5.0.0/components/context.jsonld"
|
|
5
5
|
],
|
|
6
6
|
"@id": "npmd:@comunica/bus-query-source-identify",
|
|
7
7
|
"components": [
|
|
@@ -54,37 +54,37 @@
|
|
|
54
54
|
"genericTypeInstances": [
|
|
55
55
|
{
|
|
56
56
|
"@type": "ParameterRangeGenericTypeReference",
|
|
57
|
-
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^
|
|
57
|
+
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
|
|
58
58
|
},
|
|
59
59
|
{
|
|
60
60
|
"@type": "ParameterRangeGenericTypeReference",
|
|
61
|
-
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^
|
|
61
|
+
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
|
|
62
62
|
},
|
|
63
63
|
{
|
|
64
64
|
"@type": "ParameterRangeGenericTypeReference",
|
|
65
|
-
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^
|
|
65
|
+
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
|
|
66
66
|
},
|
|
67
67
|
{
|
|
68
68
|
"@type": "ParameterRangeGenericTypeReference",
|
|
69
|
-
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^
|
|
69
|
+
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
|
|
70
70
|
}
|
|
71
71
|
]
|
|
72
72
|
},
|
|
73
73
|
{
|
|
74
74
|
"@type": "ParameterRangeGenericTypeReference",
|
|
75
|
-
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^
|
|
75
|
+
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
|
|
76
76
|
},
|
|
77
77
|
{
|
|
78
78
|
"@type": "ParameterRangeGenericTypeReference",
|
|
79
|
-
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^
|
|
79
|
+
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
|
|
80
80
|
},
|
|
81
81
|
{
|
|
82
82
|
"@type": "ParameterRangeGenericTypeReference",
|
|
83
|
-
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^
|
|
83
|
+
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
|
|
84
84
|
},
|
|
85
85
|
{
|
|
86
86
|
"@type": "ParameterRangeGenericTypeReference",
|
|
87
|
-
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^
|
|
87
|
+
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
|
|
88
88
|
}
|
|
89
89
|
]
|
|
90
90
|
},
|
|
@@ -121,19 +121,19 @@
|
|
|
121
121
|
"genericTypeInstances": [
|
|
122
122
|
{
|
|
123
123
|
"@type": "ParameterRangeGenericTypeReference",
|
|
124
|
-
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^
|
|
124
|
+
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_I"
|
|
125
125
|
},
|
|
126
126
|
{
|
|
127
127
|
"@type": "ParameterRangeGenericTypeReference",
|
|
128
|
-
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^
|
|
128
|
+
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_T"
|
|
129
129
|
},
|
|
130
130
|
{
|
|
131
131
|
"@type": "ParameterRangeGenericTypeReference",
|
|
132
|
-
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^
|
|
132
|
+
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_O"
|
|
133
133
|
},
|
|
134
134
|
{
|
|
135
135
|
"@type": "ParameterRangeGenericTypeReference",
|
|
136
|
-
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^
|
|
136
|
+
"parameterRangeGenericType": "npmd:@comunica/actor-abstract-mediatyped/^5.0.0/components/ActorAbstractMediaTyped.jsonld#ActorAbstractMediaTyped__generic_TS"
|
|
137
137
|
}
|
|
138
138
|
]
|
|
139
139
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"@context": [
|
|
3
|
-
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/bus-query-source-identify/^
|
|
3
|
+
"https://linkedsoftwaredependencies.org/bundles/npm/@comunica/bus-query-source-identify/^5.0.0/components/context.jsonld"
|
|
4
4
|
],
|
|
5
5
|
"@id": "npmd:@comunica/bus-query-source-identify",
|
|
6
6
|
"@type": "Module",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"https://linkedsoftwaredependencies.org/bundles/npm/componentsjs/^6.0.0/components/context.jsonld",
|
|
4
4
|
{
|
|
5
5
|
"npmd": "https://linkedsoftwaredependencies.org/bundles/npm/",
|
|
6
|
-
"cbqsi": "npmd:@comunica/bus-query-source-identify/^
|
|
6
|
+
"cbqsi": "npmd:@comunica/bus-query-source-identify/^5.0.0/",
|
|
7
7
|
"ActorQuerySourceIdentify": {
|
|
8
8
|
"@id": "cbqsi:components/ActorQuerySourceIdentify.jsonld#ActorQuerySourceIdentify",
|
|
9
9
|
"@prefix": true,
|
package/lib/Utils.js
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.quadsToBindings = quadsToBindings;
|
|
4
|
+
exports.isTermVariable = isTermVariable;
|
|
5
|
+
exports.getVariables = getVariables;
|
|
6
|
+
exports.getDuplicateElementLinks = getDuplicateElementLinks;
|
|
7
|
+
exports.setMetadata = setMetadata;
|
|
8
|
+
exports.quadsMetadataToBindingsMetadata = quadsMetadataToBindingsMetadata;
|
|
9
|
+
exports.quadsOrderToBindingsOrder = quadsOrderToBindingsOrder;
|
|
10
|
+
exports.filterMatchingQuotedQuads = filterMatchingQuotedQuads;
|
|
4
11
|
const utils_iterator_1 = require("@comunica/utils-iterator");
|
|
5
12
|
const utils_metadata_1 = require("@comunica/utils-metadata");
|
|
6
13
|
const rdf_string_1 = require("rdf-string");
|
|
@@ -68,7 +75,6 @@ function quadsToBindings(quads, pattern, dataFactory, bindingsFactory, unionDefa
|
|
|
68
75
|
setMetadata(dataFactory, it, quads, elementVariables, variables, filterNonDefaultQuads || Boolean(duplicateElementLinks));
|
|
69
76
|
return it;
|
|
70
77
|
}
|
|
71
|
-
exports.quadsToBindings = quadsToBindings;
|
|
72
78
|
/**
|
|
73
79
|
* Check if a term is a variable.
|
|
74
80
|
* @param {RDF.Term} term An RDF term.
|
|
@@ -77,7 +83,6 @@ exports.quadsToBindings = quadsToBindings;
|
|
|
77
83
|
function isTermVariable(term) {
|
|
78
84
|
return term.termType === 'Variable';
|
|
79
85
|
}
|
|
80
|
-
exports.isTermVariable = isTermVariable;
|
|
81
86
|
/**
|
|
82
87
|
* Get all variables in the given pattern.
|
|
83
88
|
* No duplicates are returned.
|
|
@@ -86,7 +91,6 @@ exports.isTermVariable = isTermVariable;
|
|
|
86
91
|
function getVariables(pattern) {
|
|
87
92
|
return (0, rdf_terms_1.uniqTerms)((0, rdf_terms_1.getTermsNested)(pattern).filter(isTermVariable));
|
|
88
93
|
}
|
|
89
|
-
exports.getVariables = getVariables;
|
|
90
94
|
/**
|
|
91
95
|
* A helper function to find a hash with quad elements that have duplicate variables.
|
|
92
96
|
*
|
|
@@ -135,7 +139,6 @@ function getDuplicateElementLinks(pattern) {
|
|
|
135
139
|
}
|
|
136
140
|
return duplicateElementLinks;
|
|
137
141
|
}
|
|
138
|
-
exports.getDuplicateElementLinks = getDuplicateElementLinks;
|
|
139
142
|
/**
|
|
140
143
|
* Set the metadata of the bindings stream derived from the metadata of the quads stream.
|
|
141
144
|
* @param dataFactory The data factory.
|
|
@@ -169,7 +172,6 @@ function setMetadata(dataFactory, bindings, quads, elementVariables, variables,
|
|
|
169
172
|
quads.getProperty('metadata', getMetadataCb);
|
|
170
173
|
}
|
|
171
174
|
}
|
|
172
|
-
exports.setMetadata = setMetadata;
|
|
173
175
|
/**
|
|
174
176
|
* Convert the metadata of quads to the metadata of bindings.
|
|
175
177
|
* @param dataFactory The data factory.
|
|
@@ -192,7 +194,6 @@ function quadsMetadataToBindingsMetadata(dataFactory, metadataQuads, elementVari
|
|
|
192
194
|
variables: variables.map(variable => ({ variable, canBeUndef: false })),
|
|
193
195
|
};
|
|
194
196
|
}
|
|
195
|
-
exports.quadsMetadataToBindingsMetadata = quadsMetadataToBindingsMetadata;
|
|
196
197
|
/**
|
|
197
198
|
* Convert the quads order metadata element to a bindings order metadata element.
|
|
198
199
|
* @param dataFactory The data factory.
|
|
@@ -220,7 +221,6 @@ function quadsOrderToBindingsOrder(dataFactory, quadsOrder, elementVariables) {
|
|
|
220
221
|
};
|
|
221
222
|
}).filter(Boolean);
|
|
222
223
|
}
|
|
223
|
-
exports.quadsOrderToBindingsOrder = quadsOrderToBindingsOrder;
|
|
224
224
|
/**
|
|
225
225
|
* Perform post-match-filtering if the source does not support quoted triple filtering,
|
|
226
226
|
* but we have a variable inside a quoted triple.
|
|
@@ -233,5 +233,4 @@ function filterMatchingQuotedQuads(pattern, it) {
|
|
|
233
233
|
}
|
|
234
234
|
return it;
|
|
235
235
|
}
|
|
236
|
-
exports.filterMatchingQuotedQuads = filterMatchingQuotedQuads;
|
|
237
236
|
//# sourceMappingURL=Utils.js.map
|
package/lib/Utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["Utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BindingsStream, ComunicaDataFactory, MetadataBindings, MetadataQuads, TermsOrder } from '@comunica/types';\nimport type { Algebra } from '@comunica/utils-algebra';\nimport type { BindingsFactory } from '@comunica/utils-bindings-factory';\nimport { ClosableIterator } from '@comunica/utils-iterator';\nimport { validateMetadataQuads } from '@comunica/utils-metadata';\nimport type * as RDF from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport { termToString } from 'rdf-string';\nimport type { QuadTermName } from 'rdf-terms';\nimport {\n forEachTermsNested,\n getTermsNested,\n getValueNestedPath,\n reduceTermsNested,\n someTerms,\n uniqTerms,\n} from 'rdf-terms';\nimport { matchPatternMappings } from 'rdf-terms/lib/QuadTermUtil';\n\n/**\n * Convert an iterator of quads to an iterator of bindings.\n * @param quads The quads to convert.\n * @param pattern The pattern to get variables from to determine bindings.\n * All quads are also assumed to match the pattern.\n * @param dataFactory The data factory.\n * @param bindingsFactory The factory for creating bindings.\n * @param unionDefaultGraph If union default graph mode is enabled.\n * If true, variable graphs will match all graphs, including the default graph.\n * If false, variable graphs will only match named graphs, and not the default graph.\n */\nexport function quadsToBindings(\n quads: AsyncIterator<RDF.Quad>,\n pattern: Algebra.Pattern,\n dataFactory: ComunicaDataFactory,\n bindingsFactory: BindingsFactory,\n unionDefaultGraph: boolean,\n): BindingsStream {\n const variables = getVariables(pattern);\n\n // If non-default-graph triples need to be filtered out\n const filterNonDefaultQuads = pattern.graph.termType === 'Variable' && !unionDefaultGraph;\n\n // Detect duplicate variables in the pattern\n const duplicateElementLinks: Record<string, QuadTermName[][]> | undefined = getDuplicateElementLinks(pattern);\n\n // Convenience datastructure for mapping quad elements to variables\n const elementVariables: Record<string, string> = reduceTermsNested(\n pattern,\n (acc: Record<string, string>, term: RDF.Term, keys: QuadTermName[]) => {\n if (term.termType === 'Variable') {\n acc[keys.join('_')] = term.value;\n }\n return acc;\n },\n {},\n );\n\n // Optionally filter, and construct bindings\n let filteredOutput = quads;\n\n // SPARQL query semantics allow graph variables to only match with named graphs, excluding the default graph\n // But this is not the case when using union default graph semantics\n if (filterNonDefaultQuads) {\n filteredOutput = filteredOutput.filter(quad => quad.graph.termType !== 'DefaultGraph');\n }\n\n // If there are duplicate variables in the search pattern,\n // make sure that we filter out the triples that don't have equal values for those triple elements,\n // as the rdf-resolve-quad-pattern bus ignores variable names.\n if (duplicateElementLinks) {\n filteredOutput = filteredOutput.filter((quad) => {\n for (const keyLeft in duplicateElementLinks) {\n const keysLeft: QuadTermName[] = <QuadTermName[]> keyLeft.split('_');\n const valueLeft = getValueNestedPath(quad, keysLeft);\n for (const keysRight of duplicateElementLinks[keyLeft]) {\n if (!valueLeft.equals(getValueNestedPath(quad, keysRight))) {\n return false;\n }\n }\n }\n return true;\n });\n }\n\n // Wrap it in a ClosableIterator, so we can propagate destroy calls\n const it = new ClosableIterator(filteredOutput.map<RDF.Bindings>(quad => bindingsFactory\n .bindings(Object.keys(elementVariables).map((key) => {\n const keys: QuadTermName[] = <any>key.split('_');\n const variable = elementVariables[key];\n const term = getValueNestedPath(quad, keys);\n return [ dataFactory.variable(variable), term ];\n }))), {\n onClose: () => quads.destroy(),\n });\n\n // Set the metadata property\n setMetadata(\n dataFactory,\n it,\n quads,\n elementVariables,\n variables,\n filterNonDefaultQuads || Boolean(duplicateElementLinks),\n );\n\n return it;\n}\n\n/**\n * Check if a term is a variable.\n * @param {RDF.Term} term An RDF term.\n * @return {any} If the term is a variable or blank node.\n */\nexport function isTermVariable(term: RDF.Term): term is RDF.Variable {\n return term.termType === 'Variable';\n}\n\n/**\n * Get all variables in the given pattern.\n * No duplicates are returned.\n * @param {RDF.BaseQuad} pattern A quad pattern.\n */\nexport function getVariables(pattern: RDF.BaseQuad): RDF.Variable[] {\n return uniqTerms(getTermsNested(pattern).filter(isTermVariable));\n}\n\n/**\n * A helper function to find a hash with quad elements that have duplicate variables.\n *\n * @param {RDF.Quad} pattern A quad pattern.\n *\n * @return {{[p: string]: string[]}} If no equal variable names are present in the four terms, this returns undefined.\n * Otherwise, this maps quad elements paths (['subject'], ['predicate'], ['object'],\n * ['graph'])\n * to the list of quad elements it shares a variable name with.\n * For quoted triples, paths such as ['subject', 'object'] may occur.\n * If no links for a certain element exist, this element will\n * not be included in the hash.\n * Note 1: Quad elements will never have a link to themselves.\n * So this can never occur: { subject: [[ 'subject']] },\n * instead 'null' would be returned.\n * Note 2: Links only exist in one direction,\n * this means that { subject: [[ 'predicate']], predicate: [[ 'subject' ]] }\n * will not occur, instead only { subject: [[ 'predicate']] }\n * will be returned.\n * Note 3: Keys can also be paths, but they are delimited by '_', such as:\n * { subject_object_subject: [[ 'predicate']] }\n */\nexport function getDuplicateElementLinks(pattern: RDF.BaseQuad): Record<string, QuadTermName[][]> | undefined {\n // Collect a variable to quad elements mapping.\n const variableElements: Record<string, QuadTermName[][]> = {};\n let duplicateVariables = false;\n forEachTermsNested(pattern, (value, keys) => {\n if (value.termType === 'Variable') {\n const val = termToString(value);\n const length = (variableElements[val] || (variableElements[val] = [])).push(keys);\n duplicateVariables = duplicateVariables || length > 1;\n }\n });\n\n if (!duplicateVariables) {\n return;\n }\n\n // Collect quad element to elements with equal variables mapping.\n const duplicateElementLinks: Record<string, QuadTermName[][]> = {};\n for (const variable in variableElements) {\n const elements = variableElements[variable];\n const remainingElements = elements.slice(1);\n // Only store the elements that have at least one equal element.\n if (remainingElements.length > 0) {\n duplicateElementLinks[elements[0].join('_')] = remainingElements;\n }\n }\n\n return duplicateElementLinks;\n}\n\n/**\n * Set the metadata of the bindings stream derived from the metadata of the quads stream.\n * @param dataFactory The data factory.\n * @param {BindingsStream} bindings The bindings stream that will receive the metadata property.\n * @param {AsyncIterator<Quad>} quads The quads stream that is guaranteed to emit the metadata property.\n * @param elementVariables Mapping of quad term name to variable name.\n * @param variables Variables to include in the metadata\n * @param forceEstimateCardinality Set the cardinality to estimate\n * @return {() => Promise<{[p: string]: any}>} A lazy promise behind a callback resolving to a metadata object.\n */\nexport function setMetadata(\n dataFactory: ComunicaDataFactory,\n bindings: BindingsStream,\n quads: AsyncIterator<RDF.Quad>,\n elementVariables: Record<string, string>,\n variables: RDF.Variable[],\n forceEstimateCardinality: boolean,\n): void {\n const getMetadataCb = (metadataRaw: Record<string, any>): void => {\n if (forceEstimateCardinality) {\n metadataRaw.cardinality.type = 'estimate';\n }\n bindings.setProperty(\n 'metadata',\n quadsMetadataToBindingsMetadata(dataFactory, validateMetadataQuads(metadataRaw), elementVariables, variables),\n );\n\n // Propagate metadata invalidations\n if (metadataRaw.state) {\n metadataRaw.state.addInvalidateListener(() => {\n setMetadata(dataFactory, bindings, quads, elementVariables, variables, forceEstimateCardinality);\n });\n }\n };\n\n const metadata = quads.getProperty('metadata');\n if (metadata) {\n // This is to enforce sync metadata setting, because AsyncIterator will always call it async,\n // even if the property was already defined.\n getMetadataCb(metadata);\n } else {\n quads.getProperty('metadata', getMetadataCb);\n }\n}\n\n/**\n * Convert the metadata of quads to the metadata of bindings.\n * @param dataFactory The data factory.\n * @param metadataQuads Quads metadata.\n * @param elementVariables A mapping from quad elements to variables.\n * @param variables The variables in the bindings.\n */\nexport function quadsMetadataToBindingsMetadata(\n dataFactory: ComunicaDataFactory,\n metadataQuads: MetadataQuads,\n elementVariables: Record<string, string>,\n variables: RDF.Variable[],\n): MetadataBindings {\n return {\n ...metadataQuads,\n order: metadataQuads.order ?\n quadsOrderToBindingsOrder(dataFactory, metadataQuads.order, elementVariables) :\n undefined,\n availableOrders: metadataQuads.availableOrders ?\n metadataQuads.availableOrders.map(orderDef => ({\n cost: orderDef.cost,\n terms: quadsOrderToBindingsOrder(dataFactory, orderDef.terms, elementVariables),\n })) :\n undefined,\n variables: variables.map(variable => ({ variable, canBeUndef: false })),\n };\n}\n\n/**\n * Convert the quads order metadata element to a bindings order metadata element.\n * @param dataFactory The data factory.\n * @param quadsOrder Quads order.\n * @param elementVariables A mapping from quad elements to variables.\n */\nexport function quadsOrderToBindingsOrder(\n dataFactory: ComunicaDataFactory,\n quadsOrder: TermsOrder<RDF.QuadTermName>,\n elementVariables: Record<string, string>,\n): TermsOrder<RDF.Variable> {\n const mappedVariables: Record<string, boolean> = {};\n return <TermsOrder<RDF.Variable>> quadsOrder.map((entry) => {\n // Omit entries that do not map to a variable\n const variableName = elementVariables[entry.term];\n if (!variableName) {\n // eslint-disable-next-line array-callback-return\n return;\n }\n\n // Omit entries that have been mapped already\n if (mappedVariables[variableName]) {\n // eslint-disable-next-line array-callback-return\n return;\n }\n\n mappedVariables[variableName] = true;\n return {\n term: dataFactory.variable(variableName),\n direction: entry.direction,\n };\n }).filter(Boolean);\n}\n\n/**\n * Perform post-match-filtering if the source does not support quoted triple filtering,\n * but we have a variable inside a quoted triple.\n * @param pattern The current quad pattern operation.\n * @param it The iterator to filter.\n */\nexport function filterMatchingQuotedQuads(pattern: RDF.BaseQuad, it: AsyncIterator<RDF.Quad>): AsyncIterator<RDF.Quad> {\n if (someTerms(pattern, term => term.termType === 'Quad')) {\n it = it.filter(quad => matchPatternMappings(quad, pattern));\n }\n return it;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"Utils.js","sourceRoot":"","sources":["Utils.ts"],"names":[],"mappings":"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","sourcesContent":["import type { BindingsStream, ComunicaDataFactory, MetadataBindings, MetadataQuads, TermsOrder } from '@comunica/types';\nimport type { Algebra } from '@comunica/utils-algebra';\nimport type { BindingsFactory } from '@comunica/utils-bindings-factory';\nimport { ClosableIterator } from '@comunica/utils-iterator';\nimport { validateMetadataQuads } from '@comunica/utils-metadata';\nimport type * as RDF from '@rdfjs/types';\nimport type { AsyncIterator } from 'asynciterator';\nimport { termToString } from 'rdf-string';\nimport type { QuadTermName } from 'rdf-terms';\nimport {\n forEachTermsNested,\n getTermsNested,\n getValueNestedPath,\n reduceTermsNested,\n someTerms,\n uniqTerms,\n} from 'rdf-terms';\nimport { matchPatternMappings } from 'rdf-terms/lib/QuadTermUtil';\n\n/**\n * Convert an iterator of quads to an iterator of bindings.\n * @param quads The quads to convert.\n * @param pattern The pattern to get variables from to determine bindings.\n * All quads are also assumed to match the pattern.\n * @param dataFactory The data factory.\n * @param bindingsFactory The factory for creating bindings.\n * @param unionDefaultGraph If union default graph mode is enabled.\n * If true, variable graphs will match all graphs, including the default graph.\n * If false, variable graphs will only match named graphs, and not the default graph.\n */\nexport function quadsToBindings(\n quads: AsyncIterator<RDF.Quad>,\n pattern: Algebra.Pattern,\n dataFactory: ComunicaDataFactory,\n bindingsFactory: BindingsFactory,\n unionDefaultGraph: boolean,\n): BindingsStream {\n const variables = getVariables(pattern);\n\n // If non-default-graph triples need to be filtered out\n const filterNonDefaultQuads = pattern.graph.termType === 'Variable' && !unionDefaultGraph;\n\n // Detect duplicate variables in the pattern\n const duplicateElementLinks: Record<string, QuadTermName[][]> | undefined = getDuplicateElementLinks(pattern);\n\n // Convenience datastructure for mapping quad elements to variables\n const elementVariables: Record<string, string> = reduceTermsNested(\n pattern,\n (acc: Record<string, string>, term: RDF.Term, keys: QuadTermName[]) => {\n if (term.termType === 'Variable') {\n acc[keys.join('_')] = term.value;\n }\n return acc;\n },\n {},\n );\n\n // Optionally filter, and construct bindings\n let filteredOutput = quads;\n\n // SPARQL query semantics allow graph variables to only match with named graphs, excluding the default graph\n // But this is not the case when using union default graph semantics\n if (filterNonDefaultQuads) {\n filteredOutput = filteredOutput.filter(quad => quad.graph.termType !== 'DefaultGraph');\n }\n\n // If there are duplicate variables in the search pattern,\n // make sure that we filter out the triples that don't have equal values for those triple elements,\n // as the rdf-resolve-quad-pattern bus ignores variable names.\n if (duplicateElementLinks) {\n filteredOutput = filteredOutput.filter((quad) => {\n for (const keyLeft in duplicateElementLinks) {\n const keysLeft: QuadTermName[] = <QuadTermName[]> keyLeft.split('_');\n const valueLeft = getValueNestedPath(quad, keysLeft);\n for (const keysRight of duplicateElementLinks[keyLeft]) {\n if (!valueLeft.equals(getValueNestedPath(quad, keysRight))) {\n return false;\n }\n }\n }\n return true;\n });\n }\n\n // Wrap it in a ClosableIterator, so we can propagate destroy calls\n const it = new ClosableIterator(filteredOutput.map<RDF.Bindings>(quad => bindingsFactory\n .bindings(Object.keys(elementVariables).map((key) => {\n const keys: QuadTermName[] = <any>key.split('_');\n const variable = elementVariables[key];\n const term = getValueNestedPath(quad, keys);\n return [ dataFactory.variable(variable), term ];\n }))), {\n onClose: () => quads.destroy(),\n });\n\n // Set the metadata property\n setMetadata(\n dataFactory,\n it,\n quads,\n elementVariables,\n variables,\n filterNonDefaultQuads || Boolean(duplicateElementLinks),\n );\n\n return it;\n}\n\n/**\n * Check if a term is a variable.\n * @param {RDF.Term} term An RDF term.\n * @return {any} If the term is a variable or blank node.\n */\nexport function isTermVariable(term: RDF.Term): term is RDF.Variable {\n return term.termType === 'Variable';\n}\n\n/**\n * Get all variables in the given pattern.\n * No duplicates are returned.\n * @param {RDF.BaseQuad} pattern A quad pattern.\n */\nexport function getVariables(pattern: RDF.BaseQuad): RDF.Variable[] {\n return uniqTerms(getTermsNested(pattern).filter(isTermVariable));\n}\n\n/**\n * A helper function to find a hash with quad elements that have duplicate variables.\n *\n * @param {RDF.Quad} pattern A quad pattern.\n *\n * @return {{[p: string]: string[]}} If no equal variable names are present in the four terms, this returns undefined.\n * Otherwise, this maps quad elements paths (['subject'], ['predicate'], ['object'],\n * ['graph'])\n * to the list of quad elements it shares a variable name with.\n * For quoted triples, paths such as ['subject', 'object'] may occur.\n * If no links for a certain element exist, this element will\n * not be included in the hash.\n * Note 1: Quad elements will never have a link to themselves.\n * So this can never occur: { subject: [[ 'subject']] },\n * instead 'null' would be returned.\n * Note 2: Links only exist in one direction,\n * this means that { subject: [[ 'predicate']], predicate: [[ 'subject' ]] }\n * will not occur, instead only { subject: [[ 'predicate']] }\n * will be returned.\n * Note 3: Keys can also be paths, but they are delimited by '_', such as:\n * { subject_object_subject: [[ 'predicate']] }\n */\nexport function getDuplicateElementLinks(pattern: RDF.BaseQuad): Record<string, QuadTermName[][]> | undefined {\n // Collect a variable to quad elements mapping.\n const variableElements: Record<string, QuadTermName[][]> = {};\n let duplicateVariables = false;\n forEachTermsNested(pattern, (value, keys) => {\n if (value.termType === 'Variable') {\n const val = termToString(value);\n const length = (variableElements[val] || (variableElements[val] = [])).push(keys);\n duplicateVariables = duplicateVariables || length > 1;\n }\n });\n\n if (!duplicateVariables) {\n return;\n }\n\n // Collect quad element to elements with equal variables mapping.\n const duplicateElementLinks: Record<string, QuadTermName[][]> = {};\n for (const variable in variableElements) {\n const elements = variableElements[variable];\n const remainingElements = elements.slice(1);\n // Only store the elements that have at least one equal element.\n if (remainingElements.length > 0) {\n duplicateElementLinks[elements[0].join('_')] = remainingElements;\n }\n }\n\n return duplicateElementLinks;\n}\n\n/**\n * Set the metadata of the bindings stream derived from the metadata of the quads stream.\n * @param dataFactory The data factory.\n * @param {BindingsStream} bindings The bindings stream that will receive the metadata property.\n * @param {AsyncIterator<Quad>} quads The quads stream that is guaranteed to emit the metadata property.\n * @param elementVariables Mapping of quad term name to variable name.\n * @param variables Variables to include in the metadata\n * @param forceEstimateCardinality Set the cardinality to estimate\n * @return {() => Promise<{[p: string]: any}>} A lazy promise behind a callback resolving to a metadata object.\n */\nexport function setMetadata(\n dataFactory: ComunicaDataFactory,\n bindings: BindingsStream,\n quads: AsyncIterator<RDF.Quad>,\n elementVariables: Record<string, string>,\n variables: RDF.Variable[],\n forceEstimateCardinality: boolean,\n): void {\n const getMetadataCb = (metadataRaw: Record<string, any>): void => {\n if (forceEstimateCardinality) {\n metadataRaw.cardinality.type = 'estimate';\n }\n bindings.setProperty(\n 'metadata',\n quadsMetadataToBindingsMetadata(dataFactory, validateMetadataQuads(metadataRaw), elementVariables, variables),\n );\n\n // Propagate metadata invalidations\n if (metadataRaw.state) {\n metadataRaw.state.addInvalidateListener(() => {\n setMetadata(dataFactory, bindings, quads, elementVariables, variables, forceEstimateCardinality);\n });\n }\n };\n\n const metadata = quads.getProperty('metadata');\n if (metadata) {\n // This is to enforce sync metadata setting, because AsyncIterator will always call it async,\n // even if the property was already defined.\n getMetadataCb(metadata);\n } else {\n quads.getProperty('metadata', getMetadataCb);\n }\n}\n\n/**\n * Convert the metadata of quads to the metadata of bindings.\n * @param dataFactory The data factory.\n * @param metadataQuads Quads metadata.\n * @param elementVariables A mapping from quad elements to variables.\n * @param variables The variables in the bindings.\n */\nexport function quadsMetadataToBindingsMetadata(\n dataFactory: ComunicaDataFactory,\n metadataQuads: MetadataQuads,\n elementVariables: Record<string, string>,\n variables: RDF.Variable[],\n): MetadataBindings {\n return {\n ...metadataQuads,\n order: metadataQuads.order ?\n quadsOrderToBindingsOrder(dataFactory, metadataQuads.order, elementVariables) :\n undefined,\n availableOrders: metadataQuads.availableOrders ?\n metadataQuads.availableOrders.map(orderDef => ({\n cost: orderDef.cost,\n terms: quadsOrderToBindingsOrder(dataFactory, orderDef.terms, elementVariables),\n })) :\n undefined,\n variables: variables.map(variable => ({ variable, canBeUndef: false })),\n };\n}\n\n/**\n * Convert the quads order metadata element to a bindings order metadata element.\n * @param dataFactory The data factory.\n * @param quadsOrder Quads order.\n * @param elementVariables A mapping from quad elements to variables.\n */\nexport function quadsOrderToBindingsOrder(\n dataFactory: ComunicaDataFactory,\n quadsOrder: TermsOrder<RDF.QuadTermName>,\n elementVariables: Record<string, string>,\n): TermsOrder<RDF.Variable> {\n const mappedVariables: Record<string, boolean> = {};\n return <TermsOrder<RDF.Variable>> quadsOrder.map((entry) => {\n // Omit entries that do not map to a variable\n const variableName = elementVariables[entry.term];\n if (!variableName) {\n // eslint-disable-next-line array-callback-return\n return;\n }\n\n // Omit entries that have been mapped already\n if (mappedVariables[variableName]) {\n // eslint-disable-next-line array-callback-return\n return;\n }\n\n mappedVariables[variableName] = true;\n return {\n term: dataFactory.variable(variableName),\n direction: entry.direction,\n };\n }).filter(Boolean);\n}\n\n/**\n * Perform post-match-filtering if the source does not support quoted triple filtering,\n * but we have a variable inside a quoted triple.\n * @param pattern The current quad pattern operation.\n * @param it The iterator to filter.\n */\nexport function filterMatchingQuotedQuads(pattern: RDF.BaseQuad, it: AsyncIterator<RDF.Quad>): AsyncIterator<RDF.Quad> {\n if (someTerms(pattern, term => term.termType === 'Quad')) {\n it = it.filter(quad => matchPatternMappings(quad, pattern));\n }\n return it;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@comunica/bus-query-source-identify",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"description": "A comunica bus for query-source-identify events.",
|
|
5
5
|
"lsd:module": true,
|
|
6
6
|
"license": "MIT",
|
|
@@ -40,16 +40,16 @@
|
|
|
40
40
|
"build:components": "componentsjs-generator"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@comunica/core": "
|
|
44
|
-
"@comunica/types": "
|
|
45
|
-
"@comunica/utils-algebra": "
|
|
46
|
-
"@comunica/utils-bindings-factory": "
|
|
47
|
-
"@comunica/utils-iterator": "
|
|
48
|
-
"@comunica/utils-metadata": "
|
|
43
|
+
"@comunica/core": "^5.0.0",
|
|
44
|
+
"@comunica/types": "^5.0.0",
|
|
45
|
+
"@comunica/utils-algebra": "^5.0.0",
|
|
46
|
+
"@comunica/utils-bindings-factory": "^5.0.0",
|
|
47
|
+
"@comunica/utils-iterator": "^5.0.0",
|
|
48
|
+
"@comunica/utils-metadata": "^5.0.0",
|
|
49
49
|
"@rdfjs/types": "*",
|
|
50
50
|
"asynciterator": "^3.10.0",
|
|
51
51
|
"rdf-string": "^2.0.1",
|
|
52
52
|
"rdf-terms": "^2.0.0"
|
|
53
53
|
},
|
|
54
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "0b1756fdb9bef014133432489627c1bd71779bd0"
|
|
55
55
|
}
|