[isidorus-cvs] r119 - trunk/src/xml/rdf

Lukas Giessmann lgiessmann at common-lisp.net
Tue Aug 25 12:06:20 UTC 2009


Author: lgiessmann
Date: Tue Aug 25 08:06:11 2009
New Revision: 119

Log:
rdf-exporter: added the type isi:topic that is used in nodes representing topics that owns more than one psis or item-identifiers, subject-locators, names and occurrences which are represented as isi:occurrence nodes

Modified:
   trunk/src/xml/rdf/exporter.lisp

Modified: trunk/src/xml/rdf/exporter.lisp
==============================================================================
--- trunk/src/xml/rdf/exporter.lisp	(original)
+++ trunk/src/xml/rdf/exporter.lisp	Tue Aug 25 08:06:11 2009
@@ -140,7 +140,21 @@
   (if (psis topic)
       (cxml:attribute "rdf:resource" (uri (first (psis topic))))
       (cxml:attribute "rdf:nodeID" (make-object-id topic))))
-		      
+
+
+(defun isi-occurrence-p (owner-topic)
+  "Returns t if the owner topic has an occurrence that will
+   be mapped to an RDF occurrence node and no an
+   usual RDF property."
+  (declare (TopicC owner-topic))
+  (loop for occ in (occurrences owner-topic)
+     when (let ((ii (item-identifiers occ))
+		(scopes (loop for scope in (themes occ)
+			   when (not (xml-lang-p scope))
+			   collect scope)))
+	    (or ii scopes
+		(> (length (themes occ)) 1)))
+     return t))
 
 
 (defgeneric to-rdf-elem (construct)
@@ -221,6 +235,7 @@
 		     when (not (xml-lang-p theme))
 		     collect theme))))
     (if (or scopes
+	    (> (length (themes construct)) 1)
 	    (item-identifiers construct)
 	    (/= (length (psis (instance-of construct))) 1))
 	(cxml:with-element "isi:occurrence"
@@ -259,13 +274,21 @@
           ;; rdf:resource, rdf:about or any other reference
       (cxml:with-element "rdf:Description"
 	(let ((psi (when (psis construct)
-		     (first (psis construct)))))
+		     (first (psis construct))))
+	      (ii (item-identifiers construct))
+	      (sl (locators construct))
+	      (t-names (names construct))
+	      (t-occs (occurrences construct)))
 	  (if psi
 	      (cxml:attribute "rdf:about" (uri psi))
 	      (cxml:attribute "rdf:nodeID" (make-object-id construct)))
+	  (when (or (> (length (psis construct)) 1)
+		    ii sl t-names
+		    (isi-occurrence-p construct))
+	    (make-isi-type "topic"))
 	  (map 'list #'to-rdf-elem (remove psi (psis construct)))
-	  (map 'list #'to-rdf-elem (locators construct))
-	  (map 'list #'to-rdf-elem (item-identifiers construct))
+	  (map 'list #'to-rdf-elem sl)
+	  (map 'list #'to-rdf-elem ii)
 	  (map 'list #'(lambda(x)
 			 (cxml:with-element "rdf:type"
 			   (make-topic-reference x)))
@@ -274,8 +297,8 @@
 			 (cxml:with-element "rdfs:subClassOf"
 			   (make-topic-reference x)))
 	       (list-super-types construct))
-	  (map 'list #'to-rdf-elem (names construct))
-	  (map 'list #'to-rdf-elem (occurrences construct))))))
+	  (map 'list #'to-rdf-elem t-names)
+	  (map 'list #'to-rdf-elem t-occs)))))
   
 
 (defmethod to-rdf-elem ((construct AssociationC))




More information about the Isidorus-cvs mailing list