
Author: lgiessmann Date: Tue Apr 26 09:36:46 2011 New Revision: 428 Log: TM-SPARQL: added the possibility to search for triplles of the form "?var1 ?var2 ?var3" => adopted the corresponding unit-tests to this change Modified: trunk/src/TM-SPARQL/sparql.lisp trunk/src/unit_tests/sparql_test.lisp Modified: trunk/src/TM-SPARQL/sparql.lisp ============================================================================== --- trunk/src/TM-SPARQL/sparql.lisp (original) +++ trunk/src/TM-SPARQL/sparql.lisp Tue Apr 26 09:36:46 2011 @@ -572,7 +572,8 @@ (let ((results (append (or (filter-by-given-subject construct :revision revision) (filter-by-given-predicate construct :revision revision) - (filter-by-given-object construct :revision revision)) + (filter-by-given-object construct :revision revision) + (filter-by-variable-triple construct :revision revision)) (filter-by-special-uris construct :revision revision)))) (map 'list #'(lambda(result) (push (getf result :subject) (subject-result construct)) @@ -583,6 +584,29 @@ results))))) +(defgeneric filter-by-variable-triple (construct &key revision) + (:documentation "Returns all graphs that match a triple consisting + only of variables.") + (:method ((construct SPARQL-Triple) &key (revision *TM-REVISION*)) + (when (and (variable-p (subject construct)) + (variable-p (predicate construct)) + (variable-p (object construct))) + (let ((all-possible-subjects + (append (get-all-topics revision) + (get-all-occurrences revision) + (get-all-names revision) + (get-all-variants revision) + (get-all-associations revision) + (get-all-roles revision)))) + (remove-null + (loop for subj in all-possible-subjects + append (when (typep subj 'TopicC) + (append (filter-characteristics + subj nil nil nil :revision revision) + (filter-associations + subj nil nil :revision revision))))))))) + + (defgeneric filter-by-given-object (construct &key revision) (:documentation "Returns a list representing a triple that is the result of a given object.") Modified: trunk/src/unit_tests/sparql_test.lisp ============================================================================== --- trunk/src/unit_tests/sparql_test.lisp (original) +++ trunk/src/unit_tests/sparql_test.lisp Tue Apr 26 09:36:46 2011 @@ -450,11 +450,11 @@ (is (= (length (tm-sparql::select-group q-obj-2)) 1)) (is-true q-obj-3) (is (= (length (tm-sparql::select-group q-obj-3)) 1)) - (is-false (tm-sparql::subject-result + (is-true (tm-sparql::subject-result (first (tm-sparql::select-group q-obj-1)))) - (is-false (tm-sparql::predicate-result + (is-true (tm-sparql::predicate-result (first (tm-sparql::select-group q-obj-1)))) - (is-false (tm-sparql::object-result + (is-true (tm-sparql::object-result (first (tm-sparql::select-group q-obj-1)))) (is (= (length (tm-sparql::subject-result (first (tm-sparql::select-group q-obj-2)))) 2))