(www-uri-decode-feature-name): Decode "meta.<name>" -> `*<name>'.
[chise/tomoyo-tools.git] / concord-turtle-dump.el
index 90f504a..6cf3684 100644 (file)
@@ -1,6 +1,6 @@
 ;;; concord-turtle-dump.el --- Character Database utility -*- coding: utf-8-er; -*-
 
-;; Copyright (C) 2017,2018 MORIOKA Tomohiko.
+;; Copyright (C) 2017,2018,2019 MORIOKA Tomohiko.
 
 ;; Author: MORIOKA Tomohiko <tomo@kanji.zinbun.kyoto-u.ac.jp>
 ;; Keywords: CHISE, Character Database, RDF, Turtle, ISO/IEC 10646, UCS, Unicode, MULE.
   (cond
    ((eq '->subsumptive feature-name)
     ":subsume")
+   ((eq '<-subsumptive feature-name)
+    ":subsumed-in")
+   ((eq '->denotational feature-name)
+    ":unify")
    ((eq '<-denotational feature-name)
-    ":denotation-of")
+    ":unified-by")
+   ((eq '->formed feature-name)
+    ":formed")
    ((eq '<-formed feature-name)
     ":form-of")
+   ((eq '->same feature-name)
+    "ideo:same")
    ((eq '<-same feature-name)
     "ideo:same-as")
+   ((eq '->simplified feature-name)
+    "ideo:simplified-form")
    ((eq '<-simplified feature-name)
     "ideo:simplified-form-of")
+   ((eq '->vulgar feature-name)
+    "ideo:vulgar-form")
    ((eq '<-vulgar feature-name)
     "ideo:vulgar-form-of")
+   ((eq '->wrong feature-name)
+    "ideo:wrong-form")
    ((eq '<-wrong feature-name)
     "ideo:wrong-form-of")
+   ((eq '->original feature-name)
+    "ideo:original-form")
    ((eq '<-original feature-name)
     "ideo:original-form-of")
+   ((eq '->ancient feature-name)
+    "ideo:ancient-form")
    ((eq '<-ancient feature-name)
     "ideo:ancient-form-of")
+   ((eq '->Small-Seal feature-name)
+    "ideo:Small-Seal-form")
    ((eq '<-Small-Seal feature-name)
-    "ideo:Small-Seal-of")
-   ((eq '<-interchangeable feature-name)
-    "ideo:interchangeable-form-of")
+    "ideo:Small-Seal-form-of")
+   ((eq '->Oracle-Bones feature-name)
+    "ideo:Oracle-Bone-character")
+   ((eq '<-Oracle-Bones feature-name)
+    "ideo:Oracle-Bone-character-of")
    ((eq '->interchangeable feature-name)
+    "ideo:interchangeable-form")
+   ((eq '<-interchangeable feature-name)
     "ideo:interchangeable")
    ((eq '->mistakable feature-name)
-    "ideo:mistakable")
+    "ideo:mistakable-character")
+   ((eq '<-mistakable feature-name)
+    "ideo:mistakable-character-of")
    ((eq 'hanyu-dazidian feature-name)
     "ideo:hanyu-dazidian")
    ((eq '*note feature-name)
     "rdfs:comment")
+   ((eq '*references feature-name)
+    ":reference")
    ((eq '*instance feature-name)
     ":instance")
+   ((eq '*source-file feature-name)
+    ":source-file")
    (t
     (concat ":" (chise-turtle-uri-encode-ccs-name feature-name)))))
 
 
 (defun concord-turtle-insert-relation-feature (char name value line-breaking
                                                    ccss readable)
-  (insert (format "    %s%s        "
-                 (chise-turtle-uri-encode-feature-name name)
-                 line-breaking))
+  (if (and (consp value)
+          (cdr value))
+      (insert (format "    %s%s        "
+                     (chise-turtle-uri-encode-feature-name name)
+                     line-breaking))
+    (insert (format "    %-20s "
+                   (chise-turtle-uri-encode-feature-name name))))
   (concord-turtle-insert-relations value readable)
   (insert " ;")
   )
 
 (defun concord-turtle-insert-metadata (name value)
-  (let (col indent ret)
+  (let (col indent)
     (insert (format "%-7s " name))
     (cond
      ((or (eq name :sources)
                        (chise-turtle-uri-encode-ccs-name source))))
       nil)
      ((eq name :references)
-      (setq ret (car value))
-      (setq ret (plist-get (nth 1 ret) :ref))
-      (setq col (current-column))
-      (setq indent (make-string col ?\ ))
-      (insert (format "<%s>" ret))
-      (dolist (refspec (cdr value))
-       (setq ret (plist-get (nth 1 refspec) :ref))
-       (insert (format " ,\n%s<%s>" indent ret)))
+      (concord-turtle-insert-references value)
       nil)
      (t
       (insert (format "%S" value))
                                                 al
                                                 nil 'for-sub-node)
            (setq separator lbs))
-       (setq ret (prin1-to-string cell))
+       (setq ret (if (concord-object-p cell)
+                     (concord-turtle-encode-object cell)
+                   (prin1-to-string cell)))
        (if separator
            (if (< (+ (current-column)
                      (length ret)
     (insert " ;")
     'with-separator))
 
+(defun concord-turtle-insert-references (value &optional readable)
+  (let (ret col indent)
+    (setq ret (car value))
+    (setq ret (plist-get (nth 1 ret) :ref))
+    (setq col (current-column))
+    (setq indent (make-string col ?\ ))
+    (insert (format "<%s>" ret))
+    (dolist (refspec (cdr value))
+      (setq ret (plist-get (nth 1 refspec) :ref))
+      (insert (format " ,\n%s<%s>" indent ret)))))
+
 (defun concord-turtle-insert-object (cell &optional readable)
   (if (integerp cell)
       (setq cell (decode-char '=ucs cell)))
        ((eq feature-name-base '=decomposition)
         (concord-turtle-insert-decomposition value readable)
         )
+       ((eq feature-name-base '*references)
+        (concord-turtle-insert-references value readable)
+        )
        ((or (eq feature-name-base 'ideographic-combination)
             (eq feature-name-base '*instance)
+            (eq feature-name-base 'abstract-glyph)
             (eq feature-name-base '<-formed)
             (string-match "^\\(->\\|<-\\)[^*]*$" (symbol-name feature-name-base)))
         (concord-turtle-insert-relations value readable)
                                            ccss readable)
       (setq obj-spec (delete feature-pair obj-spec))
       )
-    (when (and (setq feature-pair (assq '<-denotational@component obj-spec))
-              (setq value (cdr feature-pair)))
-      (insert line-separator)
-      (concord-turtle-insert-relation-feature
-       object '<-denotational@component value
-       line-breaking
-       ccss readable)
-      (setq obj-spec (delete feature-pair obj-spec))
-      )
+    ;; (when (and (setq feature-pair (assq '<-denotational@component obj-spec))
+    ;;            (setq value (cdr feature-pair)))
+    ;;   (insert line-separator)
+    ;;   (concord-turtle-insert-relation-feature
+    ;;    object '<-denotational@component value
+    ;;    line-breaking
+    ;;    ccss readable)
+    ;;   (setq obj-spec (delete feature-pair obj-spec))
+    ;;   )
     (when (and (setq feature-pair (assq 'name obj-spec))
               (setq value (cdr feature-pair)))
       (insert (format "%s    " line-separator))
          (insert (format "%s    ideo:total-strokes     [ "
                          line-separator))
          (setq col (current-column))
+         (setq indent (make-string col ?\ ))
          (insert (format ":context domain:%-7s ;\n%srdf:value %S"
                          (chise-turtle-uri-encode-ccs-name domain)
-                         (make-string col ?\ )
+                         indent
                          value))
          (setq obj-spec (delete feature-pair obj-spec))
          (setq skey (intern (format "%s*sources" key)))
          (when (and (setq feature-pair (assq skey obj-spec))
                     (setq value (cdr feature-pair)))
-            (insert (format " ;\n%s" indent))
+           (insert (format " ;\n%s" indent))
             (concord-turtle-insert-metadata :sources value)
             ;; (insert (format " ;\n%s:sources (" indent))
-            ;; (setq col (current-column))
-            ;; (setq indent (make-string col ?\ ))
             ;; (insert (format " chisebib:%s" (car value)))
             ;; (dolist (cell (cdr value))
             ;;   (insert (format "\n%s chisebib:%s" indent cell)))