guile-jsonld/jsonld/context.scm

context.scm

1
;;;; Copyright (C) 2019, 2020 Julien Lepiller <julien@lepiller.eu>
2
;;;; 
3
;;;; This library is free software; you can redistribute it and/or
4
;;;; modify it under the terms of the GNU Lesser General Public
5
;;;; License as published by the Free Software Foundation; either
6
;;;; version 3 of the License, or (at your option) any later version.
7
;;;; 
8
;;;; This library is distributed in the hope that it will be useful,
9
;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
10
;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11
;;;; Lesser General Public License for more details.
12
;;;; 
13
;;;; You should have received a copy of the GNU Lesser General Public
14
;;;; License along with this library; if not, write to the Free Software
15
;;;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
;;;; 
17
18
(define-module (jsonld context)
19
  #:use-module (ice-9 match)
20
  #:use-module (srfi srfi-9)
21
  #:export (make-active-context
22
            active-context?
23
            active-context-definitions
24
            active-context-base
25
            active-context-original-base
26
            active-context-vocab
27
            active-context-language
28
            active-context-direction
29
            active-context-previous
30
            new-active-context
31
            update-active-context
32
33
            make-term-definition
34
            term-definition?
35
            term-definition-iri
36
            term-definition-base-url
37
            term-definition-reverse?
38
            term-definition-type
39
            term-definition-language
40
            term-definition-direction
41
            term-definition-context
42
            term-definition-nest
43
            term-definition-prefix?
44
            term-definition-index
45
            term-definition-protected?
46
            term-definition-container
47
            term-definition-equal?
48
            new-term-definition
49
            update-term-definition
50
            term-definition-ref))
51
52
;;; Section 4.1: definitions of an Active Context and a Term Definition
53
54
(define-record-type active-context
55
  (make-active-context definitions base original-base vocab language direction
56
                       previous)
57
  active-context?
58
  (definitions   active-context-definitions)
59
  (base          active-context-base)
60
  (original-base active-context-original-base)
61
  (vocab         active-context-vocab)
62
  (language      active-context-language)
63
  (direction     active-context-direction)
64
  (previous      active-context-previous))
65
66
(define* (update-active-context
67
           active-context
68
           #:key (definitions   (active-context-definitions   active-context))
69
                 (base          (active-context-base          active-context))
70
                 (original-base (active-context-original-base active-context))
71
                 (vocab         (active-context-vocab         active-context))
72
                 (language      (active-context-language      active-context))
73
                 (direction     (active-context-direction     active-context))
74
                 (previous      (active-context-previous      active-context)))
75
  (make-active-context definitions base original-base vocab language direction
76
                       previous))
77
78
(define* (new-active-context
79
           #:key (definitions   '())
80
                 (base          #f)
81
                 (original-base #f)
82
                 (vocab         #f)
83
                 (language      #f)
84
                 (direction     #f)
85
                 (previous      #nil))
86
  (make-active-context definitions base original-base vocab language direction
87
                       previous))
88
89
(define-record-type term-definition
90
  (make-term-definition iri prefix? protected? reverse? base-url context container
91
                        direction index language nest type)
92
  term-definition?
93
  (iri        term-definition-iri)
94
  (prefix?    term-definition-prefix?)
95
  (protected? term-definition-protected?)
96
  (reverse?   term-definition-reverse?)
97
  (base-url   term-definition-base-url)
98
  (context    term-definition-context)
99
  (container  term-definition-container)
100
  (direction  term-definition-direction)
101
  (index      term-definition-index)
102
  (language   term-definition-language)
103
  (nest       term-definition-nest)
104
  (type       term-definition-type))
105
106
(define* (update-term-definition
107
           term-definition
108
           #:key (iri        (term-definition-iri        term-definition))
109
                 (prefix?    (term-definition-prefix?    term-definition))
110
                 (protected? (term-definition-protected? term-definition))
111
                 (reverse?   (term-definition-reverse?   term-definition))
112
                 (base-url   (term-definition-base-url   term-definition))
113
                 (context    (term-definition-context    term-definition))
114
                 (container  (term-definition-container  term-definition))
115
                 (direction  (term-definition-direction  term-definition))
116
                 (index      (term-definition-index      term-definition))
117
                 (language   (term-definition-language   term-definition))
118
                 (nest       (term-definition-nest       term-definition))
119
                 (type       (term-definition-type       term-definition)))
120
  (make-term-definition iri prefix? protected? reverse? base-url context container
121
                        direction index language nest type))
122
123
(define* (new-term-definition
124
           #:key (iri        #f)
125
                 (prefix?    #f)
126
                 (protected? #f)
127
                 (reverse?   #f)
128
                 (base-url   #f)
129
                 (context    #f)
130
                 (container  #f)
131
                 (direction  #f)
132
                 (index      #f)
133
                 (language   #f)
134
                 (nest       #f)
135
                 (type       #f))
136
  (make-term-definition iri prefix? protected? reverse? base-url context container
137
                        direction index language nest type))
138
139
(define (term-definition-equal? a b)
140
  (match a
141
    (($ term-definition iri prefix? protected? reverse? base-url context
142
        container direction index language nest type)
143
     (and (term-definition? b)
144
          (equal? iri        (term-definition-iri        b))
145
          (equal? prefix?    (term-definition-prefix?    b))
146
          (equal? protected? (term-definition-protected? b))
147
          (equal? reverse?   (term-definition-reverse?   b))
148
          (equal? base-url   (term-definition-base-url   b))
149
          (equal? context    (term-definition-context    b))
150
          (equal? container  (term-definition-container  b))
151
          (equal? direction  (term-definition-direction  b))
152
          (equal? index      (term-definition-index      b))
153
          (equal? language   (term-definition-language   b))
154
          (equal? nest       (term-definition-nest       b))
155
          (equal? type       (term-definition-type       b))))
156
    (_ #f)))
157
158
(define (term-definition-ref context term)
159
  (let ((definitions (active-context-definitions context)))
160
    (assoc-ref definitions term)))
161