eyeling 1.5.35 → 1.5.36

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.
@@ -1,3 +1,8 @@
1
+ # =================================================
2
+ # JSON Pointer example
3
+ # See https://datatracker.ietf.org/doc/html/rfc6901
4
+ # =================================================
5
+
1
6
  @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
2
7
  @prefix string: <http://www.w3.org/2000/10/swap/string#> .
3
8
  @prefix list: <http://www.w3.org/2000/10/swap/list#> .
@@ -1,3 +1,8 @@
1
+ # =================================================
2
+ # Rconcile VAT JSON Pointer example
3
+ # See https://datatracker.ietf.org/doc/html/rfc6901
4
+ # =================================================
5
+
1
6
  @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
2
7
  @prefix string: <http://www.w3.org/2000/10/swap/string#> .
3
8
  @prefix list: <http://www.w3.org/2000/10/swap/list#> .
@@ -1,12 +1,16 @@
1
+ # =================================
2
+ # RDF list
3
+ # Example from Patrick Hochstenbach
4
+ # =================================
5
+
1
6
  @prefix log: <http://www.w3.org/2000/10/swap/log#> .
2
- @prefix list: <http://www.w3.org/2000/10/swap/list#> .
3
7
  @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
4
8
  @prefix : <http://example.org/ns#> .
5
9
 
6
10
  :X :val (1 2).
7
11
 
8
- { ?X :head ?Y } <= { ?X list:first ?Y }.
9
- { ?X :tail ?Y } <= { ?X list:rest ?Y} .
12
+ { ?X :head ?Y } <= { ?X rdf:first ?Y }.
13
+ { ?X :tail ?Y } <= { ?X rdf:rest ?Y} .
10
14
 
11
15
  {
12
16
  ?X :val ?Y.
package/eyeling.js CHANGED
@@ -3692,6 +3692,12 @@ function evalBuiltin(goal, subst, facts, backRules, depth, varGen) {
3692
3692
  function isBuiltinPred(p) {
3693
3693
  if (!(p instanceof Iri)) return false;
3694
3694
  const v = p.value;
3695
+
3696
+ // Treat RDF Collections as list-term builtins too.
3697
+ if (v === RDF_NS + "first" || v === RDF_NS + "rest") {
3698
+ return true;
3699
+ }
3700
+
3695
3701
  return (
3696
3702
  v.startsWith(CRYPTO_NS) ||
3697
3703
  v.startsWith(MATH_NS) ||
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eyeling",
3
- "version": "1.5.35",
3
+ "version": "1.5.36",
4
4
  "description": "A minimal Notation3 (N3) reasoner in JavaScript.",
5
5
  "main": "./index.js",
6
6
  "keywords": [
package/test/api.test.js CHANGED
@@ -672,6 +672,36 @@ ${U('a')} <-${U('p')} ${U('b')}.`,
672
672
  new RegExp(`_:b2\\s+<${EX}q>\\s+<${EX}joe>\\s*\\.`),
673
673
  ],
674
674
  },
675
+
676
+ { name: '48 rdf:first: works on list terms (alias of list:first)',
677
+ opt: { proofComments: false }, input: ` { ( ${U('a')} ${U('b')} ${U('c')} ) rdf:first ?x. } => { ${U('s')} ${U('first')} ?x. }.
678
+ `,
679
+ expect: [new RegExp(`${EX}s>\\s+<${EX}first>\\s+<${EX}a>\\s*\\.`)],
680
+ },
681
+
682
+ { name: '49 rdf:rest: works on list terms (alias of list:rest)',
683
+ opt: { proofComments: false }, input: ` { ( ${U('a')} ${U('b')} ${U('c')} ) rdf:rest ?r. ?r rdf:first ?y. } => { ${U('s')} ${U('second')} ?y. }.
684
+ `,
685
+ expect: [new RegExp(`${EX}s>\\s+<${EX}second>\\s+<${EX}b>\\s*\\.`)],
686
+ },
687
+
688
+ { name: '50 rdf collection materialization: rdf:first/rdf:rest triples become list terms',
689
+ opt: { proofComments: false }, input: ` ${U('s')} ${U('p')} _:l1.
690
+ _:l1 rdf:first ${U('a')}.
691
+ _:l1 rdf:rest _:l2.
692
+ _:l2 rdf:first ${U('b')}.
693
+ _:l2 rdf:rest rdf:nil.
694
+
695
+ { ${U('s')} ${U('p')} ?lst. ?lst rdf:first ?x. } => { ${U('s')} ${U('q')} ?x. }.
696
+ { ${U('s')} ${U('p')} ?lst. ?lst rdf:rest ?r. ?r rdf:first ?y. } => { ${U('s')} ${U('q2')} ?y. }.
697
+ { ${U('s')} ${U('p')} ?lst. ?lst list:rest ?r. ?r list:first ?y. } => { ${U('s')} ${U('q3')} ?y. }.
698
+ `,
699
+ expect: [
700
+ new RegExp(`${EX}s>\\s+<${EX}q>\\s+<${EX}a>\\s*\\.`),
701
+ new RegExp(`${EX}s>\\s+<${EX}q2>\\s+<${EX}b>\\s*\\.`),
702
+ new RegExp(`${EX}s>\\s+<${EX}q3>\\s+<${EX}b>\\s*\\.`),
703
+ ],
704
+ },
675
705
  ];
676
706
 
677
707
  let passed = 0;