1 | import { isTerm, isTermLike, Term } from "./term.js";
|
2 | import { isNamedNode } from "./named-node.js";
|
3 | import { isNamedNodeLike } from "./named-node.js";
|
4 | import { hasKey } from "./has-key.js";
|
5 | export 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 | }
|
15 | export 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 | }
|
25 | export 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 |
|
\ | No newline at end of file |