From e70edd2f9c6ba94846255c82c734b4597992e857 Mon Sep 17 00:00:00 2001 From: Michael Jerger Date: Sat, 22 Jul 2023 19:46:55 +0200 Subject: [PATCH] did some cool spec work --- project.clj | 3 +- .../activity_pub_poc/activitystreams2.cljc | 44 ++++++++++++++++--- .../activity_pub_poc/owl.cljc | 20 ++++++++- .../activity_pub_poc/owl_test.cljc | 14 ++++++ 4 files changed, 71 insertions(+), 10 deletions(-) create mode 100644 src/test/cljc/org/domaindrivenarchitecture/activity_pub_poc/owl_test.cljc diff --git a/project.clj b/project.clj index 093ce80..4084f5e 100644 --- a/project.clj +++ b/project.clj @@ -25,6 +25,7 @@ [org.clojars.quoll/raphael "0.1.6"] [instaparse "1.4.12"]] :main ^:skip-aot org.domaindrivenarchitecture.activity-pub-poc.core - :profiles {:test {:test-paths ["src/test/clj"] + :profiles {:test {:test-paths ["src/test/cljc" + "src/test/clj"] :resource-paths ["src/test/resources"] :dependencies [[dda/data-test "0.1.1"]]}}) diff --git a/src/main/cljc/org/domaindrivenarchitecture/activity_pub_poc/activitystreams2.cljc b/src/main/cljc/org/domaindrivenarchitecture/activity_pub_poc/activitystreams2.cljc index 71b718a..a4bffa9 100644 --- a/src/main/cljc/org/domaindrivenarchitecture/activity_pub_poc/activitystreams2.cljc +++ b/src/main/cljc/org/domaindrivenarchitecture/activity_pub_poc/activitystreams2.cljc @@ -1,12 +1,42 @@ (ns org.domaindrivenarchitecture.activity-pub-poc.activitystreams2 (:require [clojure.spec.alpha :as s] + [orchestra.core :refer [defn-spec]] [org.domaindrivenarchitecture.activity-pub-poc.owl :as owl] - [org.domaindrivenarchitecture.activity-pub-poc.rdf :as rdf] - [org.domaindrivenarchitecture.activity-pub-poc.core :as core])) + [org.domaindrivenarchitecture.activity-pub-poc.xsd :as xsd])) + +(defn-spec + is-functional-property? boolean? + "Checks whether spec is a FunctionalProperty." + [spec keyword?] + (some #(clojure.string/includes? % "FunctionalProperty") (s/describe spec))) ;http://www.w3.org/ns/activitystreams#id -;TODO: how do we translate this? rdfs:domain [a owl:Class ; owl:unionOf (as:Link as:Object)] -(s/def ::id (s/and ::owl/FunctionalProperty - ::owl/DatatypeProperty - ::owl/DeprecatedProperty - core/uri-string?)) +(s/def + ::id (s/and ::owl/DatatypeProperty + ::owl/FunctionalProperty + ::owl/DeprecatedProperty + ::xsd/anyURI)) + +;http://www.w3.org/ns/activitystreams#attachment +;TODO: definition in progress +(s/def ::attachment + (s/and ::owl/ObjectProperty)) + +;http://www.w3.org/ns/activitystreams#result +;TODO: definition in progress +(s/def ::result + (s/and ::owl/ObjectProperty)) + +;http://www.w3.org/ns/activitystreams#Object +;TODO: definition in progress +(s/def ::Object (s/keys :opt-un [::attachment])) + +;http://www.w3.org/ns/activitystreams#Activity +;TODO: definition in progress +(s/def ::Activity + (s/and ::Object + (s/keys :opt-un [::result]))) + +;http://www.w3.org/ns/activitystreams#Like +(s/def ::Like ::Activity) + diff --git a/src/main/cljc/org/domaindrivenarchitecture/activity_pub_poc/owl.cljc b/src/main/cljc/org/domaindrivenarchitecture/activity_pub_poc/owl.cljc index 20cd38a..7afe811 100644 --- a/src/main/cljc/org/domaindrivenarchitecture/activity_pub_poc/owl.cljc +++ b/src/main/cljc/org/domaindrivenarchitecture/activity_pub_poc/owl.cljc @@ -1,7 +1,9 @@ (ns org.domaindrivenarchitecture.activity-pub-poc.owl "A swallow spec translation implementation of owl. Inheritance of FunctionalProperty is realized in deep implemented." - (:require [clojure.spec.alpha :as s])) + (:require + [clojure.spec.alpha :as s] + [orchestra.core :refer [defn-spec]])) ; Properties:https://www.w3.org/TR/owl-ref/#Property ; * Datatype properties link individuals to data values. @@ -15,8 +17,22 @@ ;http://www.w3.org/2002/07/owl#FunctionalProperty ;https://www.w3.org/TR/owl-ref/#FunctionalProperty-def -(s/def ::FunctionalProperty any?) +(defn-spec + functional? boolean? + [elem any?] + (and + (some? elem) + (or + (not (coll? elem)) + (and (vector? elem) (= 1 (count elem))) + (and (list? elem) (= 1 (count elem)))))) +(s/def ::FunctionalProperty functional?) ;http://www.w3.org/2002/07/owl#DeprecatedProperty ;https://www.w3.org/TR/owl-ref/#Deprecation (s/def ::DeprecatedProperty any?) + + +;http://www.w3.org/2002/07/owl#ObjectProperty +;https://www.w3.org/TR/owl-ref/#ObjectProperty +(s/def ::ObjectProperty any?) \ No newline at end of file diff --git a/src/test/cljc/org/domaindrivenarchitecture/activity_pub_poc/owl_test.cljc b/src/test/cljc/org/domaindrivenarchitecture/activity_pub_poc/owl_test.cljc new file mode 100644 index 0000000..427751f --- /dev/null +++ b/src/test/cljc/org/domaindrivenarchitecture/activity_pub_poc/owl_test.cljc @@ -0,0 +1,14 @@ +(ns org.domaindrivenarchitecture.activity-pub-poc.owl-test + (:require + [clojure.test :refer [deftest is are testing run-tests]] + [clojure.spec.test.alpha :as st] + [clojure.spec.alpha :as s] + [org.domaindrivenarchitecture.activity-pub-poc.owl :as sut])) + +(deftest functional-predicate + (is (sut/functional? "str")) + (is (sut/functional? 2)) + (is (sut/functional? ["str"])) + (is (not (sut/functional? []))) + (is (not (sut/functional? nil))) + (is (not (sut/functional? [1 2])))) \ No newline at end of file