guile-jsonld/jsonld/term-selection.scm

term-selection.scm

1
;;;; Copyright (C) 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 term-selection)
19
  #:use-module (jsonld json)
20
  #:export (term-selection))
21
22
(define* (term-selection inverse-context var containers type/language
23
                         preferred-values)
24
  (let ((container-map (assoc-ref inverse-context var))
25
        (result json-null))
26
    ;; 2
27
    (for-each
28
      (lambda (container)
29
        ;; 2.1
30
        (when (json-has-key? container-map container)
31
          ;; 2.2
32
          (let* ((type/language-map (assoc-ref container-map container))
33
                 ;; 2.3
34
                 (value-map (assoc-ref type/language-map type/language)))
35
            (for-each
36
              (lambda (item)
37
                (when (json-has-key? value-map item)
38
                  (unless (not-null-or-false result)
39
                    (set! result (assoc-ref value-map item)))))
40
              preferred-values))))
41
      containers)
42
    ;; 3
43
    result))
44