(in-package :cl-user) ;; demonstrate difference between complete and partial, and show ;; how EquivalentClasses does the same thing as complete. ;; The thing to note is whether !someone is classified as ;; !at-least-one-friend or not (will when complete/EquivalentClasses, ;; won't for partial) (define-ontology complete-example () (object-property !friend) (class !at-least-one-friend :complete (restriction !friend (min-cardinality 1))) (individual !someone (type !owl:Thing) (value !friend !someone))) (define-ontology partial-example () (object-property !friend) (class !at-least-one-friend :partial (restriction !friend (min-cardinality 1))) (individual !someone (type !owl:Thing) (value !friend !someone))) (define-ontology equivalent-example () (object-property !friend) (class !at-least-one-friend :partial) (equivalent-classes !at-least-one-friend (restriction !friend (min-cardinality 1))) (individual !someone (type !owl:Thing) (value !friend !someone))) (defun test-complete-partial () (format t "When using complete, !someone is classified as !at-least-one-friend~%~%") (let ((*default-kb* (kb complete-example))) (describe-entity (uri-full !someone))) (format t "~%But when using partial, !someone isn't classified as !at-least-one-friend~%~%") (let ((*default-kb* (kb partial-example))) (describe-entity (uri-full !someone))) (format t "~%EquivalentClasses can be used in place of complete~%~%") (let ((*default-kb* (kb equivalent-example))) (describe-entity (uri-full !someone))))