rdf-test-suite 2.3.0 → 2.3.2
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.
|
@@ -336,7 +336,7 @@ class TestCaseQueryEvaluationHandler {
|
|
|
336
336
|
const queryData = yield TestCaseQueryEvaluationHandler.resolveQueryDataLinks(queryDataLinks, options);
|
|
337
337
|
const queryResponse = yield Util_1.Util.fetchCached(resource.property.result.value, options);
|
|
338
338
|
return new TestCaseQueryEvaluation(testCaseData, {
|
|
339
|
-
baseIRI:
|
|
339
|
+
baseIRI: action.property.query.value,
|
|
340
340
|
queryDataLinks,
|
|
341
341
|
laxCardinality,
|
|
342
342
|
queryData,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestCaseQueryEvaluation.js","sourceRoot":"","sources":["TestCaseQueryEvaluation.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as RDF from '@rdfjs/types';\nimport { arrayifyStream } from 'arrayify-stream';\nimport { DataFactory } from 'rdf-data-factory';\nimport type { Resource } from 'rdf-object';\nimport { RdfObjectLoader } from 'rdf-object';\nimport { stringToTerm } from 'rdf-string';\nimport { stringToTerm as stringToTtlTerm } from 'rdf-string-ttl';\nimport type { QuadTermName } from 'rdf-terms';\nimport { mapTerms } from 'rdf-terms';\nimport { SparqlJsonParser } from 'sparqljson-parse';\nimport { SparqlXmlParser } from 'sparqlxml-parse';\nimport { ErrorTest } from '../../ErrorTest';\nimport type { IFetchOptions, IFetchResponse } from '../../Util';\nimport { Util } from '../../Util';\nimport type { ITestCaseData } from '../ITestCase';\nimport type { ITestCaseHandler } from '../ITestCaseHandler';\nimport type { IQueryEngine, IQueryResult, IQueryResultBindings, IQueryResultBoolean } from './IQueryEngine';\nimport type { ITestCaseSparql } from './ITestCaseSparql';\nimport { QueryResultBindings } from './QueryResultBindings';\nimport { QueryResultBoolean } from './QueryResultBoolean';\nimport { QueryResultQuads } from './QueryResultQuads';\n\n// eslint-disable-next-line ts/no-require-imports, ts/no-var-requires\nconst stringifyStream = require('stream-to-string');\n\nconst DF = new DataFactory();\n\n/**\n * Test case handler for http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#QueryEvaluationTest.\n */\nexport class TestCaseQueryEvaluationHandler implements ITestCaseHandler<TestCaseQueryEvaluation> {\n /**\n * Parse SPARQL query results in any of the following content types:\n * * application/sparql-results+xml (bindings/ask)\n * * application/sparql-results+json (bindings/ask)\n * * Any RDF serialization (quads)\n *\n * If the results has as first triple '[] a <http://www.w3.org/2001/sw/DataAccess/tests/result-set#ResultSet>',\n * the it will be considered as a DAWG result set, and parsed as such. (bindings)\n *\n * @param {string} contentType The content type.\n * @param {string} url The base IRI.\n * @param {NodeJS.ReadableStream} data The data stream to parse.\n * @return {Promise<IQueryResult>} A promise resolving to a SPARQL query result.\n */\n public static async parseQueryResult(contentType: string, url: string, data: NodeJS.ReadableStream): Promise<IQueryResult> {\n let queryResult: IQueryResult;\n try {\n const rdfStream: RDF.Stream = Util.parseRdfRaw(contentType, url, data);\n queryResult = new QueryResultQuads(await arrayifyStream(rdfStream));\n } catch {\n // Fallthrough to the next cases\n }\n if (contentType.includes('application/sparql-results+xml') || url.endsWith('.srx')) {\n contentType = 'application/sparql-results+xml';\n queryResult = await TestCaseQueryEvaluationHandler.parseSparqlResults('xml', data);\n }\n if (contentType.includes('application/sparql-results+json')) {\n queryResult = await TestCaseQueryEvaluationHandler.parseSparqlResults('json', data);\n }\n if (contentType.includes('text/tab-separated-values') || url.endsWith('.tsv')) {\n queryResult = await TestCaseQueryEvaluationHandler.parseSparqlTsvResults(data);\n }\n\n if (!queryResult) {\n throw new Error(`Could not parse the query result with content type ${contentType} at ${url}`);\n }\n\n // Discover DAWG result sets\n if (queryResult.type === 'quads' && queryResult.value.length > 0 &&\n queryResult.value[0].predicate.value === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' &&\n queryResult.value[0].object.value === 'http://www.w3.org/2001/sw/DataAccess/tests/result-set#ResultSet') {\n return await TestCaseQueryEvaluationHandler.parseDawgResultSet(queryResult.value);\n }\n\n return queryResult;\n }\n\n /**\n * Parses query results in either SPARQL/JSON or SPARQL/XML query results syntax.\n * @param {string} type json or xml\n * @param {NodeJS.ReadableStream} data The data stream to parse.\n * @return {Promise<IQueryResult>} A promise resolving to a SPARQL query result.\n */\n public static async parseSparqlResults(type: 'json' | 'xml', data: NodeJS.ReadableStream): Promise<IQueryResult> {\n let booleanPromise: Promise<boolean>;\n let bindingsStream: NodeJS.ReadableStream;\n if (type === 'json') {\n const parser = new SparqlJsonParser({ prefixVariableQuestionMark: true });\n booleanPromise = parser.parseJsonBooleanStream(data);\n bindingsStream = parser.parseJsonResultsStream(data);\n } else {\n const parser = new SparqlXmlParser({ prefixVariableQuestionMark: true });\n booleanPromise = parser.parseXmlBooleanStream(data);\n bindingsStream = parser.parseXmlResultsStream(data);\n }\n const bindingsPromise: Promise<[RDF.Variable[], Record<string, RDF.Term>[]]> = Promise.all([\n new Promise<RDF.Variable[]>((resolve) => {\n bindingsStream\n .on('variables', resolve)\n .on('end', _ => resolve([]));\n }),\n arrayifyStream(bindingsStream),\n ]);\n\n // Parse both in parallel, and silence the errors\n let bindingsError: Error = null;\n let booleanError: Error = null;\n const parsingResults = await Promise.all([\n booleanPromise.catch((e): any => {\n booleanError = e;\n return null;\n }),\n bindingsPromise.catch((e): any => {\n bindingsError = e;\n return null;\n }),\n ]);\n\n if (!booleanError) {\n return new QueryResultBoolean(parsingResults[0]);\n }\n if (!bindingsError) {\n return new QueryResultBindings(parsingResults[1][0].map((variable: RDF.Variable) => `?${variable.value}`), parsingResults[1][1], false);\n }\n throw new Error(`Found no valid ASK or SELECT query.\\n${\n bindingsError.message}\\n${booleanError.message}`);\n }\n\n /**\n * Parses query results in the DAWG vocabulary.\n * https://www.w3.org/2001/sw/DataAccess/tests/test-dawg.n3\n * @param {Quad[]} quads An array of quads.\n * @return {Promise<IQueryResultBindings | IQueryResultBoolean>} A promise resolving to a bindings or boolean results object.\n */\n public static async parseDawgResultSet(quads: RDF.Quad[]): Promise<IQueryResultBindings | IQueryResultBoolean> {\n // Check for a boolean result (ASK query)\n if (quads[1] && quads[1].predicate.value === 'http://www.w3.org/2001/sw/DataAccess/tests/result-set#boolean') {\n return new QueryResultBoolean(quads[1].object.value === 'true');\n }\n\n // Construct resources for easier interpretation of the bindings\n const objectLoader = new RdfObjectLoader({\n context: {\n result: 'http://www.w3.org/2001/sw/DataAccess/tests/result-set#',\n bindings: 'result:binding',\n index: 'result:index',\n resultVariables: 'result:resultVariable',\n solutions: 'result:solution',\n value: 'result:value',\n variable: 'result:variable',\n },\n });\n await objectLoader.importArray(quads);\n let resultSet: Resource = null;\n for (const resourceName in objectLoader.resources) {\n if (objectLoader.resources[resourceName]\n .isA(stringToTerm('http://www.w3.org/2001/sw/DataAccess/tests/result-set#ResultSet'))) {\n resultSet = objectLoader.resources[resourceName];\n break;\n }\n }\n\n if (!resultSet) {\n throw new Error(`No valid DAWG result set was found in ${quads}`);\n }\n\n // Get the variable names\n const variables: string[] = resultSet.properties.resultVariables\n .map((resource: Resource) => `?${resource.value}`);\n\n // Check if any binding has .index\n let checkOrder = false;\n const s = resultSet.properties.solutions;\n for (const solution of s) {\n if (solution.property.index) {\n checkOrder = true;\n break;\n }\n }\n\n // Ensure that the solutions are sorted by index\n const solutions = resultSet.properties.solutions;\n if (checkOrder) {\n solutions.sort((solution1: Resource, solution2: Resource) => Number.parseInt(solution1.property.index.value, 10) - Number.parseInt(solution2.property.index.value, 10));\n }\n\n // Collect the bindings as object\n const value: Record<string, RDF.Term>[] = solutions.map((solution: Resource) => solution.properties.bindings.reduce((bindings: any, binding: Resource) => {\n bindings[`?${binding.property.variable.value}`] = binding.property.value.term;\n return bindings;\n }, {}));\n\n return new QueryResultBindings(variables, value, checkOrder);\n }\n\n /**\n * Parses query results from a SPARQL TSV stream.\n * @param {NodeJS.ReadableStream} data The data stream to parse.\n * @return {Promise<IQueryResult>} A promise resolving to a SPARQL query result.\n */\n public static async parseSparqlTsvResults(data: NodeJS.ReadableStream): Promise<IQueryResult> {\n const text: string = await stringifyStream(data);\n const lines = text.replace(/\\r?\\n$/u, '').split(/\\r?\\n/u);\n\n if (lines.length === 1) {\n const singleLine = lines[0].trim().toLowerCase();\n if (singleLine === 'true') {\n return new QueryResultBoolean(true);\n }\n if (singleLine === 'false') {\n return new QueryResultBoolean(false);\n }\n }\n\n const variables: string[] = [];\n\n if (lines[0].trim() !== '') {\n const rawVariables = lines[0].split('\\t');\n\n for (const raw of rawVariables) {\n const variable = raw.trim();\n\n if (variable === '') {\n throw new Error('Invalid TSV result: Empty column on the first row.');\n }\n\n if ((!variable.startsWith('?') && !variable.startsWith('$')) || variable.length < 2) {\n throw new Error(`Invalid TSV variable: ${variable}`);\n }\n\n if (variables.includes(variable)) {\n throw new Error(`Invalid TSV result: The variable ${variable} is declared twice.`);\n }\n\n variables.push(variable);\n }\n }\n\n const value: Record<string, RDF.Term>[] = [];\n\n for (let i = 1; i < lines.length; i++) {\n const fields = lines[i].split('\\t');\n\n const isZeroVariableResultRow = variables.length === 0 && fields.length === 1 && fields[0] === '';\n\n if (fields.length !== variables.length && !isZeroVariableResultRow) {\n throw new Error(`Invalid TSV row (Line ${i + 1}): expected ${variables.length} fields but found ${fields.length}.`);\n }\n\n const binding: Record<string, RDF.Term> = {};\n\n for (const [ j, variable ] of variables.entries()) {\n const field = fields[j].trim();\n\n if (field.length > 0) {\n try {\n binding[variable] = TestCaseQueryEvaluationHandler.parseTsvTerm(field);\n } catch (error: any) {\n throw new Error(\n `Failed to parse TSV value on Line ${i + 1}, Column '${variable}': ` +\n `Invalid Turtle syntax in \"${field}\".\\nOriginal error: ${error.message}`,\n );\n }\n }\n }\n value.push(binding);\n }\n\n return new QueryResultBindings(variables, value, false);\n }\n\n /**\n * Parse a single field from a SPARQL TSV result into an RDF term.\n * @param {string} term The TSV field value.\n * @return {RDF.Term} The corresponding RDF term.\n */\n public static parseTsvTerm(term: string): RDF.Term {\n if (/^[+-]?[0-9]+$/u.test(term)) {\n return DF.literal(term, DF.namedNode('http://www.w3.org/2001/XMLSchema#integer'));\n }\n if (/^[+-]?([0-9]+\\.[0-9]*|\\.[0-9]+)$/u.test(term)) {\n return DF.literal(term, DF.namedNode('http://www.w3.org/2001/XMLSchema#decimal'));\n }\n if (/^[+-]?([0-9]+\\.[0-9]*|\\.[0-9]+|[0-9]+)[eE][+-]?[0-9]+$/u.test(term)) {\n return DF.literal(term, DF.namedNode('http://www.w3.org/2001/XMLSchema#double'));\n }\n if (term === 'true' || term === 'false') {\n return DF.literal(term, DF.namedNode('http://www.w3.org/2001/XMLSchema#boolean'));\n }\n\n return stringToTtlTerm(term);\n }\n\n /**\n * Obtain all data links for the given query test action.\n * @param action A query test action.\n */\n public static getQueryDataLinks(action: Resource): IQueryDataLink[] {\n const queryDataLinks: IQueryDataLink[] = [];\n if (action.property.data) {\n queryDataLinks.push({\n dataUri: action.property.data.value,\n });\n }\n for (const graphData of action.properties.graphData) {\n if (graphData.property.graph) {\n queryDataLinks.push({\n dataUri: graphData.property.graph.value,\n dataGraph: DF.namedNode(graphData.property.label.value),\n });\n } else {\n queryDataLinks.push({\n dataUri: graphData.value,\n dataGraph: DF.namedNode(graphData.value),\n });\n }\n }\n return queryDataLinks;\n }\n\n /**\n * Determine the quads for the given query data links.\n * @param queryDataLinks Links to query data.\n * @param options Fetch options.\n */\n public static async resolveQueryDataLinks(queryDataLinks: IQueryDataLink[], options?: IFetchOptions): Promise<RDF.Quad[]> {\n let queryData: RDF.Quad[] = [];\n for (const queryDataLink of queryDataLinks) {\n let queryDataThis: RDF.Quad[] = await arrayifyStream((await Util.fetchRdf(queryDataLink.dataUri, options))[1]);\n if (queryDataLink.dataGraph) {\n queryDataThis = queryDataThis.map(quad => mapTerms(quad, (value: RDF.Term, key: QuadTermName) => key === 'graph' ? queryDataLink.dataGraph : value));\n }\n queryData = [ ...queryData, ...queryDataThis ];\n }\n return queryData;\n }\n\n public async resourceToTestCase(resource: Resource, testCaseData: ITestCaseData, options?: IFetchOptions): Promise<TestCaseQueryEvaluation> {\n if (!resource.property.action) {\n throw new Error(`Missing mf:action in ${resource}`);\n }\n if (!resource.property.result) {\n throw new Error(`Missing mf:result in ${resource}`);\n }\n const action = resource.property.action;\n if (!action.property.query) {\n throw new Error(`Missing qt:query in mf:action of ${resource}`);\n }\n\n // Determine links to data\n const queryDataLinks: IQueryDataLink[] = TestCaseQueryEvaluationHandler.getQueryDataLinks(action);\n\n // Check for lax cardinality property\n let laxCardinality = false;\n if (resource.property.resultCardinality && resource.property.resultCardinality.value ===\n 'http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#LaxCardinality') {\n laxCardinality = true;\n }\n\n // Collect all query data\n const queryData: RDF.Quad[] = await TestCaseQueryEvaluationHandler.resolveQueryDataLinks(queryDataLinks, options);\n\n const queryResponse = await Util.fetchCached(resource.property.result.value, options);\n return new TestCaseQueryEvaluation(\n testCaseData,\n {\n baseIRI: Util.normalizeBaseUrl(action.property.query.value),\n queryDataLinks,\n laxCardinality,\n queryData,\n queryResult: await TestCaseQueryEvaluationHandler.parseQueryResult(\n Util.identifyContentType(queryResponse.url, queryResponse.headers),\n queryResponse.url,\n queryResponse.body,\n ),\n queryString: await stringifyStream((await Util.fetchCached(action.property.query.value, options)).body),\n resultSource: queryResponse,\n },\n );\n }\n}\n\nexport interface ITestCaseQueryEvaluationProps {\n baseIRI: string;\n queryString: string;\n queryData: RDF.Quad[];\n queryResult: IQueryResult;\n laxCardinality: boolean;\n resultSource: IFetchResponse;\n queryDataLinks: IQueryDataLink[];\n}\n\nexport interface IQueryDataLink {\n dataUri: string;\n dataGraph?: RDF.NamedNode;\n}\n\nexport class TestCaseQueryEvaluation implements ITestCaseSparql {\n public readonly type = 'sparql';\n public readonly approval: string;\n public readonly approvedBy: string;\n public readonly comment: string;\n public readonly types: string[];\n public readonly name: string;\n public readonly uri: string;\n\n public readonly baseIRI: string;\n public readonly queryString: string;\n public readonly queryData: RDF.Quad[];\n public readonly queryResult: IQueryResult;\n public readonly laxCardinality: boolean;\n public readonly queryDataLinks: IQueryDataLink[];\n public readonly resultSource: IFetchResponse;\n\n constructor(testCaseData: ITestCaseData, props: ITestCaseQueryEvaluationProps) {\n Object.assign(this, testCaseData);\n Object.assign(this, props);\n }\n\n public static queryDataLinksToString(queryDataLinks: IQueryDataLink[]): string {\n return queryDataLinks.map(queryDataLink => queryDataLink.dataUri + (queryDataLink.dataGraph ? ` (named graph: ${queryDataLink.dataGraph.value})` : '')).join(',\\n ');\n }\n\n public async test(engine: IQueryEngine, injectArguments: any): Promise<void> {\n const result: IQueryResult = await engine.query(\n this.queryData,\n this.queryString,\n {\n baseIRI: this.baseIRI,\n checkOrder: this.queryResult.type === 'bindings' ?\n this.queryResult.checkOrder :\n false,\n ...injectArguments,\n },\n );\n if (!this.queryResult.equals(result, this.laxCardinality)) {\n throw new ErrorTest(`Invalid query evaluation\n\n Query:\\n\\n${this.queryString}\n\n Data links: ${TestCaseQueryEvaluation.queryDataLinksToString(this.queryDataLinks)}\n\n Result Source: ${this.resultSource.url}\n\n Expected: ${this.queryResult.toString()}\n\n Got: \\n ${result.toString()}\n`);\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"TestCaseQueryEvaluation.js","sourceRoot":"","sources":["TestCaseQueryEvaluation.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as RDF from '@rdfjs/types';\nimport { arrayifyStream } from 'arrayify-stream';\nimport { DataFactory } from 'rdf-data-factory';\nimport type { Resource } from 'rdf-object';\nimport { RdfObjectLoader } from 'rdf-object';\nimport { stringToTerm } from 'rdf-string';\nimport { stringToTerm as stringToTtlTerm } from 'rdf-string-ttl';\nimport type { QuadTermName } from 'rdf-terms';\nimport { mapTerms } from 'rdf-terms';\nimport { SparqlJsonParser } from 'sparqljson-parse';\nimport { SparqlXmlParser } from 'sparqlxml-parse';\nimport { ErrorTest } from '../../ErrorTest';\nimport type { IFetchOptions, IFetchResponse } from '../../Util';\nimport { Util } from '../../Util';\nimport type { ITestCaseData } from '../ITestCase';\nimport type { ITestCaseHandler } from '../ITestCaseHandler';\nimport type { IQueryEngine, IQueryResult, IQueryResultBindings, IQueryResultBoolean } from './IQueryEngine';\nimport type { ITestCaseSparql } from './ITestCaseSparql';\nimport { QueryResultBindings } from './QueryResultBindings';\nimport { QueryResultBoolean } from './QueryResultBoolean';\nimport { QueryResultQuads } from './QueryResultQuads';\n\n// eslint-disable-next-line ts/no-require-imports, ts/no-var-requires\nconst stringifyStream = require('stream-to-string');\n\nconst DF = new DataFactory();\n\n/**\n * Test case handler for http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#QueryEvaluationTest.\n */\nexport class TestCaseQueryEvaluationHandler implements ITestCaseHandler<TestCaseQueryEvaluation> {\n /**\n * Parse SPARQL query results in any of the following content types:\n * * application/sparql-results+xml (bindings/ask)\n * * application/sparql-results+json (bindings/ask)\n * * Any RDF serialization (quads)\n *\n * If the results has as first triple '[] a <http://www.w3.org/2001/sw/DataAccess/tests/result-set#ResultSet>',\n * the it will be considered as a DAWG result set, and parsed as such. (bindings)\n *\n * @param {string} contentType The content type.\n * @param {string} url The base IRI.\n * @param {NodeJS.ReadableStream} data The data stream to parse.\n * @return {Promise<IQueryResult>} A promise resolving to a SPARQL query result.\n */\n public static async parseQueryResult(contentType: string, url: string, data: NodeJS.ReadableStream): Promise<IQueryResult> {\n let queryResult: IQueryResult;\n try {\n const rdfStream: RDF.Stream = Util.parseRdfRaw(contentType, url, data);\n queryResult = new QueryResultQuads(await arrayifyStream(rdfStream));\n } catch {\n // Fallthrough to the next cases\n }\n if (contentType.includes('application/sparql-results+xml') || url.endsWith('.srx')) {\n contentType = 'application/sparql-results+xml';\n queryResult = await TestCaseQueryEvaluationHandler.parseSparqlResults('xml', data);\n }\n if (contentType.includes('application/sparql-results+json')) {\n queryResult = await TestCaseQueryEvaluationHandler.parseSparqlResults('json', data);\n }\n if (contentType.includes('text/tab-separated-values') || url.endsWith('.tsv')) {\n queryResult = await TestCaseQueryEvaluationHandler.parseSparqlTsvResults(data);\n }\n\n if (!queryResult) {\n throw new Error(`Could not parse the query result with content type ${contentType} at ${url}`);\n }\n\n // Discover DAWG result sets\n if (queryResult.type === 'quads' && queryResult.value.length > 0 &&\n queryResult.value[0].predicate.value === 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' &&\n queryResult.value[0].object.value === 'http://www.w3.org/2001/sw/DataAccess/tests/result-set#ResultSet') {\n return await TestCaseQueryEvaluationHandler.parseDawgResultSet(queryResult.value);\n }\n\n return queryResult;\n }\n\n /**\n * Parses query results in either SPARQL/JSON or SPARQL/XML query results syntax.\n * @param {string} type json or xml\n * @param {NodeJS.ReadableStream} data The data stream to parse.\n * @return {Promise<IQueryResult>} A promise resolving to a SPARQL query result.\n */\n public static async parseSparqlResults(type: 'json' | 'xml', data: NodeJS.ReadableStream): Promise<IQueryResult> {\n let booleanPromise: Promise<boolean>;\n let bindingsStream: NodeJS.ReadableStream;\n if (type === 'json') {\n const parser = new SparqlJsonParser({ prefixVariableQuestionMark: true });\n booleanPromise = parser.parseJsonBooleanStream(data);\n bindingsStream = parser.parseJsonResultsStream(data);\n } else {\n const parser = new SparqlXmlParser({ prefixVariableQuestionMark: true });\n booleanPromise = parser.parseXmlBooleanStream(data);\n bindingsStream = parser.parseXmlResultsStream(data);\n }\n const bindingsPromise: Promise<[RDF.Variable[], Record<string, RDF.Term>[]]> = Promise.all([\n new Promise<RDF.Variable[]>((resolve) => {\n bindingsStream\n .on('variables', resolve)\n .on('end', _ => resolve([]));\n }),\n arrayifyStream(bindingsStream),\n ]);\n\n // Parse both in parallel, and silence the errors\n let bindingsError: Error = null;\n let booleanError: Error = null;\n const parsingResults = await Promise.all([\n booleanPromise.catch((e): any => {\n booleanError = e;\n return null;\n }),\n bindingsPromise.catch((e): any => {\n bindingsError = e;\n return null;\n }),\n ]);\n\n if (!booleanError) {\n return new QueryResultBoolean(parsingResults[0]);\n }\n if (!bindingsError) {\n return new QueryResultBindings(parsingResults[1][0].map((variable: RDF.Variable) => `?${variable.value}`), parsingResults[1][1], false);\n }\n throw new Error(`Found no valid ASK or SELECT query.\\n${\n bindingsError.message}\\n${booleanError.message}`);\n }\n\n /**\n * Parses query results in the DAWG vocabulary.\n * https://www.w3.org/2001/sw/DataAccess/tests/test-dawg.n3\n * @param {Quad[]} quads An array of quads.\n * @return {Promise<IQueryResultBindings | IQueryResultBoolean>} A promise resolving to a bindings or boolean results object.\n */\n public static async parseDawgResultSet(quads: RDF.Quad[]): Promise<IQueryResultBindings | IQueryResultBoolean> {\n // Check for a boolean result (ASK query)\n if (quads[1] && quads[1].predicate.value === 'http://www.w3.org/2001/sw/DataAccess/tests/result-set#boolean') {\n return new QueryResultBoolean(quads[1].object.value === 'true');\n }\n\n // Construct resources for easier interpretation of the bindings\n const objectLoader = new RdfObjectLoader({\n context: {\n result: 'http://www.w3.org/2001/sw/DataAccess/tests/result-set#',\n bindings: 'result:binding',\n index: 'result:index',\n resultVariables: 'result:resultVariable',\n solutions: 'result:solution',\n value: 'result:value',\n variable: 'result:variable',\n },\n });\n await objectLoader.importArray(quads);\n let resultSet: Resource = null;\n for (const resourceName in objectLoader.resources) {\n if (objectLoader.resources[resourceName]\n .isA(stringToTerm('http://www.w3.org/2001/sw/DataAccess/tests/result-set#ResultSet'))) {\n resultSet = objectLoader.resources[resourceName];\n break;\n }\n }\n\n if (!resultSet) {\n throw new Error(`No valid DAWG result set was found in ${quads}`);\n }\n\n // Get the variable names\n const variables: string[] = resultSet.properties.resultVariables\n .map((resource: Resource) => `?${resource.value}`);\n\n // Check if any binding has .index\n let checkOrder = false;\n const s = resultSet.properties.solutions;\n for (const solution of s) {\n if (solution.property.index) {\n checkOrder = true;\n break;\n }\n }\n\n // Ensure that the solutions are sorted by index\n const solutions = resultSet.properties.solutions;\n if (checkOrder) {\n solutions.sort((solution1: Resource, solution2: Resource) => Number.parseInt(solution1.property.index.value, 10) - Number.parseInt(solution2.property.index.value, 10));\n }\n\n // Collect the bindings as object\n const value: Record<string, RDF.Term>[] = solutions.map((solution: Resource) => solution.properties.bindings.reduce((bindings: any, binding: Resource) => {\n bindings[`?${binding.property.variable.value}`] = binding.property.value.term;\n return bindings;\n }, {}));\n\n return new QueryResultBindings(variables, value, checkOrder);\n }\n\n /**\n * Parses query results from a SPARQL TSV stream.\n * @param {NodeJS.ReadableStream} data The data stream to parse.\n * @return {Promise<IQueryResult>} A promise resolving to a SPARQL query result.\n */\n public static async parseSparqlTsvResults(data: NodeJS.ReadableStream): Promise<IQueryResult> {\n const text: string = await stringifyStream(data);\n const lines = text.replace(/\\r?\\n$/u, '').split(/\\r?\\n/u);\n\n if (lines.length === 1) {\n const singleLine = lines[0].trim().toLowerCase();\n if (singleLine === 'true') {\n return new QueryResultBoolean(true);\n }\n if (singleLine === 'false') {\n return new QueryResultBoolean(false);\n }\n }\n\n const variables: string[] = [];\n\n if (lines[0].trim() !== '') {\n const rawVariables = lines[0].split('\\t');\n\n for (const raw of rawVariables) {\n const variable = raw.trim();\n\n if (variable === '') {\n throw new Error('Invalid TSV result: Empty column on the first row.');\n }\n\n if ((!variable.startsWith('?') && !variable.startsWith('$')) || variable.length < 2) {\n throw new Error(`Invalid TSV variable: ${variable}`);\n }\n\n if (variables.includes(variable)) {\n throw new Error(`Invalid TSV result: The variable ${variable} is declared twice.`);\n }\n\n variables.push(variable);\n }\n }\n\n const value: Record<string, RDF.Term>[] = [];\n\n for (let i = 1; i < lines.length; i++) {\n const fields = lines[i].split('\\t');\n\n const isZeroVariableResultRow = variables.length === 0 && fields.length === 1 && fields[0] === '';\n\n if (fields.length !== variables.length && !isZeroVariableResultRow) {\n throw new Error(`Invalid TSV row (Line ${i + 1}): expected ${variables.length} fields but found ${fields.length}.`);\n }\n\n const binding: Record<string, RDF.Term> = {};\n\n for (const [ j, variable ] of variables.entries()) {\n const field = fields[j].trim();\n\n if (field.length > 0) {\n try {\n binding[variable] = TestCaseQueryEvaluationHandler.parseTsvTerm(field);\n } catch (error: any) {\n throw new Error(\n `Failed to parse TSV value on Line ${i + 1}, Column '${variable}': ` +\n `Invalid Turtle syntax in \"${field}\".\\nOriginal error: ${error.message}`,\n );\n }\n }\n }\n value.push(binding);\n }\n\n return new QueryResultBindings(variables, value, false);\n }\n\n /**\n * Parse a single field from a SPARQL TSV result into an RDF term.\n * @param {string} term The TSV field value.\n * @return {RDF.Term} The corresponding RDF term.\n */\n public static parseTsvTerm(term: string): RDF.Term {\n if (/^[+-]?[0-9]+$/u.test(term)) {\n return DF.literal(term, DF.namedNode('http://www.w3.org/2001/XMLSchema#integer'));\n }\n if (/^[+-]?([0-9]+\\.[0-9]*|\\.[0-9]+)$/u.test(term)) {\n return DF.literal(term, DF.namedNode('http://www.w3.org/2001/XMLSchema#decimal'));\n }\n if (/^[+-]?([0-9]+\\.[0-9]*|\\.[0-9]+|[0-9]+)[eE][+-]?[0-9]+$/u.test(term)) {\n return DF.literal(term, DF.namedNode('http://www.w3.org/2001/XMLSchema#double'));\n }\n if (term === 'true' || term === 'false') {\n return DF.literal(term, DF.namedNode('http://www.w3.org/2001/XMLSchema#boolean'));\n }\n\n return stringToTtlTerm(term);\n }\n\n /**\n * Obtain all data links for the given query test action.\n * @param action A query test action.\n */\n public static getQueryDataLinks(action: Resource): IQueryDataLink[] {\n const queryDataLinks: IQueryDataLink[] = [];\n if (action.property.data) {\n queryDataLinks.push({\n dataUri: action.property.data.value,\n });\n }\n for (const graphData of action.properties.graphData) {\n if (graphData.property.graph) {\n queryDataLinks.push({\n dataUri: graphData.property.graph.value,\n dataGraph: DF.namedNode(graphData.property.label.value),\n });\n } else {\n queryDataLinks.push({\n dataUri: graphData.value,\n dataGraph: DF.namedNode(graphData.value),\n });\n }\n }\n return queryDataLinks;\n }\n\n /**\n * Determine the quads for the given query data links.\n * @param queryDataLinks Links to query data.\n * @param options Fetch options.\n */\n public static async resolveQueryDataLinks(queryDataLinks: IQueryDataLink[], options?: IFetchOptions): Promise<RDF.Quad[]> {\n let queryData: RDF.Quad[] = [];\n for (const queryDataLink of queryDataLinks) {\n let queryDataThis: RDF.Quad[] = await arrayifyStream((await Util.fetchRdf(queryDataLink.dataUri, options))[1]);\n if (queryDataLink.dataGraph) {\n queryDataThis = queryDataThis.map(quad => mapTerms(quad, (value: RDF.Term, key: QuadTermName) => key === 'graph' ? queryDataLink.dataGraph : value));\n }\n queryData = [ ...queryData, ...queryDataThis ];\n }\n return queryData;\n }\n\n public async resourceToTestCase(resource: Resource, testCaseData: ITestCaseData, options?: IFetchOptions): Promise<TestCaseQueryEvaluation> {\n if (!resource.property.action) {\n throw new Error(`Missing mf:action in ${resource}`);\n }\n if (!resource.property.result) {\n throw new Error(`Missing mf:result in ${resource}`);\n }\n const action = resource.property.action;\n if (!action.property.query) {\n throw new Error(`Missing qt:query in mf:action of ${resource}`);\n }\n\n // Determine links to data\n const queryDataLinks: IQueryDataLink[] = TestCaseQueryEvaluationHandler.getQueryDataLinks(action);\n\n // Check for lax cardinality property\n let laxCardinality = false;\n if (resource.property.resultCardinality && resource.property.resultCardinality.value ===\n 'http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#LaxCardinality') {\n laxCardinality = true;\n }\n\n // Collect all query data\n const queryData: RDF.Quad[] = await TestCaseQueryEvaluationHandler.resolveQueryDataLinks(queryDataLinks, options);\n\n const queryResponse = await Util.fetchCached(resource.property.result.value, options);\n return new TestCaseQueryEvaluation(\n testCaseData,\n {\n baseIRI: action.property.query.value,\n queryDataLinks,\n laxCardinality,\n queryData,\n queryResult: await TestCaseQueryEvaluationHandler.parseQueryResult(\n Util.identifyContentType(queryResponse.url, queryResponse.headers),\n queryResponse.url,\n queryResponse.body,\n ),\n queryString: await stringifyStream((await Util.fetchCached(action.property.query.value, options)).body),\n resultSource: queryResponse,\n },\n );\n }\n}\n\nexport interface ITestCaseQueryEvaluationProps {\n baseIRI: string;\n queryString: string;\n queryData: RDF.Quad[];\n queryResult: IQueryResult;\n laxCardinality: boolean;\n resultSource: IFetchResponse;\n queryDataLinks: IQueryDataLink[];\n}\n\nexport interface IQueryDataLink {\n dataUri: string;\n dataGraph?: RDF.NamedNode;\n}\n\nexport class TestCaseQueryEvaluation implements ITestCaseSparql {\n public readonly type = 'sparql';\n public readonly approval: string;\n public readonly approvedBy: string;\n public readonly comment: string;\n public readonly types: string[];\n public readonly name: string;\n public readonly uri: string;\n\n public readonly baseIRI: string;\n public readonly queryString: string;\n public readonly queryData: RDF.Quad[];\n public readonly queryResult: IQueryResult;\n public readonly laxCardinality: boolean;\n public readonly queryDataLinks: IQueryDataLink[];\n public readonly resultSource: IFetchResponse;\n\n constructor(testCaseData: ITestCaseData, props: ITestCaseQueryEvaluationProps) {\n Object.assign(this, testCaseData);\n Object.assign(this, props);\n }\n\n public static queryDataLinksToString(queryDataLinks: IQueryDataLink[]): string {\n return queryDataLinks.map(queryDataLink => queryDataLink.dataUri + (queryDataLink.dataGraph ? ` (named graph: ${queryDataLink.dataGraph.value})` : '')).join(',\\n ');\n }\n\n public async test(engine: IQueryEngine, injectArguments: any): Promise<void> {\n const result: IQueryResult = await engine.query(\n this.queryData,\n this.queryString,\n {\n baseIRI: this.baseIRI,\n checkOrder: this.queryResult.type === 'bindings' ?\n this.queryResult.checkOrder :\n false,\n ...injectArguments,\n },\n );\n if (!this.queryResult.equals(result, this.laxCardinality)) {\n throw new ErrorTest(`Invalid query evaluation\n\n Query:\\n\\n${this.queryString}\n\n Data links: ${TestCaseQueryEvaluation.queryDataLinksToString(this.queryDataLinks)}\n\n Result Source: ${this.resultSource.url}\n\n Expected: ${this.queryResult.toString()}\n\n Got: \\n ${result.toString()}\n`);\n }\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rdf-test-suite",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.2",
|
|
4
4
|
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e",
|
|
5
5
|
"description": "Executes the RDF and SPARQL test suites.",
|
|
6
6
|
"typings": "index",
|
|
@@ -94,6 +94,7 @@
|
|
|
94
94
|
"cross-fetch": "^4.0.0",
|
|
95
95
|
"is-stream": "^2.0.0",
|
|
96
96
|
"json-stable-stringify": "^1.0.1",
|
|
97
|
+
"jsonld-context-parser": "^3.1.0",
|
|
97
98
|
"jsonld-streaming-parser": "^5.0.0",
|
|
98
99
|
"log-symbols": "^4.0.0",
|
|
99
100
|
"minimist": "^1.2.0",
|
|
@@ -113,11 +114,12 @@
|
|
|
113
114
|
"sparqljson-parse": "^3.0.0",
|
|
114
115
|
"sparqlxml-parse": "^3.0.0",
|
|
115
116
|
"stream-to-string": "^1.1.0",
|
|
117
|
+
"streamify-array": "^2.0.0",
|
|
116
118
|
"streamify-string": "^1.0.1"
|
|
117
119
|
},
|
|
118
120
|
"devDependencies": {
|
|
119
|
-
"@comunica/actor-http-proxy": "^
|
|
120
|
-
"@comunica/query-sparql": "^
|
|
121
|
+
"@comunica/actor-http-proxy": "^5.0.0",
|
|
122
|
+
"@comunica/query-sparql": "^5.0.0",
|
|
121
123
|
"@rubensworks/eslint-config": "^3.1.0",
|
|
122
124
|
"@types/jest": "^30.0.0",
|
|
123
125
|
"@types/papaparse": "^5.5.2",
|
|
@@ -127,9 +129,8 @@
|
|
|
127
129
|
"jest-rdf": "^2.0.0",
|
|
128
130
|
"manual-git-changelog": "^1.0.1",
|
|
129
131
|
"pre-commit": "^2.0.0",
|
|
130
|
-
"rdf-parse": "^
|
|
132
|
+
"rdf-parse": "^5.0.0",
|
|
131
133
|
"rimraf": "^6.0.0",
|
|
132
|
-
"streamify-array": "^2.0.0",
|
|
133
134
|
"ts-jest": "^29.0.0",
|
|
134
135
|
"typescript": "^6.0.0"
|
|
135
136
|
}
|