Author: lgiessmann Date: Sun Feb 6 04:41:31 2011 New Revision: 387
Log: TM-SPARQL: added a method to process the special uri tms:topicProperty
Modified: trunk/src/TM-SPARQL/sparql_special_uris.lisp
Modified: trunk/src/TM-SPARQL/sparql_special_uris.lisp ============================================================================== --- trunk/src/TM-SPARQL/sparql_special_uris.lisp (original) +++ trunk/src/TM-SPARQL/sparql_special_uris.lisp Sun Feb 6 04:41:31 2011 @@ -39,6 +39,8 @@ (filter-for-topicProperties construct :revision revision)) ((has-identifier (value pred) *tms-role*) nil) ;TODO: implement + ((has-identifier (value pred) *tms-player*) + nil) ;TODO: implement )))))
@@ -51,72 +53,14 @@ ;; *tms-reifier* ;; *tms-scope* ;; *tms-value* => only when there is <occ|var|nam> ? <LITERAL>, otherwise the predicate is the type of the characteristic - ;; *tms-topicProperty* + ;; *tms-topicProperty* ?? ))
+ (defgeneric filter-for-topicProperties (construct &key revision) (:documentation "Returns a list of triples where the subject represents a topic and the object represents a name or occurrence.") (:method ((construct SPARQL-Triple) &key (revision *TM-REVISION*)) - ;TODO: implement - )) - - -(defgeneric filter-for-values (construct &key revision) - (:documentation "Returns a list of triples that represent a - subject and its literal value as object.") - (:method ((construct SPARQL-Triple) &key revision) - (declare (ignorable revision)) - (when (or (literal-p (object construct)) - (variable-p (object construct))) - (let* ((subj (subject construct)) - (pred (predicate construct)) - (obj (object construct)) - (literal-datatype (literal-datatype obj)) - (subj-uri (unless (variable-p subj) - (when-do id (any-id (value subj) :revision revision) - (embrace-uri (uri id))))) - (pred-uri (unless (variable-p pred) - (when-do id (any-id (value pred) :revision revision) - (embrace-uri (uri id)))))) - (cond ((and (not (variable-p subj)) - (not (variable-p obj))) - (when (or (and (typep subj 'NameC) - (string= literal-datatype *xml-string*) - (string= (charvalue subj) obj)) - (filter-datatypable-by-value subj obj literal-datatype)) - (list (list :subject subj-uri - :predicate pred-uri - :object obj - :literal-datatype literal-datatype)))) - ((not (variable-p subj)) - (list (list :subject subj-uri - :predicate pred-uri - :object (charvalue subj) - :literal-datatype (datatype subj)))) - ((not (variable-p obj)) - (loop for char in (return-characteristics obj literal-datatype) - collect (list :subject (when-do id (any-id char :revision revision) - (embrace-uri id)) - :predicate pred-uri - :object (charvalue char) - :literal-datatype (datatype char)))) - (t ;only pred is given - (let ((chars (append (get-all-names revision) - (get-all-occurrences revision) - (get-all-variants revision)))) - (loop for char in chars - collect (list :subject (when-do id (any-id char :revision revision) - (embrace-uri id)) - :predicate pred-uri - :object (charvalue char) - :literal-datatype (datatype char)))))))))) - - -(defgeneric filter-for-scopes (construct &key revision) - (:documentation "Returns a list of triples that represent a subject as the - scoped item and the object as the scope-topic.") - (:method ((construct SPARQL-Triple) &key (revision *TM-REVISION*)) (unless (literal-p (object construct)) (let* ((subj (subject construct)) (pred (predicate construct)) @@ -132,99 +76,210 @@ (embrace-uri (uri id)))))) (cond ((and (not (variable-p subj)) (not (variable-p obj))) - (when (find obj (themes subj :revision revision)) + (when (find obj (append (names subj :revision revision) + (occurrences subj :revision revision))) (list (list :subject subj-uri :predicate pred-uri :object obj-uri)))) ((not (variable-p subj)) - (loop for scope in (themes subj :revision revision) + (loop for property in (append (names subj :revision revision) + (occurrences subj :revision revision)) collect (list :subject subj-uri :predicate pred-uri - :object (when-do id (any-id scope :revision revision) - (embrace-uri (uri id)))))) + :object (when-do id (any-id property :revision revision) + (embrace-uri id))))) ((not (variable-p obj)) - (let ((scoped-constructs - (used-as-theme (value obj) :revision revision))) - (loop for construct in scoped-constructs - collect (list :subject (when-do id (any-id construct :revision revision) - (embrace-uri (uri id))) - :predicate pred-uri - :object obj-uri)))) - (t ;only pred is given - (let ((scoped-constructs - (remove-null - (map 'list #'(lambda(construct) - (when (themes construct :revision revision) - construct)) - (append (get-all-associations revision) - (get-all-occurrences revision) - (get-all-names revision) - (get-all-variants)))))) - (loop for construct in scoped-constructs - append (loop for scope in (themes construct :revision revision) - collect - (list :subject (when-do id (any-id construct - :revision revision) - (embrace-uri id)) - :predicate pred-uri - :object (when-do id (any-id construct - :revision revision) - (embrace-uri id)))))))))))) - - -(defgeneric filter-for-reifier (construct &key revision) - (:documentation "Returns a list with one triple representing a reifier - and the corresponding reified construct.") - (:method ((construct SPARQL-Triple) &key (revision *TM-REVISION*)) - (unless (literal-p (object construct)) - (let* ((subj (subject construct)) - (pred (predicate construct)) - (obj (object construct)) - (subj-uri (unless (variable-p subj) - (when-do id (any-id (value subj) :revision revision) - (embrace-uri (uri id))))) - (pred-uri (unless (variable-p pred) - (when-do id (any-id (value pred) :revision revision) - (embrace-uri (uri id))))) - (obj-uri (unless (variable-p obj) - (when-do id (any-id (value obj) :revision revision) - (embrace-uri (uri id)))))) - (cond ((and (not (variable-p subj)) - (not (variable-p obj))) - (when (eql (reifier (value subj) :revision revision) - (value obj)) - (list (list :subject subj-uri - :predicate pred-uri - :object obj-uri)))) - ((not (variable-p subj)) - (let ((reifier-top - (reifier (value subj) :revision revision))) - (when reifier-top - (list :subject subj-uri + (let ((parent-top (parent obj :revision revision))) + (when revision + (list :subject (when-do id (any-id parent-top :revision revision) + (embrace-uri id)) :predicate pred-uri - :object (when-do id (any-id reifier-top :revision revision) - (embrace-uri (uri id))))))) - ((not (variable-p obj)) - (let ((reified-cons - (reified-construct (value obj) :revision revision))) - (when reified-cons - (list (list :subject - (when-do id (any-id reified-cons :revision revision) - (embrace-uri (uri id))) - :predicate pred-uri - :object obj-uri))))) + :object obj-uri)))) (t ; only pred is given (let ((topics (remove-null (map 'list #'(lambda(top) - (when (reified-construct top :revision revision) + (when (append + (names top :revision revision) + (occurrences top :revision revision)) top)) (get-all-topics revision))))) (loop for top in topics - collect (list :subject - (when-do id (any-id (reified-construct - top :revision revision)) - (embrace-uri (uri id))) + append (loop for prop in (append + (names top :revision revision) + (occurrences top :revision revision)) + collect (list :subject + (when-do id (any-id top :revision revision) + (embrace-uri id)) + :predicate pred-uri + :object + (when-do id (any-id prop :revision revision) + (embrace-uri id)))))))))))) + + + (defgeneric filter-for-values (construct &key revision) + (:documentation "Returns a list of triples that represent a + subject and its literal value as object.") + (:method ((construct SPARQL-Triple) &key revision) + (declare (ignorable revision)) + (when (or (literal-p (object construct)) + (variable-p (object construct))) + (let* ((subj (subject construct)) + (pred (predicate construct)) + (obj (object construct)) + (literal-datatype (literal-datatype obj)) + (subj-uri (unless (variable-p subj) + (when-do id (any-id (value subj) :revision revision) + (embrace-uri (uri id))))) + (pred-uri (unless (variable-p pred) + (when-do id (any-id (value pred) :revision revision) + (embrace-uri (uri id)))))) + (cond ((and (not (variable-p subj)) + (not (variable-p obj))) + (when (or (and (typep subj 'NameC) + (string= literal-datatype *xml-string*) + (string= (charvalue subj) obj)) + (filter-datatypable-by-value subj obj literal-datatype)) + (list (list :subject subj-uri + :predicate pred-uri + :object obj + :literal-datatype literal-datatype)))) + ((not (variable-p subj)) + (list (list :subject subj-uri + :predicate pred-uri + :object (charvalue subj) + :literal-datatype (datatype subj)))) + ((not (variable-p obj)) + (loop for char in (return-characteristics obj literal-datatype) + collect (list :subject (when-do id (any-id char :revision revision) + (embrace-uri id)) :predicate pred-uri - :object (when-do id (any-id top :revision revision) - (embrace-uri (uri id)))))))))))) \ No newline at end of file + :object (charvalue char) + :literal-datatype (datatype char)))) + (t ;only pred is given + (let ((chars (append (get-all-names revision) + (get-all-occurrences revision) + (get-all-variants revision)))) + (loop for char in chars + collect (list :subject (when-do id (any-id char :revision revision) + (embrace-uri id)) + :predicate pred-uri + :object (charvalue char) + :literal-datatype (datatype char)))))))))) + + + (defgeneric filter-for-scopes (construct &key revision) + (:documentation "Returns a list of triples that represent a subject as the + scoped item and the object as the scope-topic.") + (:method ((construct SPARQL-Triple) &key (revision *TM-REVISION*)) + (unless (literal-p (object construct)) + (let* ((subj (subject construct)) + (pred (predicate construct)) + (obj (object construct)) + (subj-uri (unless (variable-p subj) + (when-do id (any-id (value subj) :revision revision) + (embrace-uri (uri id))))) + (pred-uri (unless (variable-p pred) + (when-do id (any-id (value pred) :revision revision) + (embrace-uri (uri id))))) + (obj-uri (unless (variable-p obj) + (when-do id (any-id (value obj) :revision revision) + (embrace-uri (uri id)))))) + (cond ((and (not (variable-p subj)) + (not (variable-p obj))) + (when (find obj (themes subj :revision revision)) + (list (list :subject subj-uri + :predicate pred-uri + :object obj-uri)))) + ((not (variable-p subj)) + (loop for scope in (themes subj :revision revision) + collect (list :subject subj-uri + :predicate pred-uri + :object (when-do id (any-id scope :revision revision) + (embrace-uri (uri id)))))) + ((not (variable-p obj)) + (let ((scoped-constructs + (used-as-theme (value obj) :revision revision))) + (loop for construct in scoped-constructs + collect (list :subject (when-do id (any-id construct :revision revision) + (embrace-uri (uri id))) + :predicate pred-uri + :object obj-uri)))) + (t ;only pred is given + (let ((scoped-constructs + (remove-null + (map 'list #'(lambda(construct) + (when (themes construct :revision revision) + construct)) + (append (get-all-associations revision) + (get-all-occurrences revision) + (get-all-names revision) + (get-all-variants)))))) + (loop for construct in scoped-constructs + append (loop for scope in (themes construct :revision revision) + collect + (list :subject (when-do id (any-id construct + :revision revision) + (embrace-uri id)) + :predicate pred-uri + :object (when-do id (any-id construct + :revision revision) + (embrace-uri id)))))))))))) + + + (defgeneric filter-for-reifier (construct &key revision) + (:documentation "Returns a list with one triple representing a reifier + and the corresponding reified construct.") + (:method ((construct SPARQL-Triple) &key (revision *TM-REVISION*)) + (unless (literal-p (object construct)) + (let* ((subj (subject construct)) + (pred (predicate construct)) + (obj (object construct)) + (subj-uri (unless (variable-p subj) + (when-do id (any-id (value subj) :revision revision) + (embrace-uri (uri id))))) + (pred-uri (unless (variable-p pred) + (when-do id (any-id (value pred) :revision revision) + (embrace-uri (uri id))))) + (obj-uri (unless (variable-p obj) + (when-do id (any-id (value obj) :revision revision) + (embrace-uri (uri id)))))) + (cond ((and (not (variable-p subj)) + (not (variable-p obj))) + (when (eql (reifier (value subj) :revision revision) + (value obj)) + (list (list :subject subj-uri + :predicate pred-uri + :object obj-uri)))) + ((not (variable-p subj)) + (let ((reifier-top + (reifier (value subj) :revision revision))) + (when reifier-top + (list :subject subj-uri + :predicate pred-uri + :object (when-do id (any-id reifier-top :revision revision) + (embrace-uri (uri id))))))) + ((not (variable-p obj)) + (let ((reified-cons + (reified-construct (value obj) :revision revision))) + (when reified-cons + (list (list :subject + (when-do id (any-id reified-cons :revision revision) + (embrace-uri (uri id))) + :predicate pred-uri + :object obj-uri))))) + (t ; only pred is given + (let ((topics + (remove-null + (map 'list #'(lambda(top) + (when (reified-construct top :revision revision) + top)) + (get-all-topics revision))))) + (loop for top in topics + collect (list :subject + (when-do id (any-id (reified-construct + top :revision revision)) + (embrace-uri (uri id))) + :predicate pred-uri + :object (when-do id (any-id top :revision revision) + (embrace-uri (uri id)))))))))))) \ No newline at end of file