root/lang/scheme/bloscheme/template-rdf.scm @ 32353

Revision 1133, 3.1 kB (checked in by cho45, 6 years ago)
  • Property svn:executable set to *
Line 
1#!gosh
2(use text.html-lite)
3(use text.tree)
4
5(define-module
6  text.xml-lite
7  (extend text.html-lite)
8  (define-macro (define-elements prefix . elements)
9                (define (make-scheme-name name)
10                  (string->symbol (format #f "~a:~a" prefix name)))
11                (let loop ((elements elements)
12                           (r '()))
13                  (cond ((null? elements) `(begin ,@(reverse r)))
14                        ((and (pair? (cdr elements)) (eqv? (cadr elements) :empty))
15                         (loop (cddr elements)
16                               (list* `(define ,(make-scheme-name (car elements))
17                                         (make-html-element ',(make-scheme-name (car elements)) :empty? #t))
18                                      `(export ,(make-scheme-name (car elements)))
19                                      r)))
20                        (else
21                          (loop (cdr elements)
22                                (list* `(define ,(make-scheme-name (car elements))
23                                          (make-html-element ',(make-scheme-name (car elements))))
24                                       `(export ,(make-scheme-name (car elements)))
25                                       r))))
26                  ))
27  (define-elements rdf RDF Seq Alt Bag li)
28  (define-elements rss channel items item title link description)
29  (define-elements content encoded)
30  (define-elements dc creator date title description)
31  (define-elements admin generatorAgent)
32  )
33(import text.xml-lite)
34
35(define (result stash-table)
36  (define (stash name)
37    (html-escape-string (hash-table-get stash-table name)))
38  (define (stash-raw name)
39    (hash-table-get stash-table name))
40  (define base *server-root*)
41
42  `(,(cgi-header :content-type "application/rss+xml; charset=UTF-8")
43     ,(rdf:RDF
44        :xmlns:rss     "http://purl.org/rss/1.0/"
45        :xmlns:rdf     "http://www.w3.org/1999/02/22-rdf-syntax-ns#"
46        :xmlns:dc      "http://purl.org/dc/elements/1.1/"
47        :xmlns:admin   "http://webns.net/mvcb/"
48        :xmlns:content "http://purl.org/rss/1.0/modules/content/"
49
50        (rss:channel
51          :rdf:about ""
52          (rss:title (html-escape-string *blog-title*))
53          (rss:link (string-join (list base (stash 'home)) ""))
54          (rss:description "")
55          (admin:generatorAgent :rdf:resource "http://jknaoya.s311.xrea.com/bloscheme/bloscheme.cgi/?v=0")
56          (rss:items
57            (rdf:Seq
58              (map (lambda (file)
59                     (rdf:li :rdf:resource (string-join (list base (stash 'home) (file 'name)) "")))
60                   (stash-raw 'files))
61              )))
62        (map (lambda (file)
63               (rss:item
64                 :rdf:about (string-join (list base (stash 'home) (file 'name)) "")
65
66                 (rss:title (html-escape-string (file 'title)))
67                 (rss:link (string-join (list base (stash 'home) (file 'name)) ""))
68                 (dc:date (date->string (file 'date) "~Y-~m-~dT~H:~M:~S+09:00"))
69                 (content:encoded (html-escape-string (string-join (file 'body) "\n")))
70
71                 ))
72             (stash-raw 'files))
73        ) ; /rdf:RDF
74     )
75  )
Note: See TracBrowser for help on using the browser.