@jahed/sparql-engine
Version:
SPARQL query engine for servers and web browsers.
184 lines • 6.96 kB
JavaScript
import { formatISO, parseISO } from "date-fns";
import { DataFactory } from "rdf-data-factory";
export const RDF = new DataFactory();
export function tripleEquals(a, b) {
return (a.subject.equals(b.subject) &&
a.predicate.equals(b.predicate) &&
a.object.equals(b.object));
}
/**
* sparqljs predicates support PathProperty syntax which is currently ignored
* outside of PathStageBuilder for compatibility with standard Quads.
*/
export function tripleToQuad(triple) {
return RDF.quad(triple.subject, triple.predicate, triple.object);
}
export function termToValue(term) {
if (isLiteral(term)) {
return asJS(term.value, term.datatype.value);
}
return term.value;
}
function hexToUint8(hex) {
return Uint8Array.from((hex.match(/.{1,2}/g) || []).map((byte) => parseInt(byte, 16)));
}
function base64ToUint8(base64) {
const binaryString = atob(base64);
const bytes = new Uint8Array(binaryString.length);
for (let i = 0; i < binaryString.length; i++) {
bytes[i] = binaryString.charCodeAt(i);
}
return bytes;
}
export function asJS(value, type) {
switch (type) {
case XSD_integer:
case XSD_byte:
case XSD_short:
case XSD_int:
case XSD_unsignedByte:
case XSD_unsignedShort:
case XSD_unsignedInt:
case XSD_number:
case XSD_float:
case XSD_decimal:
case XSD_double:
case XSD_long:
case XSD_unsignedLong:
case XSD_positiveInteger:
case XSD_nonPositiveInteger:
case XSD_negativeInteger:
case XSD_nonNegativeInteger:
return Number(value);
case XSD_boolean:
return value === "true" || value === "1";
case XSD_dateTime:
case XSD_dateTimeStamp:
case XSD_date:
case XSD_time:
case XSD_duration:
return parseISO(value);
case XSD_hexBinary:
return hexToUint8(value);
case XSD_base64Binary:
return base64ToUint8(value);
default:
return value;
}
}
export function createTypedLiteral(value, type) {
return RDF.literal(`${value}`, RDF.namedNode(type));
}
export function createLangLiteral(value, language) {
return RDF.literal(value, language);
}
export function createInteger(value) {
return createTypedLiteral(value, XSD_integer);
}
export function createDecimal(value) {
return createTypedLiteral(value, XSD_decimal);
}
export function createFloat(value) {
return createTypedLiteral(value, XSD_float);
}
export function createBoolean(value) {
return value ? LITERAL_true : LITERAL_false;
}
export function createDate(date) {
return createTypedLiteral(formatISO(date), XSD_dateTime);
}
export function shallowCloneTerm(term, newValue) {
if (termIsLiteral(term)) {
if (term.language !== "") {
return createLangLiteral(newValue, term.language);
}
return createTypedLiteral(newValue, term.datatype.value);
}
return RDF.literal(newValue);
}
export function termIsLiteral(term) {
return term.termType === "Literal";
}
export function termIsIRI(term) {
return term.termType === "NamedNode";
}
export function termIsBNode(term) {
return term.termType === "BlankNode";
}
export function literalIsNumeric(literal) {
switch (literal.datatype.value) {
case XSD_integer:
case XSD_byte:
case XSD_short:
case XSD_int:
case XSD_unsignedByte:
case XSD_unsignedShort:
case XSD_unsignedInt:
case XSD_number:
case XSD_float:
case XSD_decimal:
case XSD_double:
case XSD_long:
case XSD_unsignedLong:
case XSD_positiveInteger:
case XSD_nonPositiveInteger:
case XSD_negativeInteger:
case XSD_nonNegativeInteger:
return true;
default:
return false;
}
}
export function literalIsDate(literal) {
return literal.datatype.value === XSD_dateTime;
}
export function literalIsBoolean(literal) {
return literal.datatype.value === XSD_boolean;
}
export function isVariable(value) {
return "termType" in value && value.termType === "Variable";
}
export function isLiteral(value) {
return "termType" in value && value.termType === "Literal";
}
export function isIRI(value) {
return "termType" in value && value.termType === "NamedNode";
}
export function isBlank(value) {
return "termType" in value && value.termType === "BlankNode";
}
export function isWildcard(value) {
return "termType" in value && value.termType === "Wildcard";
}
export const XSD_integer = "http://www.w3.org/2001/XMLSchema#integer";
export const XSD_byte = "http://www.w3.org/2001/XMLSchema#byte";
export const XSD_short = "http://www.w3.org/2001/XMLSchema#short";
export const XSD_int = "http://www.w3.org/2001/XMLSchema#int";
export const XSD_unsignedByte = "http://www.w3.org/2001/XMLSchema#unsignedByte";
export const XSD_unsignedShort = "http://www.w3.org/2001/XMLSchema#unsignedShort";
export const XSD_unsignedInt = "http://www.w3.org/2001/XMLSchema#unsignedInt";
export const XSD_number = "http://www.w3.org/2001/XMLSchema#number";
export const XSD_float = "http://www.w3.org/2001/XMLSchema#float";
export const XSD_decimal = "http://www.w3.org/2001/XMLSchema#decimal";
export const XSD_double = "http://www.w3.org/2001/XMLSchema#double";
export const XSD_long = "http://www.w3.org/2001/XMLSchema#long";
export const XSD_unsignedLong = "http://www.w3.org/2001/XMLSchema#unsignedLong";
export const XSD_positiveInteger = "http://www.w3.org/2001/XMLSchema#positiveInteger";
export const XSD_nonPositiveInteger = "http://www.w3.org/2001/XMLSchema#nonPositiveInteger";
export const XSD_negativeInteger = "http://www.w3.org/2001/XMLSchema#negativeInteger";
export const XSD_nonNegativeInteger = "http://www.w3.org/2001/XMLSchema#nonNegativeInteger";
export const XSD_boolean = "http://www.w3.org/2001/XMLSchema#boolean";
export const XSD_dateTime = "http://www.w3.org/2001/XMLSchema#dateTime";
export const XSD_dateTimeStamp = "http://www.w3.org/2001/XMLSchema#dateTimeStamp";
export const XSD_date = "http://www.w3.org/2001/XMLSchema#date";
export const XSD_time = "http://www.w3.org/2001/XMLSchema#time";
export const XSD_duration = "http://www.w3.org/2001/XMLSchema#duration";
export const XSD_hexBinary = "http://www.w3.org/2001/XMLSchema#hexBinary";
export const XSD_base64Binary = "http://www.w3.org/2001/XMLSchema#base64Binary";
export const UNBOUND = Object.freeze(RDF.namedNode("UNBOUND"));
export const VARIABLE_s = Object.freeze(RDF.variable("s"));
export const VARIABLE_p = Object.freeze(RDF.variable("p"));
export const VARIABLE_o = Object.freeze(RDF.variable("o"));
export const LITERAL_true = Object.freeze(createTypedLiteral("true", XSD_boolean));
export const LITERAL_false = Object.freeze(createTypedLiteral("false", XSD_boolean));
//# sourceMappingURL=rdf.js.map