UNPKG

1.63 kBJavaScriptView Raw
1import { isTerm, isTermLike, Term } from "./term.js";
2import { isNamedNode } from "./named-node.js";
3import { isNamedNodeLike } from "./named-node.js";
4import { hasKey } from "./has-key.js";
5export function isLiteralLike(given, value) {
6 return (isTermLike(given, "Literal", value) &&
7 hasKey(given, "language") &&
8 typeof given.language === "string" &&
9 (!hasKey(given, "datatype") ||
10 (hasKey(given, "datatype") &&
11 !given.datatype) ||
12 (hasKey(given, "datatype") &&
13 isNamedNodeLike(given.datatype))));
14}
15export function isLiteral(given, value) {
16 return (isTerm(given, "Literal", value) &&
17 hasKey(given, "language") &&
18 typeof given.language === "string" &&
19 (!hasKey(given, "datatype") ||
20 (hasKey(given, "datatype") &&
21 !given.datatype) ||
22 (hasKey(given, "datatype") &&
23 isNamedNode(given.datatype))));
24}
25export class Literal extends Term {
26 constructor(value, language, datatype) {
27 super("Literal", value);
28 this.language = language;
29 this.datatype = datatype;
30 }
31 equals(other) {
32 return (isLiteralLike(other, this.value) &&
33 this.language === this.language &&
34 ((!this.datatype && !other.datatype) ||
35 (this.datatype && this.datatype.equals(other.datatype))));
36 }
37 toJSON() {
38 return {
39 termType: this.termType,
40 value: this.value,
41 language: this.language,
42 datatype: this.datatype
43 };
44 }
45}
46//# sourceMappingURL=literal.js.map
\No newline at end of file