(defun est-rdf-encode-feature-name (feature-name)
(let ((str (symbol-name feature-name))
base domain
- ret)
+ ret is-not-top
+ xmlns-prefix xmlns-uri)
(if (string-match "@" str)
(setq base (substring str 0 (match-beginning 0))
domain (substring str (match-end 0)))
(setq base str))
(setq ret (mapconcat (lambda (c)
- (cond ((eq c ?*)
- ".")
- ((eq c ?/)
- "-")
- (t (char-to-string c))))
+ (prog1
+ (cond ((eq c ?*)
+ (if is-not-top
+ ".-."
+ "meta."))
+ ((eq c ?/)
+ "...")
+ (t (char-to-string c)))
+ (setq is-not-top t)))
base ""))
- (if (eq (aref ret 0) ?.)
- (setq ret (concat "meta" ret)))
- (cons (if domain
- (concat "est."
- (mapconcat #'identity
- (split-string domain "/")
- "."))
- "est")
+ (if domain
+ (setq xmlns-prefix
+ (or xmlns-prefix
+ (concat "est."
+ (mapconcat #'identity
+ (split-string domain "/")
+ "."))))
+ (setq xmlns-prefix (or (char-feature-property
+ feature-name 'rdf-namespace-prefix)
+ 'est)
+ xmlns-uri (char-feature-property
+ feature-name 'rdf-namespace-uri)))
+ (list xmlns-prefix
+ (or xmlns-uri
+ (format "http://www.chise.org/est/rdf.cgi?domain=%s/"
+ xmlns-prefix))
(www-uri-encode-feature-name (intern ret)))))
(defun est-rdf-format-object (obj)
(setq level 0))
(let ((object (www-uri-decode-object genre uri-object))
logical-feature chise-wiki-displayed-features
- object-spec
+ logical-feature-name
+ object-spec logical-object-spec
rdf-feature-name rdf-feature-name-space
+ rdf-feature-name-base rdf-feature-name-domain rdf-feature-name-uri
feature-type rdf-container
- value ret)
+ value ret
+ metadata-feature-target metadata-feature-type
+ have-matedata)
(if (eq level 0)
(setq level 1))
(when object
(if (eq genre 'character)
(char-attribute-alist object)
(concord-object-spec object)))
- (princ
- (format "<rdf:Description
- rdf:about=\"http://www.chise.org/est/rdf.cgi/%s=%s\">\n"
- genre uri-object))
(dolist (cell (sort object-spec
(lambda (a b)
(char-attribute-name<
(char-feature-name-sans-versions (car a))
(char-feature-name-sans-versions (car b))))))
(setq logical-feature (char-feature-name-sans-versions (car cell)))
+ (setq logical-feature-name (symbol-name logical-feature))
+ (when (string-match "[^*]\\*[^*]+$" logical-feature-name)
+ (setq metadata-feature-target
+ (intern (substring logical-feature-name
+ 0 (1+ (match-beginning 0)))))
+ (push metadata-feature-target have-matedata))
+ (push (cons logical-feature (cdr cell))
+ logical-object-spec)
+ )
+ (dolist (cell (nreverse logical-object-spec))
+ ;; (setq logical-feature (char-feature-name-sans-versions (car cell)))
+ (setq logical-feature (car cell))
+ (setq logical-feature-name (symbol-name logical-feature))
(unless (memq logical-feature chise-wiki-displayed-features)
(push logical-feature chise-wiki-displayed-features)
(setq value (www-get-feature-value object logical-feature))
(setq ret (est-rdf-encode-feature-name logical-feature))
- (setq rdf-feature-name (format "%s:%s" (car ret)(cdr ret)))
+ (setq rdf-feature-name-domain (car ret)
+ rdf-feature-name-uri (nth 1 ret)
+ rdf-feature-name-base (nth 2 ret))
+ (setq rdf-feature-name (format "%s:%s"
+ rdf-feature-name-domain
+ rdf-feature-name-base))
(setq rdf-feature-name-space
- (format "xmlns:%s=\"http://www.chise.org/est/rdf.cgi?domain=%s/\""
- (car ret)
- (car ret)))
+ (format "xmlns:%s=\"%s\""
+ rdf-feature-name-domain
+ rdf-feature-name-uri))
(setq feature-type (www-feature-type logical-feature))
(if (and (consp value)
(cdr value))
(setq rdf-container "rdf:Bag")
))
(setq rdf-container nil))
+ (cond
+ ((string-match "[^*]\\*[^*]+$" logical-feature-name)
+ (setq metadata-feature-target
+ (intern (substring logical-feature-name
+ 0 (1+ (match-beginning 0)))))
+ ;; (setq metadata-feature-type
+ ;; (intern (substring logical-feature-name
+ ;; (1+ (match-beginning 0)))))
+ (setq metadata-feature-type
+ (intern (substring logical-feature-name
+ (+ (match-beginning 0) 2))))
+ (setq ret (est-rdf-encode-feature-name metadata-feature-target))
+ (princ
+ (format "<rdf:Description
+ rdf:about=\"#%s...%s\">\n"
+ (car ret)(nth 2 ret)))
+ (setq ret (est-rdf-encode-feature-name metadata-feature-type))
+ (setq rdf-feature-name-domain (car ret)
+ rdf-feature-name-uri (nth 1 ret)
+ rdf-feature-name-base (nth 2 ret))
+ (setq rdf-feature-name (format "%s:%s"
+ rdf-feature-name-domain
+ rdf-feature-name-base))
+ (setq rdf-feature-name-space
+ (format "xmlns:%s=\"%s\""
+ rdf-feature-name-domain
+ rdf-feature-name-uri))
+ )
+ (t
+ (setq metadata-feature-type nil)
+ (princ
+ (format "<rdf:Description
+ rdf:about=\"http://www.chise.org/est/rdf.cgi?%s=%s\">\n"
+ genre uri-object
+ ))
+ ))
(princ
- (format " <%s\n %s>%s%s%s</%s>\n"
- rdf-feature-name
- rdf-feature-name-space
- (if rdf-container
- (format "\n <%s>" rdf-container)
- "")
- (est-rdf-format-object-list value rdf-container)
- (if rdf-container
- (format "</%s>\n " rdf-container)
- "")
- rdf-feature-name))
+ (cond
+ ((memq logical-feature have-matedata)
+ ;; (setq ret (assq logical-feature feature-metadata-alist))
+ (format " <%s\n %s\n rdf:ID=\"%s...%s\">%s%s%s</%s>\n"
+ rdf-feature-name
+ rdf-feature-name-space
+ rdf-feature-name-domain rdf-feature-name-base
+ (if rdf-container
+ (format "\n <%s>" rdf-container)
+ "")
+ (est-rdf-format-object-list value rdf-container)
+ (if rdf-container
+ (format "</%s>\n " rdf-container)
+ "")
+ rdf-feature-name)
+ )
+ (t
+ (format " <%s\n %s>%s%s%s</%s>\n"
+ rdf-feature-name
+ rdf-feature-name-space
+ (if rdf-container
+ (format "\n <%s>" rdf-container)
+ "")
+ (est-rdf-format-object-list value rdf-container)
+ (if rdf-container
+ (format "</%s>\n " rdf-container)
+ "")
+ rdf-feature-name)
+ )))
+ (princ "</rdf:Description>\n")
))
- (princ "</rdf:Description>")
)))
(defun est-rdf-display-feature-desc (uri-feature-name genre uri-object
lang nil)
))
))
- (princ "
-</rdf:RDF>")
+ (princ "</rdf:RDF>")
)
(error nil
(princ (format "%S" err)))