did some cool spec work

This commit is contained in:
Michael Jerger 2023-07-22 19:46:55 +02:00
parent 8a02865192
commit e70edd2f9c
4 changed files with 71 additions and 10 deletions

View file

@ -25,6 +25,7 @@
[org.clojars.quoll/raphael "0.1.6"] [org.clojars.quoll/raphael "0.1.6"]
[instaparse "1.4.12"]] [instaparse "1.4.12"]]
:main ^:skip-aot org.domaindrivenarchitecture.activity-pub-poc.core :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"] :resource-paths ["src/test/resources"]
:dependencies [[dda/data-test "0.1.1"]]}}) :dependencies [[dda/data-test "0.1.1"]]}})

View file

@ -1,12 +1,42 @@
(ns org.domaindrivenarchitecture.activity-pub-poc.activitystreams2 (ns org.domaindrivenarchitecture.activity-pub-poc.activitystreams2
(:require [clojure.spec.alpha :as s] (:require [clojure.spec.alpha :as s]
[orchestra.core :refer [defn-spec]]
[org.domaindrivenarchitecture.activity-pub-poc.owl :as owl] [org.domaindrivenarchitecture.activity-pub-poc.owl :as owl]
[org.domaindrivenarchitecture.activity-pub-poc.rdf :as rdf] [org.domaindrivenarchitecture.activity-pub-poc.xsd :as xsd]))
[org.domaindrivenarchitecture.activity-pub-poc.core :as core]))
(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 ;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
(s/def ::id (s/and ::owl/FunctionalProperty ::id (s/and ::owl/DatatypeProperty
::owl/DatatypeProperty ::owl/FunctionalProperty
::owl/DeprecatedProperty ::owl/DeprecatedProperty
core/uri-string?)) ::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)

View file

@ -1,7 +1,9 @@
(ns org.domaindrivenarchitecture.activity-pub-poc.owl (ns org.domaindrivenarchitecture.activity-pub-poc.owl
"A swallow spec translation implementation of owl. Inheritance of FunctionalProperty "A swallow spec translation implementation of owl. Inheritance of FunctionalProperty
is realized in deep implemented." 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 ; Properties:https://www.w3.org/TR/owl-ref/#Property
; * Datatype properties link individuals to data values. ; * Datatype properties link individuals to data values.
@ -15,8 +17,22 @@
;http://www.w3.org/2002/07/owl#FunctionalProperty ;http://www.w3.org/2002/07/owl#FunctionalProperty
;https://www.w3.org/TR/owl-ref/#FunctionalProperty-def ;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 ;http://www.w3.org/2002/07/owl#DeprecatedProperty
;https://www.w3.org/TR/owl-ref/#Deprecation ;https://www.w3.org/TR/owl-ref/#Deprecation
(s/def ::DeprecatedProperty any?) (s/def ::DeprecatedProperty any?)
;http://www.w3.org/2002/07/owl#ObjectProperty
;https://www.w3.org/TR/owl-ref/#ObjectProperty
(s/def ::ObjectProperty any?)

View file

@ -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]))))