1 ;; -*- coding: utf-8-mcs-er -*-
2 (require 'cwiki-format)
4 (defvar chise-wiki-view-url "view.cgi")
5 (defvar chise-wiki-edit-url "edit.cgi")
6 (defvar chise-wiki-add-url "add.cgi")
8 (defun est-rdf-encode-feature-name (feature-name)
9 (let ((str (symbol-name feature-name))
12 (if (string-match "@" str)
13 (setq base (substring str 0 (match-beginning 0))
14 domain (substring str (match-end 0)))
16 (setq ret (mapconcat (lambda (c)
24 (t (char-to-string c)))
27 ;; (if (eq (aref ret 0) ?.)
28 ;; (setq ret (concat "meta" ret)))
32 (split-string domain "/")
35 (www-uri-encode-feature-name (intern ret)))))
37 (defun est-rdf-format-object (obj)
38 (if (or (characterp obj)
39 (concord-object-p obj))
40 (let ((genre (est-object-genre obj))
41 (url-object (www-uri-encode-object obj)))
44 rdf:about=\"http://www.chise.org/est/rdf.cgi?%s=%s\">
47 (encode-coding-string (format "
51 (defun est-rdf-format-object-list (obj-list &optional with-li)
52 ;; (concat (mapconcat #'est-rdf-format-object
61 (setq dest (concat dest
64 (est-rdf-format-object obj)
67 (setq dest (concat dest (est-rdf-format-object obj)))))
69 (setq dest (concat dest (est-rdf-format-object rest))))
72 (defun est-rdf-display-object-desc (genre uri-object &optional lang level)
75 (let ((object (www-uri-decode-object genre uri-object))
76 logical-feature chise-wiki-displayed-features
78 object-spec logical-object-spec
79 rdf-feature-name rdf-feature-name-space
80 rdf-feature-name-base rdf-feature-name-domain
81 feature-type rdf-container
83 metadata-feature-target metadata-feature-type
88 (when (and (eq genre 'character)
89 (= (length uri-object) 1))
90 (setq uri-object (www-uri-encode-object object)))
91 (when (eq genre 'character)
92 (dolist (feature (char-feature-property '$object 'additional-features))
93 (mount-char-attribute-table
94 (char-feature-name-at-domain feature '$rev=latest))))
96 (if (eq genre 'character)
97 (char-attribute-alist object)
98 (concord-object-spec object)))
99 (dolist (cell (sort object-spec
101 (char-attribute-name<
102 (char-feature-name-sans-versions (car a))
103 (char-feature-name-sans-versions (car b))))))
104 (setq logical-feature (char-feature-name-sans-versions (car cell)))
105 (setq logical-feature-name (symbol-name logical-feature))
106 (when (string-match "[^*]\\*[^*]+$" logical-feature-name)
107 (setq metadata-feature-target
108 (intern (substring logical-feature-name
109 0 (1+ (match-beginning 0)))))
110 (push metadata-feature-target have-matedata))
111 (push (cons logical-feature (cdr cell))
114 (dolist (cell (nreverse logical-object-spec))
115 ;; (setq logical-feature (char-feature-name-sans-versions (car cell)))
116 (setq logical-feature (car cell))
117 (setq logical-feature-name (symbol-name logical-feature))
118 (unless (memq logical-feature chise-wiki-displayed-features)
119 (push logical-feature chise-wiki-displayed-features)
120 (setq value (www-get-feature-value object logical-feature))
121 (setq ret (est-rdf-encode-feature-name logical-feature))
122 (setq rdf-feature-name-domain (car ret)
123 rdf-feature-name-base (cdr ret))
124 (setq rdf-feature-name (format "%s:%s" (car ret)(cdr ret)))
125 (setq rdf-feature-name-space
126 (format "xmlns:%s=\"http://www.chise.org/est/rdf.cgi?domain=%s/\""
129 (setq feature-type (www-feature-type logical-feature))
130 (if (and (consp value)
133 ((eq feature-type 'structure)
134 (setq rdf-container "rdf:Seq")
136 ;; ((eq feature-type 'relation)
137 ;; (setq rdf-container "rdf:Bag")
140 (setq rdf-container "rdf:Bag")
142 (setq rdf-container nil))
144 ((string-match "[^*]\\*[^*]+$" logical-feature-name)
145 (setq metadata-feature-target
146 (intern (substring logical-feature-name
147 0 (1+ (match-beginning 0)))))
148 (setq metadata-feature-type
149 (intern (substring logical-feature-name
150 (1+ (match-beginning 0)))))
151 (setq ret (est-rdf-encode-feature-name metadata-feature-target))
153 (format "<rdf:Description
154 rdf:about=\"#%s...%s\">\n"
156 (setq ret (est-rdf-encode-feature-name metadata-feature-type))
157 (setq rdf-feature-name-domain (car ret)
158 rdf-feature-name-base (cdr ret))
159 (setq rdf-feature-name (format "%s:%s" (car ret)(cdr ret)))
160 (setq rdf-feature-name-space
162 "xmlns:%s=\"http://www.chise.org/est/rdf.cgi?domain=%s/\""
167 (setq metadata-feature-type nil)
169 (format "<rdf:Description
170 rdf:about=\"http://www.chise.org/est/rdf.cgi?%s=%s\">\n"
176 ((memq logical-feature have-matedata)
177 ;; (setq ret (assq logical-feature feature-metadata-alist))
178 (format " <%s\n %s\n rdf:ID=\"%s...%s\">%s%s%s</%s>\n"
180 rdf-feature-name-space
181 rdf-feature-name-domain rdf-feature-name-base
183 (format "\n <%s>" rdf-container)
185 (est-rdf-format-object-list value rdf-container)
187 (format "</%s>\n " rdf-container)
192 (format " <%s\n %s>%s%s%s</%s>\n"
194 rdf-feature-name-space
196 (format "\n <%s>" rdf-container)
198 (est-rdf-format-object-list value rdf-container)
200 (format "</%s>\n " rdf-container)
204 (princ "</rdf:Description>\n")
208 (defun est-rdf-display-feature-desc (uri-feature-name genre uri-object
209 &optional lang simple)
210 (let ((feature-name (www-uri-decode-feature-name uri-feature-name))
211 (name@lang (intern (format "name@%s" lang))))
213 (encode-coding-string
215 <title>EsT feature: %s</title>
223 "<div style=\"text-align:right;\">
224 <a href=\"edit/view.cgi?feature=%s&%s=%s\">
225 <input type=\"submit\" value=\"Edit\" />
227 <input type=\"submit\" value=\"New Account\" />
230 "<div style=\"text-align:right;\">
231 <a href=\"../view.cgi?feature=%s&%s=%s\">
232 <input type=\"submit\" value=\"Simple\" />
236 uri-feature-name genre uri-object))
238 (format "<h1>%s</h1>\n"
239 (www-format-encode-string
240 (symbol-name feature-name))))
241 (princ (format "<p>name : %s "
242 (or (www-format-feature-name feature-name) "")))
246 " <a href=\"%s?feature=%s&property=name&format=string&%s=%s\">"
251 (princ "<input type=\"submit\" value=\"edit\" /></a>\n"))
256 (www-format-encode-string
259 (or (char-feature-property feature-name name@lang) ""))))
263 " <a href=\"%s?feature=%s&property=%s&format=string&%s=%s\">"
269 (princ "<input type=\"submit\" value=\"edit\" /></a>\n"))
271 (www-html-display-paragraph
273 (or (www-feature-type feature-name)
274 ;; (char-feature-property feature-name 'type)
276 (princ (format "<p>value-format : %s "
279 (or (www-feature-value-format feature-name)
287 " <a href=\"%s?feature=%s&property=value-format&format=wiki-text&%s=%s\"
293 (princ "<input type=\"submit\" value=\"edit\" /></a>\n"))
296 (princ "<p>format : ")
297 (www-html-display-text
298 (decode-coding-string
300 (www-feature-format feature-name))
305 " <a href=\"%s?feature=%s&property=format&format=wiki-text&%s=%s\"
311 (princ "<input type=\"submit\" value=\"edit\" /></a>\n"))
314 (www-html-display-paragraph
315 (format "description : %s"
316 (or (char-feature-property feature-name 'description)
319 (www-html-display-paragraph
320 (format "description@%s : %s"
322 (or (char-feature-property
324 (intern (format "description@%s" lang)))
328 (defun est-rdf-batch-view ()
329 (setq terminal-coding-system 'binary)
331 (let* ((target (pop command-line-args-left))
332 (user (pop command-line-args-left))
333 (accept-language (pop command-line-args-left))
334 (mode (intern (pop command-line-args-left)))
339 (car (split-string accept-language ","))
343 (princ "Content-Type: application/xml
345 <?xml version=\"1.0\" encoding=\"UTF-8\" ?>
347 xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"
348 xmlns:dc=\"http://purl.org/dc/elements/1.1/\">
352 (when (string-match "^char=\\(&[^&;]+;\\)" target)
353 (setq ret (match-end 0))
356 (www-uri-encode-object
357 (www-uri-decode-object
358 'character (match-string 1 target)))
359 (substring target ret))))
361 (mapcar (lambda (cell)
362 (if (string-match "=" cell)
364 (setq genre (substring cell 0 (match-beginning 0))
365 ret (substring cell (match-end 0)))
368 (decode-uri-string genre 'utf-8-mcs-er))
370 (list (decode-uri-string cell 'utf-8-mcs-er))))
371 (split-string target "&")))
372 (setq ret (car target))
373 (cond ((eq (car ret) 'char)
374 (est-rdf-display-object-desc
379 ((eq (car ret) 'feature)
380 (est-rdf-display-feature-desc
381 (decode-uri-string (cdr ret) 'utf-8-mcs-er)
388 (est-rdf-display-object-desc
397 (princ (format "%S" err)))
400 (provide 'cwiki-view)