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"]
[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"]]}})

View file

@ -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
(s/def
::id (s/and ::owl/DatatypeProperty
::owl/FunctionalProperty
::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
"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?)

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