-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgetQueriesFromEndpoint.js
64 lines (52 loc) · 1.97 KB
/
getQueriesFromEndpoint.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import {SparqlEndpointFetcher} from "fetch-sparql-endpoint";
import fs from "fs";
const endpointFetcher = new SparqlEndpointFetcher();
import { stringify } from 'csv-stringify';
const queriesOutputStream = fs.createWriteStream('./output/queries_dbpedia_3.5.1_20100430.csv');
const stringifier = stringify({
delimiter: ','
});
stringifier.on('readable', function(){
let row;
while((row = stringifier.read()) !== null){
queriesOutputStream.write(row);
}
});
const queryText = fs.readFileSync('./queries.rq');
function xsd(localTypeName) {
return 'http://www.w3.org/2001/XMLSchema#' + localTypeName;
}
function castRDFTerm(rdfTerm) {
if (rdfTerm.termType === "Literal") {
const datatypeIRI = rdfTerm.datatype.value;
if (datatypeIRI === xsd('string') || datatypeIRI === xsd('langString')) {
return rdfTerm.value;
} else if (datatypeIRI === xsd('integer')) {
return Number.parseInt(rdfTerm.value);
} else if (datatypeIRI === xsd('decimal')) {
return Number.parseFloat(rdfTerm.value);
} else if (datatypeIRI === xsd('boolean')) {
return !!rdfTerm.value;
} else {
return rdfTerm.value;
}
}
return null;
}
const bindingsStream = await endpointFetcher.fetchBindings('http://localhost:3030/lsqDev', queryText);
bindingsStream
.on('variables', (variables) => {
const varnames = variables.map(v => v.value);
// console.log(varnames);
stringifier.write(varnames);
bindingsStream
.on('data', (bindings) => {
stringifier.write(varnames.map(varname => castRDFTerm(bindings[varname])));
// stringifier.write([bindings.id.value, bindings.text.value, bindings.executions.value]);
})
.on('error', (error) => console.error(error))
.on('end', () => {
stringifier.end();
console.log('All done!');
});
});