(defun write-inferred-superclasses (source-filename dest-filename inferred-ontology-uri) (let ((kb (load-kb-jena source-filename))) (if (check kb) (with-ontology inferred (:base inferred-ontology-uri) ((loop for (sub super) in (set-difference (loop for class in (descendants !owl:Thing kb) append (loop for super in (parents class kb) collect (list class super))) (sparql '(:select (?sub ?super) (:distinct t) (?sub !rdfs:subClassOf ?super)) :use-reasoner :jena :kb kb) :test 'equal) collect (class sub :partial super))) (write-rdfxml inferred dest-filename)) (error "KB isn't consistent, so inferred superclasses won't be correct"))))